2024-10-07 09:51:55 +08:00
using System.Text ;
2024-11-15 11:37:55 +08:00
using WcsMain.ApiServe.Dto.WcsDto.WcsTask ;
2024-10-07 09:51:55 +08:00
using WcsMain.Common ;
2024-11-15 11:37:55 +08:00
using WcsMain.Common.DataService ;
using WcsMain.Constant.Enum.Stacker ;
using WcsMain.Constant.Enum.TaskEnum ;
2024-10-07 09:51:55 +08:00
using WcsMain.DataBase.TableEntity ;
2024-11-15 11:37:55 +08:00
using WcsMain.Constant.WcsAttribute.AutoFacAttribute ;
2024-10-07 09:51:55 +08:00
namespace WcsMain.DataBase.Dao ;
/// <summary>
/// tbl_app_wcs_task 表操作类
/// </summary>
[Component]
public class AppWcsTaskDao
{
/// <summary>
/// 新增一条记录
/// </summary>
/// <param name="appWcsTask"></param>
/// <returns></returns>
public int Insert ( params AppWcsTask [ ] appWcsTask )
{
try
{
return CommonTool . DbServe . Insertable ( appWcsTask ) . ExecuteCommand ( ) ;
}
catch ( Exception ex )
{
_ = ex ;
return 0 ;
}
}
/// <summary>
/// 更新一条记录, 根据主键, 主键PlcId
/// </summary>
/// <param name="appWcsTask"></param>
/// <returns></returns>
public int Update ( AppWcsTask appWcsTask )
{
try
{
var sqlFuc = CommonTool . DbServe . Updateable ( appWcsTask ) . IgnoreColumns ( ignoreAllNullColumns : true ) ;
return sqlFuc . ExecuteCommand ( ) ;
}
catch ( Exception ex )
{
_ = ex ;
return 0 ;
}
}
/// <summary>
/// 删除一条记录, 根据主键, 主键PlcId
/// </summary>
/// <param name="appWcsTask"></param>
/// <returns></returns>
public int Delete ( AppWcsTask appWcsTask )
{
try
{
var sqlFuc = CommonTool . DbServe . Deleteable ( appWcsTask ) ;
return sqlFuc . ExecuteCommand ( ) ;
}
catch ( Exception ex )
{
_ = ex ;
return 0 ;
}
}
/// <summary>
/// 查找数据
/// </summary>
/// <param name="appWcsTask"></param>
/// <returns></returns>
/// <remarks>
/// 时间不在筛选行列
/// </remarks>
public List < AppWcsTask > ? Select ( AppWcsTask appWcsTask )
{
try
{
var sqlFuc = CommonTool . DbServe . Queryable < AppWcsTask > ( )
. WhereIF ( appWcsTask . PlcId ! = default , w = > w . PlcId = = appWcsTask . PlcId )
. WhereIF ( appWcsTask . NextPlcId ! = default , w = > w . NextPlcId = = appWcsTask . NextPlcId )
. WhereIF ( appWcsTask . TaskCategory ! = default , w = > w . TaskCategory = = appWcsTask . TaskCategory )
. WhereIF ( appWcsTask . TaskId ! = default , w = > w . TaskId = = appWcsTask . TaskId )
. WhereIF ( appWcsTask . TaskType ! = default , w = > w . TaskType = = appWcsTask . TaskType )
. WhereIF ( appWcsTask . TaskSort ! = default , w = > w . TaskSort = = appWcsTask . TaskSort )
. WhereIF ( appWcsTask . TaskStatus ! = default , w = > w . TaskStatus = = appWcsTask . TaskStatus )
. WhereIF ( appWcsTask . Origin ! = default , w = > w . Origin = = appWcsTask . Origin )
. WhereIF ( appWcsTask . Destination ! = default , w = > w . Destination = = appWcsTask . Destination )
. WhereIF ( appWcsTask . PlcVehicleNo ! = default , w = > w . PlcVehicleNo = = appWcsTask . PlcVehicleNo )
. WhereIF ( appWcsTask . VehicleNo ! = default , w = > w . VehicleNo = = appWcsTask . VehicleNo )
. WhereIF ( appWcsTask . VehicleSize ! = default , w = > w . VehicleSize = = appWcsTask . VehicleSize )
. WhereIF ( appWcsTask . Weight ! = default , w = > w . Weight = = appWcsTask . Weight )
. OrderByDescending ( o = > o . CreateTime ) . OrderBy ( o = > o . TaskSort ) ;
return sqlFuc . ToList ( ) ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 查找所有数据
/// </summary>
/// <returns></returns>
public List < AppWcsTask > ? Select ( ) = > Select ( new AppWcsTask ( ) ) ;
/// <summary>
/// 根据 TaskId 删除任务
/// </summary>
/// <param name="taskId"></param>
/// <returns></returns>
public int DeleteWithTaskId ( string taskId )
{
try
{
var sqlFuc = CommonTool . DbServe . Deleteable < AppWcsTask > ( ) . Where ( w = > w . TaskId = = taskId ) ;
return sqlFuc . ExecuteCommand ( ) ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 带参数分页查询
/// </summary>
/// <param name="pageRequest"></param>
/// <returns></returns>
public ( List < AppWcsTask > ? wcsTasks , int totalRows ) SelectPage ( GetWcsTaskWithPageRequest pageRequest )
{
try
{
int totalRows = 0 ;
var sqlFuc = CommonTool . DbServe . Queryable < AppWcsTask > ( )
. WhereIF ( ! string . IsNullOrEmpty ( pageRequest . SearchStr ) ,
w = > w . Destination ! . Contains ( pageRequest . SearchStr ! )
| | w . PlcId . ToString ( ) ! . Contains ( pageRequest . SearchStr ! )
| | w . Origin ! . Contains ( pageRequest . SearchStr ! )
| | w . VehicleNo ! . Contains ( pageRequest . SearchStr ! )
| | w . TaskId ! . Contains ( pageRequest . SearchStr ! )
| | w . Remark ! . Contains ( pageRequest . SearchStr ! ) ) ; // 模糊查询
if ( pageRequest . TaskType ! = default ) // 查询任务类型
{
List < int? > taskTypes = [ ] ;
foreach ( var taskType in pageRequest . TaskType )
{
if ( taskType = = "入库任务" ) { taskTypes . Add ( ( int ) TaskTypeEnum . inTask ) ; }
if ( taskType = = "出库任务" ) { taskTypes . Add ( ( int ) TaskTypeEnum . outTask ) ; }
if ( taskType = = "拣选任务" ) { taskTypes . Add ( ( int ) TaskTypeEnum . pick ) ; }
if ( taskType = = "盘点任务" ) { taskTypes . Add ( ( int ) TaskTypeEnum . check ) ; }
if ( taskType = = "移库任务" ) { taskTypes . Add ( ( int ) TaskTypeEnum . moveTask ) ; }
}
sqlFuc . Where ( w = > taskTypes . Contains ( w . TaskType ) ) ;
}
if ( pageRequest . TaskStatus ! = default ) // 查询任务状态
{
List < int? > taskStatuss = [ ] ;
foreach ( var taskStatus in pageRequest . TaskStatus )
{
if ( taskStatus = = "待执行" ) { taskStatuss . Add ( ( int ) WcsTaskStatusEnum . create ) ; }
if ( taskStatus = = "离开起点" ) { taskStatuss . Add ( ( int ) WcsTaskStatusEnum . leaveOrigin ) ; }
if ( taskStatus = = "执行中" ) { taskStatuss . Add ( ( int ) WcsTaskStatusEnum . running ) ; }
if ( taskStatus = = "到达终点" ) { taskStatuss . Add ( ( int ) WcsTaskStatusEnum . arriveDestination ) ; }
if ( taskStatus = = "执行完成" ) { taskStatuss . Add ( ( int ) WcsTaskStatusEnum . complete ) ; }
if ( taskStatus = = "执行异常" ) { taskStatuss . Add ( ( int ) WcsTaskStatusEnum . err ) ; }
}
sqlFuc . Where ( w = > taskStatuss . 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>
/// <param name="days"></param>
/// <returns></returns>
public int ClearData ( int days )
{
try
{
var sqlFuc = CommonTool . DbServe . Deleteable < AppWcsTask > ( ) . AS ( "[tbl_app_wcs_task_bak]" ) . Where ( w = > w . CreateTime < DateTime . Now . AddDays ( - days ) ) ;
return sqlFuc . ExecuteCommand ( ) ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 转换WMS任务到WCS任务
/// </summary>
/// <param name="wcsTasks"></param>
/// <returns></returns>
public string TransWmsTaskToWcsTask ( params AppWcsTask [ ] ? wcsTasks )
{
if ( wcsTasks = = default | | wcsTasks . Length < 1 )
{
return "传入的任务为空" ;
}
var result = CommonTool . DbServe . Ado . UseTran ( ( ) = >
{
CommonTool . DbServe . Insertable ( wcsTasks ) . ExecuteCommand ( ) ;
foreach ( var wcsTask in wcsTasks )
{
CommonTool . DbServe . Updateable ( new AppWmsTask ( )
{ TaskId = wcsTask . TaskId , TaskStatus = ( int ) WmsTaskStatusEnum . queuing } )
. IgnoreColumns ( ignoreAllNullColumns : true ) . ExecuteCommand ( ) ;
}
} ) ;
return result . Data ? string . Empty : result . ErrorException . Message ;
}
/// <summary>
/// 查找各组 taskId 中最前的任务
/// </summary>
/// <returns></returns>
public List < AppWcsTask > ? GetNeedExecuteTasks ( )
{
try
{
const string sql = "SELECT * FROM tbl_app_wcs_task a WHERE task_sort = (SELECT MIN(task_sort) from tbl_app_wcs_task where a.task_id = task_id) and task_status = 0 ORDER BY create_time asc" ;
List < AppWcsTask > tasks = CommonTool . DbServe . Ado . SqlQuery < AppWcsTask > ( sql ) ;
return tasks ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 校验除了这个任务以外,该组是否有其他任务
/// </summary>
/// <param name="wcsTask"></param>
/// <returns></returns>
public List < AppWcsTask > ? CheckIsHaveOtherTask ( AppWcsTask wcsTask )
{
try
{
List < AppWcsTask > wcsTasks = CommonTool . DbServe . Queryable < AppWcsTask > ( )
. Where ( w = > w . TaskId = = wcsTask . TaskId & & w . TaskSort ! = wcsTask . TaskSort ) . ToList ( ) ;
return wcsTasks ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 根据任务ID查询所有的wcs任务数据, 包括备份表内的数据
/// </summary>
/// /// <param name="taskId"></param>
/// <returns></returns>
public List < AppWcsTask > ? GetAllTasksWithBakData ( string taskId )
{
try
{
string selectSql = $"select * from (select * from tbl_app_wcs_task union all select * from tbl_app_wcs_task_bak) as a where task_id = '{taskId}' order by create_time asc " ;
List < AppWcsTask > wcsTasks = CommonTool . DbServe . SqlQueryable < AppWcsTask > ( selectSql ) . ToList ( ) ;
return wcsTasks ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 根据 PlcId 查找任务数据,包括备份表
/// </summary>
/// <param name="plcId"></param>
/// <returns></returns>
public List < AppWcsTask > ? GetAllTasksWithBakDataUsePlcId ( int? plcId )
{
try
{
string selectSql = $"select * from (select * from tbl_app_wcs_task union all select * from tbl_app_wcs_task_bak) as a where plc_id = '{plcId}' order by create_time asc " ;
List < AppWcsTask > wcsTasks = CommonTool . DbServe . SqlQueryable < AppWcsTask > ( selectSql ) . ToList ( ) ;
return wcsTasks ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 根据堆垛机编号查询该堆垛机下需要执行的入库任务
/// </summary>
/// <param name="stackerId"></param>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public List < AppWcsTask > ? SelectInTaskWithStacker ( int stackerId , string? vehicleNo = default )
{
try
{
StringBuilder sql = new ( ) ;
sql . AppendLine ( $"select * from tbl_app_wcs_task where origin in (select wcs_location from tbl_app_location where equipment_id = {stackerId}) and task_type = {(int)TaskTypeEnum.inTask} " ) ;
sql . AppendLine ( $"and task_category = {(int)TaskCategoryEnum.stacker} " ) ;
sql . AppendLine ( $"and task_status = {(int)WcsTaskStatusEnum.create} " ) ;
if ( ! string . IsNullOrEmpty ( vehicleNo ) )
{
sql . AppendLine ( $"and vehicle_no = '{vehicleNo}' " ) ;
}
sql . AppendLine ( "order by priority desc, wms_time asc " ) ;
var sqlFuc = CommonTool . DbServe . Ado . SqlQuery < AppWcsTask > ( sql . ToString ( ) ) ;
return sqlFuc ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 根据堆垛机编号查询该堆垛机下需要执行的出库任务
/// </summary>
/// <param name="stackerId"></param>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public List < AppWcsTask > ? SelectOutTaskWithStacker ( int stackerId , string? vehicleNo = default )
{
try
{
StringBuilder sql = new ( ) ;
sql . AppendLine ( $"select * from tbl_app_wcs_task where origin in (select wcs_location from tbl_app_location where equipment_id = {stackerId}) and task_type = {(int)TaskTypeEnum.outTask} " ) ;
sql . AppendLine ( $"and task_category = {(int)TaskCategoryEnum.stacker} " ) ;
sql . AppendLine ( $"and task_status = {(int)WcsTaskStatusEnum.create} " ) ;
if ( ! string . IsNullOrEmpty ( vehicleNo ) )
{
sql . AppendLine ( $"and vehicle_no = '{vehicleNo}' " ) ;
}
sql . AppendLine ( "order by priority desc, wms_time asc " ) ;
var sqlFuc = CommonTool . DbServe . Ado . SqlQuery < AppWcsTask > ( sql . ToString ( ) ) ;
return sqlFuc ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 根据堆垛机编号查询该堆垛机下需要执行的拣选出库任务
/// </summary>
/// <param name="stackerId"></param>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public List < AppWcsTask > ? SelectPickOutTaskWithStacker ( int stackerId , string? vehicleNo = "" )
{
try
{
StringBuilder sql = new ( ) ;
sql . AppendLine ( $"select * from tbl_app_wcs_task where origin in (select wcs_location from tbl_app_location where equipment_id = {stackerId}) and task_type = {(int)TaskTypeEnum.pick} " ) ;
sql . AppendLine ( $"and task_category = {(int)TaskCategoryEnum.stacker} " ) ;
sql . AppendLine ( $"and task_status = {(int)WcsTaskStatusEnum.create} " ) ;
if ( ! string . IsNullOrEmpty ( vehicleNo ) )
{
sql . AppendLine ( $"and vehicle_no = '{vehicleNo}' " ) ;
}
sql . AppendLine ( "order by priority desc, create_time asc " ) ;
var sqlFuc = CommonTool . DbServe . Ado . SqlQuery < AppWcsTask > ( sql . ToString ( ) ) ;
return sqlFuc ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 根据堆垛机编号查询该堆垛机下需要执行的移库任务
/// </summary>
/// <param name="stackerId"></param>
/// <param name="vehicleNo"></param>
/// <returns></returns>
public List < AppWcsTask > ? SelectMoveTaskWithStacker ( int stackerId , string? vehicleNo = "" )
{
try
{
StringBuilder sql = new ( ) ;
sql . AppendLine ( $"select * from tbl_app_wcs_task where origin in (select wcs_location from tbl_app_location where equipment_id = {stackerId}) and task_type = {(int)TaskTypeEnum.moveTask} " ) ;
sql . AppendLine ( $"and task_category = {(int)TaskCategoryEnum.stacker} " ) ;
sql . AppendLine ( $"and task_status = {(int)WcsTaskStatusEnum.create} " ) ;
if ( ! string . IsNullOrEmpty ( vehicleNo ) )
{
sql . AppendLine ( $"and vehicle_no = '{vehicleNo}' " ) ;
}
sql . AppendLine ( "order by priority desc, create_time asc " ) ;
var sqlFuc = CommonTool . DbServe . Ado . SqlQuery < AppWcsTask > ( sql . ToString ( ) ) ;
return sqlFuc ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
/// <summary>
/// 根据起点或者终点查找当前正在运行的任务
/// </summary>
/// <param name="destinations"></param>
/// <returns></returns>
public List < AppWcsTask > ? QueryTaskWithWcsLocation ( params string? [ ] destinations )
{
List < AppWcsTask > ? result = [ ] ;
if ( destinations . Length < 1 ) return result ;
try
{
foreach ( var destination in destinations )
{
var sqlFuc = CommonTool . DbServe . Queryable < AppWcsTask > ( )
. Where ( x = > x . Destination = = destination | | x . Origin = = destination )
2024-11-15 11:37:55 +08:00
. Where ( x = > EnumData . GetWcsTaskStatusEnumRunningStatus ( ) . Contains ( x . TaskStatus ) ) ;
2024-10-07 09:51:55 +08:00
result . AddRange ( sqlFuc . ToList ( ) ) ;
}
return result ;
}
catch ( Exception ex )
{
_ = ex ;
return default ;
}
}
}