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;
///
/// tbl_app_wms_task 表的增删改查
///
[Component]
public class AppWmsTaskDao
{
///
/// 添加记录
/// 注意:尚未清楚是否为事务插入
///
///
///
public int Insert(params AppWmsTask[] appWmsTasks)
{
try
{
return CommonTool.DbServe.Insertable(appWmsTasks).ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
///
/// 更新数据,以主键为条件,主键 : TaskId
///
///
///
public int Update(AppWmsTask appWmsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Updateable(appWmsTask).IgnoreColumns(ignoreAllNullColumns: true);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
///
/// 删除数据,以主键为条件
///
///
///
public int Delete(AppWmsTask appWmsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Deleteable(appWmsTask);
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return 0;
}
}
///
/// 查找数据
///
///
///
///
/// 时间不在筛选行列
///
public List? Select(AppWmsTask appWmsTask)
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable()
.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.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? Select() => Select(new AppWmsTask());
/********************************************************* 扩展方法 *****************************************************************/
///
/// 保留多少条数据
///
///
///
public int ClearData(int days)
{
try
{
var sqlFuc = CommonTool.DbServe.Deleteable().Where(w => w.CreateTime < DateTime.Now.AddDays(-days));
return sqlFuc.ExecuteCommand();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 将taskId更新成新的
///
///
///
///
public int UpdateTaskId(string? oldTaskId, string? newTaskId)
{
return 0;
}
///
/// 查询数据返回前端
/// 查询数据,按创建时间倒序排列
///
///
public List? SelectToWeb()
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable().OrderByDescending(o => o.CreateTime);
return sqlFuc.ToList();
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 查询任务数据返回前端,只查询未结束的任务
/// 查询数据,按创建时间倒序排列
///
///
public List? SelectWmsTaskNotEnd()
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable().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;
}
}
///
/// 查询自起点索引后的多少条数据
///
///
///
public (List? wmsTasks, int totalRows) SelectPage(GetWmsTaskWithPageRequest pageRequest)
{
try
{
int totalRows = 0;
var sqlFuc = CommonTool.DbServe.Queryable()
.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 taskTypes = [];
pageRequest.TaskType.ForEach(item => taskTypes.Add(item));
sqlFuc.Where(w => taskTypes.Contains(w.TaskType));
}
if (pageRequest.TaskStatus != default) // 查询任务状态
{
List 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;
}
}
///
/// 查找未执行完成的任务
///
///
public List? SelectNotComplete()
{
try
{
var sqlFuc = CommonTool.DbServe.Queryable()
.Where(w => w.TaskStatus != (int)WmsTaskStatusEnum.complete && w.TaskStatus != (int)WmsTaskStatusEnum.err)
.ToList();
return sqlFuc;
}
catch (Exception ex)
{
_ = ex;
return default;
}
}
///
/// 重置任务状态
///
///
///
/// 重置信息
///
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().Where(w => w.TaskId == taskId).ExecuteCommand();
});
return result.Data ? string.Empty : result.ErrorMessage;
}
///
/// 完成任务
///
///
/// ///
///
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().Where(w => w.TaskId == taskId).ExecuteCommand();
});
return result.Data ? string.Empty : result.ErrorMessage;
}
///
/// 删除任务
///
///
/// 删除原因
///
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().Where(w => w.TaskId == taskId).ExecuteCommand();
});
return result.Data ? string.Empty : result.ErrorMessage;
}
///
/// 取消任务
///
///
/// ///
///
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().Where(w => w.TaskId == taskId).ExecuteCommand();
});
return result.Data ? string.Empty : result.ErrorMessage;
}
///
/// 添加记录
/// 注意:尚未清楚是否为事务插入
///
///
///
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()
.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;
}
}