Compare commits

...

7 Commits

Author SHA1 Message Date
lsymicc
32b5a6d301 实垛任务间隔时长调整 2026-07-13 10:33:47 +08:00
lsymicc
6b4a8fac87 更新放货完成状态限制 2026-07-13 10:22:21 +08:00
lsymicc
f406cadd44 增加校验提示信息 2026-07-10 15:23:30 +08:00
lsymicc
6864256202 任务限制优化 2026-07-07 14:00:05 +08:00
Administrator
991893c2d0 1 2026-07-07 10:32:25 +08:00
lsymicc
773aea0c5d 生成任务校验优化 2026-06-29 15:11:28 +08:00
lsymicc
d5b36e5ae7 取货状态校验优化 2026-06-29 15:02:05 +08:00
6 changed files with 221 additions and 133 deletions

View File

@@ -5,8 +5,6 @@ VisualStudioVersion = 17.7.34003.232
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WPFWCSDemo", "WPFWCSDemo\WPFWCSDemo.csproj", "{604005A1-35A4-48E2-8011-20C38F2AC571}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProject1", "TestProject1\TestProject1.csproj", "{BD8D724A-5381-4BBD-BB94-240AD27DD2A7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -17,10 +15,6 @@ Global
{604005A1-35A4-48E2-8011-20C38F2AC571}.Debug|Any CPU.Build.0 = Debug|Any CPU
{604005A1-35A4-48E2-8011-20C38F2AC571}.Release|Any CPU.ActiveCfg = Release|Any CPU
{604005A1-35A4-48E2-8011-20C38F2AC571}.Release|Any CPU.Build.0 = Release|Any CPU
{BD8D724A-5381-4BBD-BB94-240AD27DD2A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD8D724A-5381-4BBD-BB94-240AD27DD2A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD8D724A-5381-4BBD-BB94-240AD27DD2A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BD8D724A-5381-4BBD-BB94-240AD27DD2A7}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE

View File

@@ -32,29 +32,68 @@ namespace WPFWCSDemo.Schedules.CircleRGV
public static bool CanTaskGenerated(int sourceLocation, int targetLocation, bool isNotException)
{
//校验---源站点请求
if (QueryForIsRequestReset(sourceLocation, 3)) return false;
if (QueryForIsRequestReset(sourceLocation, 3))
{
Log.Error($"【提示01】<空托任务>生成失败,源站点[{sourceLocation}]请求未复位,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验---目标站点请求
if (QueryForIsRequestReset(targetLocation, 3)) return false;
if (QueryForIsRequestReset(targetLocation, 3))
{
Log.Error($"【提示02】<空托任务>生成失败,目标站点[{targetLocation}]请求未复位,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验---系统异常
if (!isNotException) return false;
if (!isNotException)
{
Log.Error($"【提示03】<空托任务>生成失败,源站点[{sourceLocation}],目标站点[{targetLocation}],输送线系统异常,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验---同输送口相邻任务生成时间间隔过短
if (!CheckSendTaskTimeInterval(targetLocation, 999)) return false;
if (!CheckSendTaskTimeInterval(targetLocation, 120))
{
Log.Error($"【提示04】<空托任务>生成失败,目标站点[{targetLocation}]相邻任务生成时间间隔过短,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验---如果已经存在处于【取货阶段】的某个【空托】任务
//由于【空托任务】输送线的源站点唯一,因此必须等待该任务取货完成才能生成新的【空托】任务
if (!IsPalletConvHasGettingTask()) return false;
if (!IsPalletLineHasTask())
{
Log.Error($"【提示05】<空托任务>生成失败,源站点[{sourceLocation}]已经存在处于取货阶段的空托任务,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验---当前输送线存在【空托】任务
if (!GetRGVTaskForPalletsIsExist(targetLocation)) return false;
if (!GetRGVTaskForPalletsIsExist(targetLocation))
{
Log.Error($"【提示06】<空托任务>生成失败,目标站点[{targetLocation}]已经存在处于取货阶段的空托任务,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验5.当前同一【目标站点】是否已经生成任务
if (!CheckSendTaskIsRepeat(sourceLocation, TaskType.Pallet)) return false;
if (!CheckSendTaskIsRepeat(sourceLocation, TaskType.Pallet))
{
Log.Error($"【提示07】<空托任务>生成失败,目标站点[{targetLocation}]已经存在处于取货阶段的空托任务,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验---上位是否手动禁止生成
if (LineTaskForPermission(targetLocation) == 0) return false;
if (LineTaskForPermission(targetLocation) == 0)
{
Log.Error($"【提示08】<空托任务>生成失败,目标站点[{targetLocation}]已经被手动禁止生成任务,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
return true;
@@ -76,29 +115,57 @@ namespace WPFWCSDemo.Schedules.CircleRGV
//1003-1009输送口校验
if (sourceLocation == RGVStation.LineM_Goods_In)
{
if (QueryForIsRequestReset(RGVStation.LineToWarehouse1_Out, 3)) return false;
if (QueryForIsRequestReset(RGVStation.LineToWarehouse1_Out, 3))
{
Log.Error($"【提示01】<实垛任务>生成失败,源站点[{sourceLocation}]请求未复位,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
}
//2025.9新增
//1005-1010输送口校验
if (sourceLocation == RGVStation.LineL_Goods_In)
{
if (QueryForIsRequestReset(RGVStation.LineToWarehouse2_Out, 3)) return false;
if (QueryForIsRequestReset(RGVStation.LineToWarehouse2_Out, 3))
{
Log.Error($"【提示02】<实垛任务>生成失败,源站点[{sourceLocation}]请求未复位,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
}
//校验1.输送口无请求
if (QueryForIsRequestReset(sourceLocation, 3)) return false;
if (QueryForIsRequestReset(sourceLocation, 3))
{
Log.Error($"【提示03】<实垛任务>生成失败,源站点[{sourceLocation}]请求未复位,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验2.输送口系统异常
if (!isNotException) return false;
if (!isNotException)
{
Log.Error($"【提示04】<实垛任务>生成失败,源站点[{sourceLocation}]输送线系统异常,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验3.同输送口相邻任务生成时间间隔过短
if (!CheckSendTaskTimeInterval(sourceLocation)) return false;
if (!CheckSendTaskTimeInterval(sourceLocation))
{
Log.Error($"【提示05】<实垛任务>生成失败,源站点[{sourceLocation}]相邻任务生成时间间隔过短,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验4.当前输送线存在取货阶段的任务
if (!GetRGVTaskForGoodsIsExist(sourceLocation)) return false;
if (!GetRGVTaskForGoodsIsExist(sourceLocation))
{
Log.Error($"【提示06】<实垛任务>生成失败,源站点[{sourceLocation}]已经存在处于取货阶段的实垛任务,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
//校验5.当前同一【源站点】是否已经生成【取货阶段】任务
if (!CheckSendTaskIsRepeat(sourceLocation, TaskType.Goods)) return false;
if (!CheckSendTaskIsRepeat(sourceLocation, TaskType.Goods))
{
Log.Error($"【提示07】<实垛任务>生成失败,源站点[{sourceLocation}]已经存在处于取货阶段的实垛任务,禁止生成任务(消息仅作记录,可忽略)");
return false;
}
return true;
@@ -115,7 +182,7 @@ namespace WPFWCSDemo.Schedules.CircleRGV
/// <returns> true-相差大于x秒 false-相差小于x秒</returns>
public static bool CheckSendTaskTimeInterval(int location)
{
int diff = -15;
int diff = -40;
using var context = new AppDbContext();
@@ -134,6 +201,7 @@ namespace WPFWCSDemo.Schedules.CircleRGV
}
}
/// <summary>
/// 防错机制【用于避免请求延迟的重复下发】--- 检测上一条【空托】任务放货时间(完成时间)与当前时间是否相差x秒以上
/// </summary>
@@ -141,7 +209,7 @@ namespace WPFWCSDemo.Schedules.CircleRGV
/// <returns> true-相差大于x秒 false-相差小于x秒</returns>
public static bool CheckSendTaskTimeInterval(int location, int num)
{
int diff = -30;
int diff = -num;
using var context = new AppDbContext();
@@ -160,8 +228,9 @@ namespace WPFWCSDemo.Schedules.CircleRGV
}
}
/// <summary>
/// 防错机制【重复下发】--- 检测已经生成但未下发的任务是否存在
/// 防错机制【重复下发】--- 检测是否有已经生成但未取货的实垛任务
/// </summary>
/// <param name="sourceLocation">源站点</param>
/// <returns> true-同目标站点生成任务时间间隔合法 false-时间间隔过短</returns>
@@ -175,10 +244,10 @@ namespace WPFWCSDemo.Schedules.CircleRGV
//生成的上一条【实垛】任务且同一个源站点 ---> 查找符合条件的记录
var count = context
.Set<TaskRT>()
.Where(t => t.SourceLocation == location.ToString() && (t.ScheduleState==ScheduleStateCode.Trans_CircleRGV_Ready || t.ScheduleState == ScheduleStateCode.Trans_CircleRGV_Picking))
.Where(t => t.SourceLocation == location.ToString() && (t.ScheduleState==ScheduleStateCode.Trans_CircleRGV_Ready || t.ScheduleState == ScheduleStateCode.Trans_CircleRGV_PickOnTheWay || t.ScheduleState == ScheduleStateCode.Trans_CircleRGV_Picking))
.Count();
if (count < 1)
if (count == 0)
{
return true;
}
@@ -193,7 +262,7 @@ namespace WPFWCSDemo.Schedules.CircleRGV
.Where(t => t.TargetLocation == location.ToString())
.Count();
if (count1 < 1)
if (count1 == 0)
{
return true;
}
@@ -205,10 +274,11 @@ namespace WPFWCSDemo.Schedules.CircleRGV
static int sum;
/// <summary>
/// 计算某个输送口请求的值的和---用于确定该输送口在一定时间内请求是否已经复位
/// 用于避免信号也许存在的不稳定(跳变)的情况
/// 用于避免信号可能的不稳定(跳变)的情况
/// </summary>
/// <param name="Location">源站点/目标站点---表示对应列</param>
/// <param name="count">计算的时间间隔(单位:秒)</param>
@@ -281,7 +351,7 @@ namespace WPFWCSDemo.Schedules.CircleRGV
return false;
}
int sum = 0;
sum = 0;
//计算源站点对应某列3行请求(允许)值的和
for (int i = 0; i < dt.Rows.Count; i++)
@@ -387,12 +457,11 @@ namespace WPFWCSDemo.Schedules.CircleRGV
if (states is null) return false;
//检查是否有符合条件的小车,如果有则标
//检查是否有符合条件的小车
//【源站点】匹配
// 任务处于【取货阶段】
// 无【允许下发】---表示小车在工作中
var count = states
.Where(a => a.Read_SourceLocation == (sourceLocation - 1000).ToString() && a.Read_Phase < 3 && a.Read_Phase > 0 && !a.Read_Permission)
.Where(a => a.Read_SourceLocation == (sourceLocation - 1000).ToString() && a.Read_Phase < 3 && a.Read_Phase > 0)
.Count();
if (count > 0)
@@ -411,7 +480,7 @@ namespace WPFWCSDemo.Schedules.CircleRGV
/// 检查是否存在已经生成的处于【取货阶段】的【栈板】任务 --- 源站点每次请求仅生成一条任务
/// </summary>
/// <returns>true-无符合条件的任务(即可生成新任务) false-存在符合条件的任务</returns>
public static bool IsPalletConvHasGettingTask()
public static bool IsPalletLineHasTask()
{
var context = new AppDbContext();

View File

@@ -174,6 +174,20 @@ namespace WPFWCSDemo.Schedules.CircleRGV
CreateTime = DateTime.Now,
};
var count = context.Tasks
.Where(t => t.SourceLocation == sourceLocation.ToString() &&
(t.ScheduleState == ScheduleStateCode.Trans_CircleRGV_Ready ||
t.ScheduleState == ScheduleStateCode.Trans_CircleRGV_Picking ||
t.ScheduleState == ScheduleStateCode.Trans_CircleRGV_PickOnTheWay))
.Count();
if (count > 0)
{
Log.Error($"【提示】重复任务拦截,任务号:{taskNumber},取货站点:{sourceLocation}(消息仅作记录,可忽略)");
return;
}
context.Tasks.Add(taskRT);
if (sourceLocation == RGVStation.LineGH_Pallets_In)

View File

@@ -74,109 +74,120 @@ namespace WPFWCSDemo.Schedules.CircleRGV
if (taskRT is null) continue;
//有【允许下发】
//if (circleRGVState.Read_Permission) continue;
//无【允许下发】---表示小车有执行中的任务
switch (circleRGVState.Read_Phase)
try
{
case 1:
if (taskRT.ScheduleState == ScheduleStateCode.Trans_CircleRGV_Ready && !circleRGVState.Read_Permission)
{
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_PickOnTheWay;
//有【允许下发】
//if (circleRGVState.Read_Permission) continue;
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->取货途中");
}
continue;
case 2:
if (taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_Picking && !circleRGVState.Read_Permission)
{
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_Picking;
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->取货中");
//更新取货时间
if (taskRT.TaskType == TaskType.Goods)
//无【允许下发】---表示小车有执行中的任务
switch (circleRGVState.Read_Phase)
{
case 1:
if (taskRT.ScheduleState == ScheduleStateCode.Trans_CircleRGV_Ready && !circleRGVState.Read_Permission)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.SourceLocation);
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_PickOnTheWay;
loadedState!.LoadingTime = DateTime.Now;
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->取货途中");
}
if (taskRT.TaskType == TaskType.Pallet)
continue;
case 2:
if (taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_Picking && !circleRGVState.Read_Permission)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.TargetLocation);
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_Picking;
loadedState!.LoadingTime = DateTime.Now;
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->取货中");
//更新取货时间
if (taskRT.TaskType == TaskType.Goods)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.SourceLocation);
loadedState!.LoadingTime = DateTime.Now;
}
if (taskRT.TaskType == TaskType.Pallet)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.TargetLocation);
loadedState!.LoadingTime = DateTime.Now;
}
context.SaveChanges();
}
context.SaveChanges();
}
continue;
case 3:
if (taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_PutOnTheWay && !circleRGVState.Read_Permission)
{
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_PutOnTheWay;
taskRT.JobId = i.ToString();
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->放货途中");
//更新取货时间
if (taskRT.TaskType == TaskType.Goods)
continue;
case 3:
if (taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_PutOnTheWay && !circleRGVState.Read_Permission)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.SourceLocation);
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_PutOnTheWay;
taskRT.JobId = i.ToString();
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->放货途中");
//更新取货时间
if (taskRT.TaskType == TaskType.Goods)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.SourceLocation);
loadedState!.LoadedTime = DateTime.Now;
}
if (taskRT.TaskType == TaskType.Pallet)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.TargetLocation);
loadedState!.LoadedTime = DateTime.Now;
}
context.SaveChanges();
loadedState!.LoadedTime = DateTime.Now;
}
if (taskRT.TaskType == TaskType.Pallet)
continue;
case 4:
if (taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_Putting && !circleRGVState.Read_Permission)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.TargetLocation);
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_Putting;
loadedState!.LoadedTime = DateTime.Now;
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->放货中");
//更新取货时间
if (taskRT.TaskType == TaskType.Goods)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.SourceLocation);
loadedState!.PuttingTime = DateTime.Now;
}
if (taskRT.TaskType == TaskType.Pallet)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.TargetLocation);
loadedState!.PuttingTime = DateTime.Now;
}
context.SaveChanges();
}
context.SaveChanges();
}
continue;
case 4:
if (taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_Putting && !circleRGVState.Read_Permission)
{
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_Putting;
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->放货中");
//更新取货时间
if (taskRT.TaskType == TaskType.Goods)
continue;
case 5:
if (taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_Ready &&
taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_PickOnTheWay &&
taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_Picking &&
!circleRGVState.Read_Permission)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.SourceLocation);
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_Finish;
loadedState!.PuttingTime = DateTime.Now;
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->放货完成");
}
if (taskRT.TaskType == TaskType.Pallet)
{
var loadedState = context.LoadedState
.FirstOrDefault(s => s.Station.ToString() == taskRT.TargetLocation);
loadedState!.PuttingTime = DateTime.Now;
}
context.SaveChanges();
}
continue;
case 5:
if (taskRT.ScheduleState != ScheduleStateCode.Trans_CircleRGV_Ready)
{
taskRT.ScheduleState = ScheduleStateCode.Trans_CircleRGV_Finish;
if (context.SaveChanges() == 1) Log.Information($"【WCS更新调度状态】任务号:{circleRGVState.Read_TaskNumber}--->放货完成");
}
continue;
continue;
}
}
catch (Exception ex)
{
Log.Error("【更新任务阶段】执行异常," + ex.Message);
}

View File

@@ -690,11 +690,8 @@ namespace WPFWCSDemo.ViewModels
$"检验码:{Checksum.GetChecksum(circleRGVStationCommand)},尝试下发任务!"
);
//todo @@@可能需要判断设备是否已经开始执行
//todo @@@可能需要判断设备是否已经开始执行
//todo @@@可能需要判断设备是否已经开始执行
Task.Delay(100).Wait();
Task.Delay(200).Wait();
//【下发完成】写入操作成功
if (result.IsSuccess)
@@ -721,8 +718,6 @@ namespace WPFWCSDemo.ViewModels
}
else
{
//需要详细了解可能【接收异常】的情况
//需要详细了解可能【接收异常】的情况
//需要详细了解可能【接收异常】的情况
Log.Warning($"【WCS写入信息至地面站<接收异常>】任务号:{circleRGVStationCommand.Write_TaskNumber},PLC反馈【接收异常】!");
Log.Warning($"【WCS写入信息至地面站<接收异常>】任务号:{circleRGVStationCommand.Write_TaskNumber},校验码写入:{Checksum.GetChecksum(circleRGVStationCommand)},读取:{stationConnection.ReadInt16("DB60.904").Content},PLC反馈【接收异常】!");

View File

@@ -1,5 +1,6 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Identity.Client.NativeInterop;
using Serilog;
using System;
using System.Collections.Generic;
@@ -11,6 +12,7 @@ using System.Runtime.Serialization;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using WPFWCSDemo.Data;
using WPFWCSDemo.Models.Tables;
using WPFWCSDemo.StateCode;
using WPFWCSDemo.Utilities;
@@ -129,12 +131,15 @@ namespace WPFWCSDemo.ViewModels
TaskHistory.Clear();
//DataTable? dtCount = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY ORDER BY CREATETIME DESC");
DataTable? dtCount = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY_VIEW ORDER BY 结束时间 DESC");
//using var context = new AppDbContext();
DataTable? dtCount = SqlHelper.ExecuteTable("SELECT TOP 30000 * FROM TASK_HISTORY_VIEW ORDER BY 结束时间 DESC");
//DataTable? dt = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY ORDER BY CREATETIME DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY",
DataTable? dt = SqlHelper.ExecuteTable("SELECT * FROM TASK_HISTORY_VIEW ORDER BY 结束时间 DESC OFFSET @Rows ROW FETCH NEXT 10 ROW ONLY",
new SqlParameter("@Rows",page - 1));
var datas = dt.Rows;
@@ -285,7 +290,7 @@ namespace WPFWCSDemo.ViewModels
{
dtCount = SqlHelper.ExecuteTable(
//$"SELECT * FROM TASK_HISTORY WHERE @ColumnName like @Keywords AND FINISHTIME>=@StartTime AND FINISHTIME<@FinishTime ORDER BY CREATETIME DESC",
$"SELECT * FROM TASK_HISTORY_VIEW WHERE {ColumnName} LIKE @Keywords AND 结束时间>=@StartTime AND 结束时间<@FinishTime ORDER BY 结束时间 DESC",
$"SELECT TOP 30000 * FROM TASK_HISTORY_VIEW WHERE {ColumnName} LIKE @Keywords AND 结束时间>=@StartTime AND 结束时间<@FinishTime ORDER BY 结束时间 DESC",
//new SqlParameter("@ColumnName", ColumnName),
new SqlParameter("@Keywords", $"%{Keywords.Trim()}%"),
new SqlParameter("@StartTime", dateTimeStart),
@@ -306,7 +311,7 @@ namespace WPFWCSDemo.ViewModels
{
dtCount = SqlHelper.ExecuteTable(
//$"SELECT * FROM TASK_HISTORY WHERE FINISHTIME>=@StartTime AND FINISHTIME<@FinishTime ORDER BY CREATETIME DESC",
$"SELECT * FROM TASK_HISTORY_VIEW WHERE 结束时间>=@StartTime AND 结束时间<@FinishTime ORDER BY 结束时间 DESC",
$"SELECT TOP 30000 * FROM TASK_HISTORY_VIEW WHERE 结束时间>=@StartTime AND 结束时间<@FinishTime ORDER BY 结束时间 DESC",
new SqlParameter("@StartTime", dateTimeStart),
new SqlParameter("@FinishTime", dateTimeEnd)
);
@@ -505,10 +510,10 @@ namespace WPFWCSDemo.ViewModels
void UpdatePageInfo(DataTable dt, int pageCurrent)
{
//总数据条数
DataCountNumber = dt.Rows.Count;
DataCountNumber = 30000;
//文本显示
DataCount = $"共 {DataCountNumber} 条";
DataCount = $"只显示最近5万条数据";
//总页数
if (DataCountNumber % countPerPage == 0)
@@ -527,10 +532,10 @@ namespace WPFWCSDemo.ViewModels
void UpdatePageInfo(DataTable dt, string pageCurrent)
{
//总数据条数
DataCountNumber = dt.Rows.Count;
DataCountNumber = 30000;
//文本显示
DataCount = $"共 {DataCountNumber} 条";
DataCount = $"只显示最近5万条数据";
//总页数
if (DataCountNumber % countPerPage == 0)