Product_Wms/WcsMain/DataBase/Dao/AppWmsTaskDao.cs
2024-11-25 10:46:38 +08:00

503 lines
19 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}
public List<AppWmsTask>? SelectRunningTask(string? destination)
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
.Where(w => (w.MidPoint!.Contains(destination!) || w.Destination!.Contains(destination!))
&& (w.TaskStatus == (int)WmsTaskStatusEnum.toMid || w.TaskStatus == (int)WmsTaskStatusEnum.arriveMid))
.OrderBy(o => o.CreateTime);
_ = sqlFuc.ToSql();
return sqlFuc.ToList();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
public List<AppWmsTask>? SelectRunningTask2(string? location)
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable<AppWmsTask>()
.Where(w => location!.Contains(w.MidPoint!)
&& (w.TaskStatus == (int)WmsTaskStatusEnum.toMid || w.TaskStatus == (int)WmsTaskStatusEnum.arriveMid))
.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;
}
}