ferry/pkg/service/workOrderList.go
2020-07-15 01:40:56 +08:00

125 lines
3.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package service
import (
"encoding/json"
"ferry/models/user"
"ferry/models/workOrder"
"ferry/pkg/connection"
"ferry/pkg/pagination"
"fmt"
"strings"
"github.com/gin-gonic/gin"
)
/*
@Author : lanyulei
*/
func WorkOrderList(c *gin.Context, classify int) (result interface{}, err error) {
type workOrderInfo struct {
workOrder.Info
Principals string `json:"principals"`
DataClassify int `json:"data_classify"`
}
var (
workOrderInfoList []workOrderInfo
principals string
userInfo user.Info
StateList []map[string]interface{}
)
title := c.DefaultQuery("title", "")
db := connection.DB.Self.Model(&workOrder.Info{}).Where("title like ?", fmt.Sprintf("%%%v%%", title))
err = connection.DB.Self.Model(&user.Info{}).Where("id = ?", c.GetInt("userId")).Find(&userInfo).Error
if err != nil {
return
}
// 获取当前用户信息
switch classify {
case 1:
// 待办工单
// 1. 个人
personSelect := fmt.Sprintf("(JSON_CONTAINS(state, JSON_OBJECT('processor', %v)) and JSON_CONTAINS(state, JSON_OBJECT('process_method', 'person')))", c.GetInt("userId"))
// 2. 小组
groupList := make([]int, 0)
err = connection.DB.Self.Model(&user.UserGroup{}).
Where("user = ?", c.GetInt("userId")).
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'))",
)
// 3. 部门
departmentSelect := fmt.Sprintf("(JSON_CONTAINS(state, JSON_OBJECT('processor', %v)) and JSON_CONTAINS(state, JSON_OBJECT('process_method', 'department')))", userInfo.Dept)
// 4. 变量
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", c.GetInt("userId")),
fmt.Sprintf("JSON_CONTAINS(state, JSON_OBJECT('processor', 2)) and JSON_CONTAINS(state, JSON_OBJECT('process_method', 'variable')) and creator = %v", userInfo.Dept),
)
db = db.Where(fmt.Sprintf("(%v or %v or %v or %v) and is_end = 0", personSelect, personGroupSelect, departmentSelect, variableSelect))
case 2:
// 我创建的
db = db.Where("creator = ?", c.GetInt("userId"))
case 3:
// 我相关的
db = db.Where(fmt.Sprintf("JSON_CONTAINS(related_person, '%v')", c.GetInt("userId")))
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
}