@ -22,6 +22,7 @@ type (
EquipmentID uint64 ` json:"-" `
EquipmentCode string ` json:"equipment_code" `
EquipmentTitle string ` json:"equipment_title" `
Breakdown string ` json:"-" `
BreakdownTitle string ` json:"breakdown_title" `
ScheduleID uint64 ` json:"-" `
ScheduleTitle string ` json:"schedule_title" `
@ -44,8 +45,9 @@ type (
// WorkbenchCondition 工作台条件
type WorkbenchCondition struct {
UID string
RoleIDs [ ] string
UID string
RoleIDs [ ] string
WorkSchedule [ ] uint64
}
func ( m * WorkbenchCondition ) roleInfo ( ) string {
@ -55,11 +57,24 @@ func (m *WorkbenchCondition) roleInfo() string {
return strings . Join ( m . RoleIDs , "," )
}
func ( m * WorkbenchCondition ) workScheduleInfo ( ) string {
if len ( m . WorkSchedule ) <= 0 {
return "''"
}
out := make ( [ ] string , 0 )
for _ , v := range m . WorkSchedule {
out = append ( out , fmt . Sprintf ( "%d" , v ) )
}
return strings . Join ( out , "," )
}
// Detail 详细信息
func ( m * WorkInstance ) Detail ( id uint64 ) ( * WorkInstanceInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS w" ) .
Select ( "w.id" , "w.kind" , "w.title" , "w.equipment_id" , "e.code AS equipment_code" , "e.title AS equipment_title" , "w.priority" ,
"(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title " ,
"w.breakdown " ,
//"(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title",
"w.schedule AS schedule_id" , "s.title AS schedule_title" , "supplier.name AS supplier_name" , "w.distribution" , "w.plate_number" , "w.remark" , "w.status" , "w.created_at" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e ON w.equipment_id = e.id" , model . NewManageEquipment ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS s ON w.schedule = s.id" , model . NewWorkSchedule ( ) . TableName ( ) ) ) .
@ -78,7 +93,8 @@ func (m *WorkInstance) Detail(id uint64) (*WorkInstanceInfo, error) {
func ( m * WorkInstance ) Instances ( page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * WorkInstanceInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS w" ) .
Select ( "w.id" , "w.order_no" , "w.title" , "e.code AS equipment_code" , "e.title AS equipment_title" , "w.priority" ,
"(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title " ,
"w.breakdown " ,
//"(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title",
"s.title AS schedule_title" , "w.status" , "u.name AS username" , "w.created_at" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e ON w.equipment_id = e.id" , model . NewManageEquipment ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS s ON w.schedule = s.id" , model . NewWorkSchedule ( ) . TableName ( ) ) ) .
@ -106,7 +122,8 @@ func (m *WorkInstance) Instances(page, pageSize int, count *int64, where ...*mod
func ( m * WorkInstance ) Persons ( uid uint64 , page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * WorkInstanceInfo , error ) {
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS w" ) .
Select ( "w.id" , "w.order_no" , "w.title" , "e.code AS equipment_code" , "e.title AS equipment_title" , "w.priority" ,
"(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title " ,
"w.breakdown " ,
//"(SELECT GROUP_CONCAT(s_b.title) FROM ( SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title",
"s.title AS schedule_title" , "w.status" , "w.created_at" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e ON w.equipment_id = e.id" , model . NewManageEquipment ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS s ON w.schedule = s.id" , model . NewWorkSchedule ( ) . TableName ( ) ) ) .
@ -132,27 +149,30 @@ func (m *WorkInstance) Persons(uid uint64, page, pageSize int, count *int64, whe
func ( m * WorkInstance ) Workbench ( condition * WorkbenchCondition , limit int , where ... * model . ModelWhere ) ( [ ] * WorkInstanceInfo , error ) {
mWorkSchedule := model . NewWorkSchedule ( )
_condition := fmt . Sprintf ( ` CASE %s
WHEN %d THEN
(SELECT GROUP_CONCAT(a.id) FROM (SELECT id FROM %s WHERE target = %d AND target_value IN (%s)) AS a)
WHEN %d THEN
(SELECT GROUP_CONCAT(a.id) FROM (SELECT id FROM %s WHERE target = %d AND target_value IN (%s)) AS a)
ELSE "" END` , "s.target" ,
model . WorkScheduleTargetForPerson ,
mWorkSchedule. TableName( ) , model . WorkScheduleTargetForPerson, condition. UID ,
model . WorkScheduleTargetForRole ,
mWorkSchedule. TableName( ) , model . WorkScheduleTargetForRole, condition. roleInfo( ) )
// _condition := fmt.Sprintf(` CASE %s
// WHEN %d THEN
// (SELECT GROUP_CONCAT(a.id) FROM (SELECT id FROM %s WHERE target = %d AND target_value IN (%s)) AS a)
// WHEN %d THEN
// (SELECT GROUP_CONCAT(a.id) FROM (SELECT id FROM %s WHERE target = %d AND target_value IN (%s)) AS a)
// ELSE "" END`, "s.target",
// model. WorkScheduleTargetForPerson,
// mWorkSchedule. TableName(), model. WorkScheduleTargetForPerson, condition. UID,
// model. WorkScheduleTargetForRole,
// mWorkSchedule. TableName(), model. WorkScheduleTargetForRole, condition. roleInfo() )
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS w" ) .
Select ( "w.id" , "w.order_no" , "w.title" , "e.code AS equipment_code" , "e.title AS equipment_title" , "w.priority" ,
"(SELECT GROUP_CONCAT(s_b.title) FROM (SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title " ,
"w.breakdown " ,
// TODO: 因mysql与sqlite3中Find_In_Set不兼容, 故只能将其注释, 更改为组合查询
//"(SELECT GROUP_CONCAT(s_b.title) FROM (SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title",
"s.title AS schedule_title" , "w.status" , "u.name AS username" , "w.created_at" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e ON w.equipment_id = e.id" , model . NewManageEquipment ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS s ON w.schedule = s.id" , mWorkSchedule . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS u ON w.uid = u.uuid" , model . NewSysUser ( ) . TableName ( ) ) ) .
Where ( "w.is_deleted = ?" , model . DeleteStatusForNot ) .
Where ( "w.status = ?" , model . WorkInstanceStatusForOngoing ) .
Where( fmt . Sprintf ( "FIND_IN_SET(w.schedule, %s)" , _condition) )
// Where(fmt.Sprintf("w.schedule IN (%s)", _condition) )
Where ( "w.schedule IN (?)" , condition . WorkSchedule )
if len ( where ) > 0 {
for _ , wo := range where {
@ -171,27 +191,29 @@ ELSE "" END`, "s.target",
func ( m * WorkInstance ) Workbenchs ( condition * WorkbenchCondition , page , pageSize int , count * int64 , where ... * model . ModelWhere ) ( [ ] * WorkInstanceInfo , error ) {
mWorkSchedule := model . NewWorkSchedule ( )
_condition := fmt . Sprintf ( ` CASE %s
WHEN %d THEN
(SELECT GROUP_CONCAT(a.id) FROM (SELECT id FROM %s WHERE target = %d AND target_value IN (%s)) AS a)
WHEN %d THEN
(SELECT GROUP_CONCAT(a.id) FROM (SELECT id FROM %s WHERE target = %d AND target_value IN (%s)) AS a)
ELSE "" END` , "s.target" ,
model . WorkScheduleTargetForPerson ,
mWorkSchedule. TableName( ) , model . WorkScheduleTargetForPerson, condition. UID ,
model . WorkScheduleTargetForRole ,
mWorkSchedule. TableName( ) , model . WorkScheduleTargetForRole, condition. roleInfo( ) )
// _condition := fmt.Sprintf(` CASE %s
// WHEN %d THEN
// (SELECT GROUP_CONCAT(a.id) FROM (SELECT id FROM %s WHERE target = %d AND target_value IN (%s)) AS a)
// WHEN %d THEN
// (SELECT GROUP_CONCAT(a.id) FROM (SELECT id FROM %s WHERE target = %d AND target_value IN (%s)) AS a)
// ELSE "" END`, "s.target",
// model. WorkScheduleTargetForPerson,
// mWorkSchedule. TableName(), model. WorkScheduleTargetForPerson, condition. UID,
// model. WorkScheduleTargetForRole,
// mWorkSchedule. TableName(), model. WorkScheduleTargetForRole, condition. roleInfo() )
db := orm . GetDB ( ) . Table ( m . TableName ( ) + " AS w" ) .
Select ( "w.id" , "w.order_no" , "w.title" , "e.code AS equipment_code" , "e.title AS equipment_title" , "w.priority" ,
"(SELECT GROUP_CONCAT(s_b.title) FROM (SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title " ,
"w.breakdown " ,
//"(SELECT GROUP_CONCAT(s_b.title) FROM (SELECT id, title FROM sys_breakdown) AS s_b WHERE FIND_IN_SET( s_b.id, w.breakdown )) AS breakdown_title",
"s.title AS schedule_title" , "w.status" , "u.name AS username" , "w.created_at" ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS e ON w.equipment_id = e.id" , model . NewManageEquipment ( ) . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS s ON w.schedule = s.id" , mWorkSchedule . TableName ( ) ) ) .
Joins ( fmt . Sprintf ( "LEFT JOIN %s AS u ON w.uid = u.uuid" , model . NewSysUser ( ) . TableName ( ) ) ) .
Where ( "w.is_deleted = ?" , model . DeleteStatusForNot ) .
Where ( "w.status = ?" , model . WorkInstanceStatusForOngoing ) .
Where( fmt . Sprintf ( "FIND_IN_SET(w.schedule, %s)" , _condition) )
// Where(fmt.Sprintf("w.schedule IN (%s)", _condition) )
Where ( "w.schedule IN (?)" , condition . WorkSchedule )
if len ( where ) > 0 {
for _ , wo := range where {