using FactorySystemCommon ;
using FactorySystemModel.EnumModel ;
using FactorySystemModel.RequestModel ;
using FactorySystemModel.ResponseModel ;
using FactorySystemModel.SqlSugarModel ;
using SqlSugar ;
using System ;
using System.Collections.Generic ;
using System.Linq ;
namespace FactorySystemBll
{
public class MaterialTaskBll
{
/// <summary>
/// 获取任务列表
/// </summary>
public List < MaterialTaskRow > GetList ( MaterialTaskQuery mtq , out int totalNumber )
{
totalNumber = 0 ;
var db = AppSettingsHelper . GetSqlSugar ( ) ;
return db . Queryable < TFS_FMaterialTask , TFS_FMaterialTeamwork , TUser > ( ( a , b , c ) = > new JoinQueryInfos ( JoinType . Inner , a . FMaterialTeamID = = b . FID , JoinType . Left , a . FAddUser = = c . FID ) )
// 事项状态
. WhereIF ( mtq . FState > 0 & & mtq . FState ! = 99 , ( a , b ) = > a . FState = = mtq . FState )
// 物料号
. WhereIF ( ! string . IsNullOrEmpty ( mtq . FMaterialCode ) , ( a , b ) = > b . FMaterialCode . Equals ( mtq . FMaterialCode ) )
// 类型
. WhereIF ( mtq . FType > = 0 , ( a , b ) = > a . FType = = mtq . FType )
// 发起时间
. WhereIF ( mtq . FDateRange ! = null & & mtq . FDateRange [ 0 ] ! = "" , ( a , b ) = > a . FAddDate > = DateTime . Parse ( mtq . FDateRange [ 0 ] ) )
. WhereIF ( mtq . FDateRange ! = null & & mtq . FDateRange [ 1 ] ! = "" , ( a , b ) = > a . FAddDate < = DateTime . Parse ( mtq . FDateRange [ 1 ] ) )
// 责任人
. WhereIF ( mtq . FUserID ! = null , ( a , b ) = > ( ',' + a . FUserID + ',' ) . Contains ( ',' + mtq . FUserID + ',' ) )
//// 协同
//.WhereIF(mtq.FMaterialTeamID > 0, (a, b) => a.FMaterialTeamID == mtq.FMaterialTeamID)
. OrderBy ( ( a , b ) = > a . FID , OrderByType . Desc )
. Select < MaterialTaskRow > ( "a.*,b.FMaterialName,b.FMaterialCode,b.FTestCode,b.FMaterialType, c.FName as FAddUserName" ) . OrderBy ( ( a ) = > a . FID , OrderByType . Desc )
. ToPageList ( mtq . FPageIndex , mtq . FPageSize , ref totalNumber ) ;
}
public List < TFS_FMaterialTask > GetMaterialTasks ( int teamId )
{
var db = AppSettingsHelper . GetSqlSugar ( ) ;
List < TFS_FMaterialTask > tasks = db . Queryable < TFS_FMaterialTask > ( ) . Where ( t = > t . FMaterialTeamID = = teamId ) . ToList ( ) ;
return tasks ;
}
/// <summary>
/// 创建物料新增事项
/// </summary>
public int CreateMaterialTask ( int teamId , int teamworkType , int userId , int type , int factoryId , List < TUser > users )
{
SqlSugarClient db = AppSettingsHelper . GetSqlSugar ( ) ;
int taskId = - 1 ;
try
{
if ( users . Count > 0 )
{
TFS_FMaterialTask materialTask = new TFS_FMaterialTask ( ) ;
materialTask . FMaterialTeamID = teamId ;
materialTask . FType = type ;
materialTask . FFactoryID = factoryId ;
materialTask . FCanEdit = 1 ;
materialTask . FAddUser = userId ;
materialTask . FAddDate = DateTime . Now ;
materialTask . FState = 1 ;
materialTask . FTeamworkType = teamworkType ;
materialTask . FUserID = string . Join ( "," , users . GroupBy ( ss = > ss . FID ) . Select ( sss = > sss . Key ) ) ;
materialTask . FUserName = string . Join ( "、" , users . GroupBy ( ss = > ss . FName ) . Select ( sss = > sss . Key ) ) ;
if ( type = = 0 )
{
materialTask . FName = "物料分类" ;
materialTask . FDesc = "物料分类选择" ;
}
else if ( type = = 1 )
{
materialTask . FName = "物料视图" ;
materialTask . FDesc = "物料视图编辑" ;
}
else if ( type = = 8 )
{
materialTask . FName = "工艺组编号申请" ;
materialTask . FDesc = "工艺组编号申请" ;
}
else
{
materialTask . FName = "确认视图" ;
materialTask . FDesc = "物料视图确认" ;
}
taskId = db . Insertable ( materialTask ) . IgnoreColumns ( true ) . ExecuteReturnIdentity ( ) ;
}
}
catch ( Exception ex )
{
taskId = - 1 ;
}
return taskId ;
}
public int CloseMaterialTask ( int teamId , int userId , int type )
{
SqlSugarClient db = AppSettingsHelper . GetSqlSugar ( ) ;
List < TFS_FMaterialTask > taskList = db . Queryable < TFS_FMaterialTask > ( ) . Where ( s = > s . FType = = type & & s . FMaterialTeamID = = teamId & & s . FState = = 1 ) . ToList ( ) ;
int result = 0 ;
if ( taskList ! = null & & taskList . Count > 0 )
{
TFS_FMaterialTask fmt = taskList [ 0 ] ;
// fmt.FCanEdit = 2;
fmt . FState = 2 ;
fmt . FEditUser = userId ;
fmt . FEditDate = DateTime . Now ;
result = db . Updateable ( fmt ) . IgnoreColumns ( true ) . WhereColumns ( "FID" ) . ExecuteCommand ( ) ;
}
return result ;
}
public int CloseAllMaterialTask ( int teamId , int userId )
{
SqlSugarClient db = AppSettingsHelper . GetSqlSugar ( ) ;
List < TFS_FMaterialTask > taskList = db . Queryable < TFS_FMaterialTask > ( ) . Where ( s = > s . FMaterialTeamID = = teamId ) . ToList ( ) ;
int result = 0 ;
if ( taskList ! = null & & taskList . Count > 0 )
{
foreach ( TFS_FMaterialTask task in taskList )
{
task . FCanEdit = 2 ;
task . FState = 2 ;
task . FEditUser = userId ;
task . FEditDate = DateTime . Now ;
result = db . Updateable ( task ) . IgnoreColumns ( true ) . WhereColumns ( "FID" ) . ExecuteCommand ( ) ;
}
}
return result ;
}
/ * *
* 20230505 修 改 权 限 BUG
* 获 取 事 项 用 户 , 用 于 判 断 是 否 生 成 路 线 和 事 项
* * * /
public List < TUser > GetTaskUsers ( int taskType , string viewType , int factoryId )
{
SqlSugarClient db = AppSettingsHelper . GetSqlSugar ( ) ;
List < TUser > users = null ;
string funcType = null ;
List < string > funcVal = null ;
// 物料分类任务 | 物料编辑任务
if ( taskType = = 0 | | taskType = = 1 )
{
funcType = "4, 5" ;
funcVal = db . Queryable < TBasicCode > ( ) . Where ( s = > ( s . FType = = ( int ) Constant . BasicCode . 物 料 视 图 编 辑 | | s . FType = = ( int ) Constant . BasicCode . 物 料 基 础 编 辑 ) & &
viewType . Equals ( s . F1 ) & & // 视图编辑中的物料分类
s . FState = = 1 ) . Select ( s = > s . FValue ) . ToList ( ) ;
}
// 物料确认任务
else if ( taskType = = 2 )
{
funcType = "2" ;
funcVal = new List < string > { "7" } ;
}
users = db . Queryable < FPower , TUser , TRole_Right > ( ( a , b , c ) = > new JoinQueryInfos (
JoinType . Left , a . FUserID . Equals ( b . FID . ToString ( ) ) ,
JoinType . Left , a . FRole . Equals ( c . FRoleID . ToString ( ) ) ) )
. Where ( ( a , b , c ) = > factoryId . ToString ( ) . Contains ( a . FFactoryID ) )
. Where ( ( a , b , c ) = > b . FState = = 1 & & b . FDeleted ! = 1 )
. Where ( ( a , b , c ) = > funcType . Contains ( c . FType . ToString ( ) ) & & funcVal . Contains ( c . FFunctionID . ToString ( ) ) )
. GroupBy ( "b.FID, a.FFactoryID, b.FName, b.FUser" )
. Select < TUser > ( "b.FID, cast(a.FFactoryID as int), b.FName, b.FUser" )
. ToList ( ) ;
return users ;
}
/// <summary>
/// 组编号申请获取视图
/// </summary>
public List < TFS_ViewMaterial > GetDockGroupView ( Dictionary < string , object > inParam )
{
int teamId = int . Parse ( inParam [ "FTeamID" ] . ToString ( ) ) ;
SqlSugarClient db = AppSettingsHelper . GetSqlSugar ( ) ;
TFS_FMaterialTeamwork teamwork = db . Queryable < TFS_FMaterialTeamwork > ( ) . Where ( s = > s . FID = = teamId ) . First ( ) ;
List < int > viewType = new List < int >
{
( int ) Constant . ViewType . 半 成 品 视 图 ,
( int ) Constant . ViewType . 中 间 品 视 图 ,
( int ) Constant . ViewType . 香 基 视 图
} ;
return db . Queryable < TFS_ViewMaterial > ( ) . Where ( s = > s . FTeamID = = teamId & & s . FTeamType = = 1 & & s . FFactoryID = = teamwork . FProdFactoryID
& & SqlFunc . IsNullOrEmpty ( s . FGroupCode ) & & viewType . Contains ( s . FViewType ) ) . ToList ( ) ;
}
/// <summary>
/// 组编号申请处理视图
/// </summary>
public int DockMaterialGroup ( List < TFS_ViewMaterial > viewList , int userId )
{
int result = 0 ;
SqlSugarClient db = AppSettingsHelper . GetSqlSugar ( ) ;
db . BeginTran ( ) ;
try
{
int teamId = viewList . First ( ) . FTeamID ;
foreach ( var view in viewList )
{
result + = db . Updateable < TFS_ViewMaterial > ( new { FGroupCode = view . FGroupCode , FEditUser = userId , FEditDate = DateTime . Now } )
. Where ( s = > s . FTeamID = = teamId & & s . FTeamType = = 1 & & s . FMaterialID = = view . FMaterialID & & s . FViewType = = view . FViewType ) . ExecuteCommand ( ) ;
}
string taskSql = GetTaskSql ( - 1 , 2 , teamId , ( int ) Constant . TaskType . 组 编 号 申 请 , 2 ) ;
db . Ado . ExecuteCommand ( taskSql ) ;
db . CommitTran ( ) ;
}
catch ( Exception )
{
db . RollbackTran ( ) ;
}
return result ;
}
/// <summary>
/// 事项变更SQL语句
/// </summary>
private string GetTaskSql ( int taskId , int taskState , int teamId = - 1 , int taskType = - 1 , int taskEdit = - 1 , string sqlAppend = "" )
{
string updateSql = string . Format ( "a.FState={0}" , taskState ) ;
if ( taskState = = 2 ) updateSql + = ",FFinishDate=isnull(a.FFinishDate, getdate())" ;
if ( taskEdit > 0 ) updateSql + = string . Format ( ",a.FCanEdit={0}" , taskEdit ) ;
List < string > whereSql = new List < string > ( ) ;
if ( taskId > 0 ) whereSql . Add ( string . Format ( "a.FID={0}" , taskId ) ) ;
if ( teamId > 0 ) whereSql . Add ( string . Format ( "a.FMaterialTeamID={0}" , teamId ) ) ;
if ( taskType > 0 ) whereSql . Add ( string . Format ( "a.FType={0}" , taskType ) ) ;
if ( whereSql . Count = = 0 & & string . IsNullOrEmpty ( sqlAppend ) ) return "" ;
if ( ! string . IsNullOrEmpty ( sqlAppend ) & & whereSql . Count > 0 ) sqlAppend = " and " + sqlAppend ;
return string . Format ( @"update a set {0} from TFS_FMaterialTask a where {1} {2};" , updateSql , string . Join ( " and " , whereSql ) , sqlAppend ) ;
}
}
}