ferry/pkg/service/workOrderList.go

129 lines
4.2 KiB
Go
Raw Normal View History

2020-07-15 01:40:56 +08:00
package service
import (
"encoding/json"
2020-07-17 01:20:25 +08:00
"ferry/global/orm"
"ferry/models/process"
"ferry/models/system"
2020-07-15 01:40:56 +08:00
"ferry/pkg/pagination"
2020-07-17 01:20:25 +08:00
"ferry/tools"
2020-07-15 01:40:56 +08:00
"fmt"
"github.com/gin-gonic/gin"
)
/*
@Author : lanyulei
*/
func WorkOrderList(c *gin.Context, classify int) (result interface{}, err error) {
type workOrderInfo struct {
2020-07-17 01:20:25 +08:00
process.WorkOrderInfo
2020-07-15 01:40:56 +08:00
Principals string `json:"principals"`
DataClassify int `json:"data_classify"`
}
var (
workOrderInfoList []workOrderInfo
principals string
2020-07-17 01:20:25 +08:00
userInfo system.SysUser
2020-07-15 01:40:56 +08:00
StateList []map[string]interface{}
)
title := c.DefaultQuery("title", "")
2020-07-17 01:20:25 +08:00
db := orm.Eloquent.Model(&process.WorkOrderInfo{}).Where("title like ?", fmt.Sprintf("%%%v%%", title))
2020-07-15 01:40:56 +08:00
2020-07-17 01:20:25 +08:00
err = orm.Eloquent.Model(&system.SysUser{}).Where("id = ?", tools.GetUserId(c)).Find(&userInfo).Error
2020-07-15 01:40:56 +08:00
if err != nil {
return
}
// 获取当前用户信息
switch classify {
case 1:
// 待办工单
// 1. 个人
2020-07-17 01:20:25 +08:00
personSelect := fmt.Sprintf("(JSON_CONTAINS(state, JSON_OBJECT('processor', %v)) and JSON_CONTAINS(state, JSON_OBJECT('process_method', 'person')))", tools.GetUserId(c))
2020-07-15 01:40:56 +08:00
// 2. 小组
2020-07-17 01:20:25 +08:00
//groupList := make([]int, 0)
//err = orm.Eloquent.Model(&user.UserGroup{}).
// Where("user = ?", tools.GetUserId(c)).
// Pluck("`group`", &groupList).Error
//if err != nil {
// return
//}
//groupSqlList := make([]string, 0)
//if len(groupList) > 0 {
// for _, group := range groupList {
// groupSqlList = append(groupSqlList, fmt.Sprintf("JSON_CONTAINS(state, JSON_OBJECT('processor', %v))", group))
// }
//} else {
// groupSqlList = append(groupSqlList, fmt.Sprintf("JSON_CONTAINS(state, JSON_OBJECT('processor', 0))"))
//}
//
//personGroupSelect := fmt.Sprintf(
// "((%v) and %v)",
// strings.Join(groupSqlList, " or "),
// "JSON_CONTAINS(state, JSON_OBJECT('process_method', 'persongroup'))",
//)
2020-07-15 01:40:56 +08:00
// 3. 部门
2020-07-17 01:20:25 +08:00
//departmentSelect := fmt.Sprintf("(JSON_CONTAINS(state, JSON_OBJECT('processor', %v)) and JSON_CONTAINS(state, JSON_OBJECT('process_method', 'department')))", userInfo.Dept)
2020-07-15 01:40:56 +08:00
// 4. 变量
2020-07-17 01:20:25 +08:00
variableSelect := fmt.Sprintf("(%v)",
fmt.Sprintf("JSON_CONTAINS(state, JSON_OBJECT('processor', 1)) and JSON_CONTAINS(state, JSON_OBJECT('process_method', 'variable')) and creator = %v", tools.GetUserId(c)),
2020-07-15 01:40:56 +08:00
)
2020-07-17 01:20:25 +08:00
//variableSelect := fmt.Sprintf("((%v) or (%v))",
// fmt.Sprintf("JSON_CONTAINS(state, JSON_OBJECT('processor', 1)) and JSON_CONTAINS(state, JSON_OBJECT('process_method', 'variable')) and creator = %v", tools.GetUserId(c)),
// fmt.Sprintf("JSON_CONTAINS(state, JSON_OBJECT('processor', 2)) and JSON_CONTAINS(state, JSON_OBJECT('process_method', 'variable')) and creator = %v", userInfo.Dept),
//)
2020-07-15 01:40:56 +08:00
2020-07-17 01:20:25 +08:00
//db = db.Where(fmt.Sprintf("(%v or %v or %v or %v) and is_end = 0", personSelect, personGroupSelect, departmentSelect, variableSelect))
db = db.Where(fmt.Sprintf("(%v or %v) and is_end = 0", personSelect, variableSelect))
2020-07-15 01:40:56 +08:00
case 2:
// 我创建的
2020-07-17 01:20:25 +08:00
db = db.Where("creator = ?", tools.GetUserId(c))
2020-07-15 01:40:56 +08:00
case 3:
// 我相关的
2020-07-17 01:20:25 +08:00
db = db.Where(fmt.Sprintf("JSON_CONTAINS(related_person, '%v')", tools.GetUserId(c)))
2020-07-15 01:40:56 +08:00
case 4:
// 所有工单
default:
return nil, fmt.Errorf("请确认查询的数据类型是否正确")
}
result, err = pagination.Paging(&pagination.Param{
C: c,
DB: db,
}, &workOrderInfoList)
if err != nil {
err = fmt.Errorf("查询工单列表失败,%v", err.Error())
return
}
for i, w := range *result.(*pagination.Paginator).Data.(*[]workOrderInfo) {
err = json.Unmarshal(w.State, &StateList)
if err != nil {
err = fmt.Errorf("json反序列化失败%v", err.Error())
return
}
if len(StateList) != 0 {
processorList := make([]int, 0)
for _, v := range StateList[0]["processor"].([]interface{}) {
processorList = append(processorList, int(v.(float64)))
}
principals, err = GetPrincipal(processorList, StateList[0]["process_method"].(string))
if err != nil {
err = fmt.Errorf("查询处理人名称失败,%v", err.Error())
return
}
}
workOrderDetails := *result.(*pagination.Paginator).Data.(*[]workOrderInfo)
workOrderDetails[i].Principals = principals
workOrderDetails[i].DataClassify = classify
}
return result, nil
}