466 lines
18 KiB
C#
466 lines
18 KiB
C#
using WcsMain.ApiServe.Dto.WcsDto.WmsTask;
|
||
using WcsMain.Common;
|
||
using WcsMain.Constant.Enum.Stacker;
|
||
using WcsMain.DataBase.TableEntity;
|
||
using WcsMain.Constant.WcsAttribute.AutoFacAttribute;
|
||
|
||
namespace WcsMain.DataBase.Dao;
|
||
|
||
/// <summary>
|
||
/// tbl_app_wms_task 表的增删改查
|
||
/// </summary>
|
||
[Component]
|
||
public class AppWmsTaskDao
|
||
{
|
||
/// <summary>
|
||
/// 添加记录
|
||
/// 注意:尚未清楚是否为事务插入
|
||
/// </summary>
|
||
/// <param name="appWmsTasks"></param>
|
||
/// <returns></returns>
|
||
public int Insert(params AppWmsTask[] appWmsTasks)
|
||
{
|
||
try
|
||
{
|
||
return CommonTool.DbServe.Insertable(appWmsTasks).ExecuteCommand();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 更新数据,以主键为条件,主键 : TaskId
|
||
/// </summary>
|
||
/// <param name="appWmsTask"></param>
|
||
/// <returns></returns>
|
||
public int Update(AppWmsTask appWmsTask)
|
||
{
|
||
try
|
||
{
|
||
var sqlFuc = CommonTool.DbServe.Updateable(appWmsTask).IgnoreColumns(ignoreAllNullColumns: true);
|
||
return sqlFuc.ExecuteCommand();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 删除数据,以主键为条件
|
||
/// </summary>
|
||
/// <param name="appWmsTask"></param>
|
||
/// <returns></returns>
|
||
public int Delete(AppWmsTask appWmsTask)
|
||
{
|
||
try
|
||
{
|
||
var sqlFuc = CommonTool.DbServe.Deleteable(appWmsTask);
|
||
return sqlFuc.ExecuteCommand();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return 0;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 查找数据
|
||
/// </summary>
|
||
/// <param name="appWmsTask"></param>
|
||
/// <returns></returns>
|
||
/// <remarks>
|
||
/// 时间不在筛选行列
|
||
/// </remarks>
|
||
public List<AppWmsTask>? Select(AppWmsTask appWmsTask)
|
||
{
|
||
try
|
||
{
|
||
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
|
||
.WhereIF(!string.IsNullOrEmpty(appWmsTask.TaskId), w => w.TaskId == appWmsTask.TaskId)
|
||
.WhereIF(appWmsTask.WcsId != null, w => w.WcsId == appWmsTask.WcsId)
|
||
.WhereIF(appWmsTask.TaskType != null, w => w.TaskType == appWmsTask.TaskType)
|
||
.WhereIF(appWmsTask.TaskStatus != null, w => w.TaskStatus == appWmsTask.TaskStatus)
|
||
.WhereIF(!string.IsNullOrEmpty(appWmsTask.Origin), w => w.Origin == appWmsTask.Origin)
|
||
.WhereIF(!string.IsNullOrEmpty(appWmsTask.MidPoint), w => w.MidPoint == appWmsTask.MidPoint)
|
||
.WhereIF(!string.IsNullOrEmpty(appWmsTask.Destination),
|
||
w => w.Destination == appWmsTask.Destination)
|
||
.WhereIF(!string.IsNullOrEmpty(appWmsTask.VehicleNo), w => w.VehicleNo == appWmsTask.VehicleNo)
|
||
.WhereIF(appWmsTask.VehicleSize != null, w => w.VehicleSize == appWmsTask.VehicleSize)
|
||
.WhereIF(appWmsTask.Weight != null, w => w.Weight == appWmsTask.Weight)
|
||
.WhereIF(!string.IsNullOrEmpty(appWmsTask.CreatePerson),
|
||
w => w.CreatePerson == appWmsTask.CreatePerson)
|
||
.WhereIF(!string.IsNullOrEmpty(appWmsTask.TaskMsg), w => w.TaskMsg == appWmsTask.TaskMsg)
|
||
.OrderBy(o => o.CreateTime);
|
||
|
||
_ = sqlFuc.ToSql();
|
||
return sqlFuc.ToList();
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return default;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 查找所有数据
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public List<AppWmsTask>? Select() => Select(new AppWmsTask());
|
||
|
||
|
||
|
||
|
||
/********************************************************* 扩展方法 *****************************************************************/
|
||
|
||
/// <summary>
|
||
/// 保留多少条数据
|
||
/// </summary>
|
||
/// <param name="days"></param>
|
||
/// <returns></returns>
|
||
public int ClearData(int days)
|
||
{
|
||
try
|
||
{
|
||
var sqlFuc = CommonTool.DbServe.Deleteable<AppWmsTask>().Where(w => w.CreateTime < DateTime.Now.AddDays(-days));
|
||
return sqlFuc.ExecuteCommand();
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return default;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 将taskId更新成新的
|
||
/// </summary>
|
||
/// <param name="oldTaskId"></param>
|
||
/// <param name="newTaskId"></param>
|
||
/// <returns></returns>
|
||
public int UpdateTaskId(string? oldTaskId, string? newTaskId)
|
||
{
|
||
return 0;
|
||
|
||
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 查询数据返回前端
|
||
/// 查询数据,按创建时间倒序排列
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public List<AppWmsTask>? SelectToWeb()
|
||
{
|
||
try
|
||
{
|
||
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>().OrderByDescending(o => o.CreateTime);
|
||
return sqlFuc.ToList();
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return default;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 查询任务数据返回前端,只查询未结束的任务
|
||
/// 查询数据,按创建时间倒序排列
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public List<AppWmsTask>? SelectWmsTaskNotEnd()
|
||
{
|
||
try
|
||
{
|
||
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>().Where(w => w.TaskStatus == (int)WmsTaskStatusEnum.queuing
|
||
|| w.TaskStatus == (int)WmsTaskStatusEnum.create
|
||
|| w.TaskStatus == (int)WmsTaskStatusEnum.running).OrderByDescending(o => o.CreateTime);
|
||
return sqlFuc.ToList();
|
||
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return default;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 查询自起点索引后的多少条数据
|
||
/// </summary>
|
||
/// <param name="pageRequest"></param>
|
||
/// <returns></returns>
|
||
public (List<AppWmsTask>? wmsTasks, int totalRows) SelectPage(GetWmsTaskWithPageRequest pageRequest)
|
||
{
|
||
try
|
||
{
|
||
int totalRows = 0;
|
||
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
|
||
.WhereIF(!string.IsNullOrEmpty(pageRequest.SearchStr),
|
||
w => w.Destination!.Contains(pageRequest.SearchStr!)
|
||
|| w.WcsId!.Contains(pageRequest.SearchStr!)
|
||
|| w.Origin!.Contains(pageRequest.SearchStr!)
|
||
|| w.VehicleNo!.Contains(pageRequest.SearchStr!)
|
||
|| w.TaskId!.Contains(pageRequest.SearchStr!)
|
||
|| w.TaskMsg!.Contains(pageRequest.SearchStr!)); // 模糊查询
|
||
if (pageRequest.TaskType != default) // 查询任务类型
|
||
{
|
||
List<int?> taskTypes = [];
|
||
pageRequest.TaskType.ForEach(item => taskTypes.Add(item));
|
||
sqlFuc.Where(w => taskTypes.Contains(w.TaskType));
|
||
}
|
||
if (pageRequest.TaskStatus != default) // 查询任务状态
|
||
{
|
||
List<int?> taskStatuses = [];
|
||
pageRequest.TaskStatus.ForEach(item => taskStatuses.Add(item));
|
||
sqlFuc.Where(w => taskStatuses.Contains(w.TaskStatus));
|
||
}
|
||
if (pageRequest.TimeRange is { Count: 2 }) // 时间范围
|
||
{
|
||
sqlFuc.Where(w => w.CreateTime > pageRequest.TimeRange[0] && w.CreateTime < pageRequest.TimeRange[1]);
|
||
}
|
||
sqlFuc.OrderByDescending(o => new { o.CreateTime });
|
||
var queryResult = sqlFuc.ToPageList(pageRequest.Page!.PageIndex, pageRequest.Page!.PageSize, ref totalRows);
|
||
return (queryResult, totalRows);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return default;
|
||
}
|
||
}
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 查找未执行完成的任务
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public List<AppWmsTask>? SelectNotComplete()
|
||
{
|
||
try
|
||
{
|
||
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
|
||
.Where(w => w.TaskStatus != (int)WmsTaskStatusEnum.complete && w.TaskStatus != (int)WmsTaskStatusEnum.err)
|
||
.ToList();
|
||
return sqlFuc;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
_ = ex;
|
||
return default;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 重置任务状态
|
||
/// </summary>
|
||
/// <param name="taskId"></param>
|
||
/// <param name="newDestination"></param>
|
||
/// <param name="resetMsg">重置信息</param>
|
||
/// <returns></returns>
|
||
public string ResetTaskWithTaskId(string? taskId, string? newDestination, string resetMsg)
|
||
{
|
||
if (string.IsNullOrEmpty(taskId))
|
||
{
|
||
return "任务号为空";
|
||
}
|
||
/*
|
||
需要执行的操作
|
||
1、重置WMS任务表状态
|
||
2、删除WCS任务表数据
|
||
*/
|
||
var result = CommonTool.DbServe.Ado.UseTran(() =>
|
||
{
|
||
// -- 更新wms任务状态
|
||
if (string.IsNullOrEmpty(newDestination))
|
||
{
|
||
CommonTool.DbServe.Updateable(new AppWmsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.create })
|
||
.UpdateColumns(u => new { u.TaskStatus }).WhereColumns(w => new { w.TaskId })
|
||
.ExecuteCommand();
|
||
}
|
||
else
|
||
{
|
||
CommonTool.DbServe.Updateable(new AppWmsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.create, Destination = newDestination })
|
||
.UpdateColumns(u => new { u.TaskStatus, u.Destination }).WhereColumns(w => new { w.TaskId })
|
||
.ExecuteCommand();
|
||
}
|
||
// -- 更新wcs任务表状态
|
||
CommonTool.DbServe
|
||
.Updateable(new AppWcsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WcsTaskStatusEnum.err, Remark = $"{resetMsg}{(string.IsNullOrEmpty(newDestination) ? "" : "新的目的地为:")}{newDestination}" })
|
||
.UpdateColumns(u => new { u.TaskStatus, u.Remark }).WhereColumns(w => new { w.TaskId })
|
||
.ExecuteCommand();
|
||
// -- 备份wcs任务表
|
||
CommonTool.DbServe.Ado.ExecuteCommand(
|
||
$"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where task_id = '{taskId}'");
|
||
// -- 删除wcs任务表
|
||
CommonTool.DbServe.Deleteable<AppWcsTask>().Where(w => w.TaskId == taskId).ExecuteCommand();
|
||
});
|
||
return result.Data ? string.Empty : result.ErrorMessage;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 完成任务
|
||
/// </summary>
|
||
/// <param name="taskId"></param>
|
||
/// /// <param name="completeText"></param>
|
||
/// <returns></returns>
|
||
public string CompleteTaskWithTaskId(string? taskId, string completeText = "")
|
||
{
|
||
if (string.IsNullOrEmpty(taskId))
|
||
{
|
||
return "任务号为空";
|
||
}
|
||
/*
|
||
需要执行的操作
|
||
1、完成WMS任务表状态
|
||
2、删除WCS任务表数据
|
||
*/
|
||
var result = CommonTool.DbServe.Ado.UseTran(() =>
|
||
{
|
||
// -- 更新wms任务状态
|
||
CommonTool.DbServe
|
||
.Updateable(new AppWmsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.complete, EndTime = DateTime.Now, TaskMsg = completeText })
|
||
.IgnoreColumns(ignoreAllNullColumns: true)
|
||
.ExecuteCommand();
|
||
// -- 更新wcs任务表状态
|
||
CommonTool.DbServe
|
||
.Updateable(new AppWcsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WcsTaskStatusEnum.complete, Remark = completeText, CompleteTime = DateTime.Now })
|
||
.UpdateColumns(u => new { u.TaskStatus, u.Remark, u.CompleteTime }).WhereColumns(w => new { w.TaskId })
|
||
.ExecuteCommand();
|
||
// -- 备份WCS任务表
|
||
CommonTool.DbServe.Ado.ExecuteCommand(
|
||
$"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where task_id = '{taskId}'");
|
||
// -- 删除WCS任务表
|
||
CommonTool.DbServe.Deleteable<AppWcsTask>().Where(w => w.TaskId == taskId).ExecuteCommand();
|
||
});
|
||
return result.Data ? string.Empty : result.ErrorMessage;
|
||
}
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 删除任务
|
||
/// </summary>
|
||
/// <param name="taskId"></param>
|
||
/// <param name="deleteMsg">删除原因</param>
|
||
/// <returns></returns>
|
||
public string DeleteTaskWithTaskId(string? taskId, string deleteMsg)
|
||
{
|
||
if (string.IsNullOrEmpty(taskId)) return "任务号为空";
|
||
var result = CommonTool.DbServe.Ado.UseTran(() =>
|
||
{
|
||
// -- 更新wms表状态
|
||
CommonTool.DbServe.Updateable(new AppWmsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.err, EndTime = DateTime.Now, TaskMsg = deleteMsg })
|
||
.IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
|
||
// -- 更新wcs任务表状态
|
||
CommonTool.DbServe
|
||
.Updateable(new AppWcsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WcsTaskStatusEnum.err, Remark = deleteMsg })
|
||
.UpdateColumns(u => new { u.TaskStatus, u.Remark }).WhereColumns(w => new { w.TaskId })
|
||
.ExecuteCommand();
|
||
// -- 备份WCS任务表
|
||
CommonTool.DbServe.Ado.ExecuteCommand(
|
||
$"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where task_id = '{taskId}'");
|
||
// -- 删除WCS任务表
|
||
CommonTool.DbServe.Deleteable<AppWcsTask>().Where(w => w.TaskId == taskId).ExecuteCommand();
|
||
});
|
||
return result.Data ? string.Empty : result.ErrorMessage;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 取消任务
|
||
/// </summary>
|
||
/// <param name="taskId"></param>
|
||
/// /// <param name="cancelPerson"></param>
|
||
/// <returns></returns>
|
||
public string CancelTaskWithTaskId(string? taskId, string cancelPerson)
|
||
{
|
||
if (string.IsNullOrEmpty(taskId)) return "任务号为空";
|
||
var result = CommonTool.DbServe.Ado.UseTran(() =>
|
||
{
|
||
// -- 更新wms表状态
|
||
CommonTool.DbServe.Updateable(new AppWmsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WmsTaskStatusEnum.err, EndTime = DateTime.Now, TaskMsg = $"【{cancelPerson}】取消任务" })
|
||
.IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand();
|
||
// -- 更新wcs任务表状态
|
||
CommonTool.DbServe
|
||
.Updateable(new AppWcsTask()
|
||
{ TaskId = taskId, TaskStatus = (int)WcsTaskStatusEnum.err, Remark = $"【{cancelPerson}】取消任务", CompleteTime = DateTime.Now })
|
||
.UpdateColumns(u => new { u.TaskStatus, u.Remark, u.CompleteTime }).WhereColumns(w => new { w.TaskId })
|
||
.ExecuteCommand();
|
||
// -- 备份WCS任务表
|
||
CommonTool.DbServe.Ado.ExecuteCommand(
|
||
$"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where task_id = '{taskId}'");
|
||
// -- 删除WCS任务表
|
||
CommonTool.DbServe.Deleteable<AppWcsTask>().Where(w => w.TaskId == taskId).ExecuteCommand();
|
||
});
|
||
return result.Data ? string.Empty : result.ErrorMessage;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 添加记录
|
||
/// 注意:尚未清楚是否为事务插入
|
||
/// </summary>
|
||
/// <param name="appWmsTasks"></param>
|
||
/// <returns></returns>
|
||
public int InsertTaskAndMarkErr(params AppWmsTask[] appWmsTasks)
|
||
{
|
||
if (appWmsTasks.Length < 1) return 0;
|
||
try
|
||
{
|
||
int count = 0;
|
||
Action action = () => { };
|
||
foreach (var wmsTask in appWmsTasks)
|
||
{
|
||
action += () =>
|
||
{
|
||
// -- 更新wms表状态
|
||
CommonTool.DbServe.Updateable(new AppWmsTask()
|
||
{ TaskStatus = (int)WmsTaskStatusEnum.err, EndTime = DateTime.Now, TaskMsg = $"由于收到新任务,该任务被取消,操作人:{wmsTask.CreatePerson}" })
|
||
.UpdateColumns(u => new { u.TaskStatus, u.TaskMsg, u.EndTime })
|
||
.Where(w => w.VehicleNo == wmsTask.VehicleNo && (w.TaskStatus == (int)WmsTaskStatusEnum.queuing || w.TaskStatus == (int)WmsTaskStatusEnum.create))
|
||
.ExecuteCommand();
|
||
// -- 更新wcs任务表状态
|
||
CommonTool.DbServe.Updateable(new AppWcsTask()
|
||
{ TaskStatus = (int)WcsTaskStatusEnum.err, CompleteTime = DateTime.Now, Remark = $"由于收到新任务,该任务被取消,操作人:{wmsTask.CreatePerson}" })
|
||
.UpdateColumns(u => new { u.TaskStatus, u.Remark, u.CompleteTime })
|
||
.Where(w => w.VehicleNo == wmsTask.VehicleNo && w.TaskStatus == (int)WcsTaskStatusEnum.create)
|
||
.ExecuteCommand();
|
||
// -- 备份WCS任务表
|
||
CommonTool.DbServe.Ado.ExecuteCommand(
|
||
$"insert into tbl_app_wcs_task_bak select * from tbl_app_wcs_task where vehicle_no = '{wmsTask.VehicleNo}' and task_type = {wmsTask.TaskType}");
|
||
// -- 删除WCS任务表
|
||
CommonTool.DbServe.Deleteable<AppWcsTask>()
|
||
.Where(w => w.VehicleNo == wmsTask.VehicleNo && w.TaskType == wmsTask.TaskType).
|
||
ExecuteCommand();
|
||
// -- 插入WMS任务
|
||
CommonTool.DbServe.Insertable(wmsTask).ExecuteCommand();
|
||
};
|
||
count++;
|
||
}
|
||
var result = CommonTool.DbServe.Ado.UseTran(action);
|
||
if (result.IsSuccess) return count;
|
||
}
|
||
catch (Exception ex) { _ = ex; }
|
||
return 0;
|
||
}
|
||
} |