fix bug.
This commit is contained in:
parent
1f5c67832b
commit
ad740914d9
120
apis/process/classify.go
Normal file
120
apis/process/classify.go
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
package process
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"ferry/global/orm"
|
||||||
|
process2 "ferry/models/process"
|
||||||
|
"ferry/pkg/pagination"
|
||||||
|
"ferry/tools"
|
||||||
|
"ferry/tools/app"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 创建流程分类
|
||||||
|
func CreateClassify(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
classifyValue process2.Classify
|
||||||
|
classifyCount int
|
||||||
|
)
|
||||||
|
|
||||||
|
err = c.ShouldBind(&classifyValue)
|
||||||
|
if err != nil {
|
||||||
|
tools.HasError(err, "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断创建的分类是否存在
|
||||||
|
err = orm.Eloquent.Table("process_classify").
|
||||||
|
Where("name = ?", classifyValue.Name).
|
||||||
|
Count(&classifyCount).Error
|
||||||
|
if err != nil {
|
||||||
|
tools.HasError(err, "创建的分类名称已经存在,请修改", -1)
|
||||||
|
}
|
||||||
|
if classifyCount > 0 {
|
||||||
|
tools.HasError(err, "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
classifyValue.Creator = tools.GetUserId(c)
|
||||||
|
|
||||||
|
err = orm.Eloquent.Table("process_classify").Create(&classifyValue).Error
|
||||||
|
if err != nil {
|
||||||
|
tools.HasError(err, "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.OK(c, "", "创建流程分类成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 流程分类列表
|
||||||
|
func ClassifyList(c *gin.Context) {
|
||||||
|
type classifyValue struct {
|
||||||
|
process2.Classify
|
||||||
|
CreateUser string `json:"create_user"`
|
||||||
|
CreateName string `json:"create_name"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
classifyList []*classifyValue
|
||||||
|
)
|
||||||
|
|
||||||
|
SearchParams := map[string]map[string]interface{}{
|
||||||
|
"like": pagination.RequestParams(c),
|
||||||
|
}
|
||||||
|
|
||||||
|
db := orm.Eloquent.Model(&process2.Classify{}).Joins("left join sys_user on sys_user.user_id = process_classify.creator").
|
||||||
|
Select("process_classify.*, sys_user.username as create_user, sys_user.nick_name as create_name").
|
||||||
|
Where("process_classify.`delete_time` IS NULL")
|
||||||
|
|
||||||
|
result, err := pagination.Paging(&pagination.Param{
|
||||||
|
C: c,
|
||||||
|
DB: db,
|
||||||
|
}, &classifyList, SearchParams, "process_classify")
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
tools.HasError(err, "", -1)
|
||||||
|
}
|
||||||
|
app.OK(c, result, "获取分类列表成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新流程分类
|
||||||
|
func UpdateClassify(c *gin.Context) {
|
||||||
|
var (
|
||||||
|
err error
|
||||||
|
classifyValue process2.Classify
|
||||||
|
)
|
||||||
|
|
||||||
|
err = c.ShouldBind(&classifyValue)
|
||||||
|
if err != nil {
|
||||||
|
tools.HasError(err, "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新
|
||||||
|
err = orm.Eloquent.Model(&classifyValue).
|
||||||
|
Where("id = ?", classifyValue.Id).
|
||||||
|
Update("name", classifyValue.Name).Error
|
||||||
|
if err != nil {
|
||||||
|
tools.HasError(err, "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.OK(c, classifyValue, "流程分类更新成功")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 删除流程分类
|
||||||
|
func DeleteClassify(c *gin.Context) {
|
||||||
|
classifyId := c.DefaultQuery("classifyId", "")
|
||||||
|
if classifyId == "" {
|
||||||
|
tools.HasError(errors.New("参数传递失败,请确认classifyId是否传递"), "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
err := orm.Eloquent.Delete(process2.Classify{}, "id = ?", classifyId).Error
|
||||||
|
if err != nil {
|
||||||
|
tools.HasError(err, "", -1)
|
||||||
|
}
|
||||||
|
|
||||||
|
app.OK(c, "", "流程分类删除成功")
|
||||||
|
}
|
208
apis/process/process.go
Normal file
208
apis/process/process.go
Normal file
@ -0,0 +1,208 @@
|
|||||||
|
package process
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// process2 "ferry/models/process"
|
||||||
|
// "ferry/pkg/connection"
|
||||||
|
// "ferry/pkg/pagination"
|
||||||
|
// "ferry/pkg/response/code"
|
||||||
|
// "fmt"
|
||||||
|
//
|
||||||
|
// "github.com/gin-gonic/gin"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
///*
|
||||||
|
// @Author : lanyulei
|
||||||
|
//*/
|
||||||
|
//
|
||||||
|
//// 流程列表
|
||||||
|
//func ProcessList(c *gin.Context) {
|
||||||
|
// type processValue struct {
|
||||||
|
// process2.Info
|
||||||
|
// CreateUser string `json:"create_user"`
|
||||||
|
// CreateName string `json:"create_name"`
|
||||||
|
// ClassifyName string `json:"classify_name"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// processList []*processValue
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// SearchParams := map[string]map[string]interface{}{
|
||||||
|
// "like": pagination.RequestParams(c),
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// db := connection.DB.Self.
|
||||||
|
// Model(&process2.Info{}).
|
||||||
|
// Joins("left join user_info on user_info.id = process_info.creator").
|
||||||
|
// Joins("left join process_classify on process_classify.id = process_info.classify").
|
||||||
|
// Select("process_info.id, process_info.create_time, process_info.update_time, process_info.name, process_info.creator, process_classify.name as classify_name, user_info.username as create_user, user_info.nickname as create_name").
|
||||||
|
// Where("process_info.`delete_time` IS NULL")
|
||||||
|
//
|
||||||
|
// result, err := pagination.Paging(&pagination.Param{
|
||||||
|
// C: c,
|
||||||
|
// DB: db,
|
||||||
|
// }, &processList, SearchParams, "process_info")
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询流程列表失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// Response(c, nil, result, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 创建流程
|
||||||
|
//func CreateProcess(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// processValue process2.Info
|
||||||
|
// processCount int
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// err = c.ShouldBind(&processValue)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 确定修改的分类是否存在
|
||||||
|
// err = connection.DB.Self.Model(&processValue).
|
||||||
|
// Where("name = ?", processValue.Name).
|
||||||
|
// Count(&processCount).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询流程数量失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// if processCount > 0 {
|
||||||
|
// Response(c, code.InternalServerError, nil, "流程名称出现重复,请换一个名称")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// processValue.Creator = c.GetInt("userId")
|
||||||
|
//
|
||||||
|
// err = connection.DB.Self.Create(&processValue).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.CreateError, nil, fmt.Sprintf("创建流程失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 更新流程
|
||||||
|
//func UpdateProcess(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// processValue process2.Info
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// err = c.ShouldBind(&processValue)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err = connection.DB.Self.Model(&process2.Info{}).
|
||||||
|
// Where("id = ?", processValue.Id).
|
||||||
|
// Updates(map[string]interface{}{
|
||||||
|
// "name": processValue.Name,
|
||||||
|
// "structure": processValue.Structure,
|
||||||
|
// "tpls": processValue.Tpls,
|
||||||
|
// "classify": processValue.Classify,
|
||||||
|
// "task": processValue.Task,
|
||||||
|
// }).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.UpdateError, nil, fmt.Sprintf("更新流程信息失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 删除流程
|
||||||
|
//func DeleteProcess(c *gin.Context) {
|
||||||
|
// processId := c.DefaultQuery("processId", "")
|
||||||
|
// if processId == "" {
|
||||||
|
// Response(c, code.InternalServerError, nil, "参数不正确,请确定参数processId是否传递")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err := connection.DB.Self.Delete(process2.Info{}, "id = ?", processId).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.DeleteError, nil, fmt.Sprintf("删除流程失败, %v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 流程详情
|
||||||
|
//func ProcessDetails(c *gin.Context) {
|
||||||
|
// processId := c.DefaultQuery("processId", "")
|
||||||
|
// if processId == "" {
|
||||||
|
// Response(c, code.InternalServerError, nil, "参数不正确,请确定参数processId是否传递")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var processValue process2.Info
|
||||||
|
// err := connection.DB.Self.Model(&processValue).
|
||||||
|
// Where("id = ?", processId).
|
||||||
|
// Find(&processValue).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询流程详情失败, %v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, processValue, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 分类流程列表
|
||||||
|
//func ClassifyProcessList(c *gin.Context) {
|
||||||
|
// type classifyProcess struct {
|
||||||
|
// process2.Classify
|
||||||
|
// ProcessList []*process2.Info `json:"process_list"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// classifyList []*classifyProcess
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// processName := c.DefaultQuery("name", "")
|
||||||
|
// if processName == "" {
|
||||||
|
// err = connection.DB.Self.Model(&process2.Classify{}).Find(&classifyList).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("获取分类列表失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// var classifyIdList []int
|
||||||
|
// err = connection.DB.Self.Model(&process2.Info{}).
|
||||||
|
// Where("name LIKE ?", fmt.Sprintf("%%%v%%", processName)).
|
||||||
|
// Pluck("distinct classify", &classifyIdList).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("获取分类失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err = connection.DB.Self.Model(&process2.Classify{}).
|
||||||
|
// Where("id in (?)", classifyIdList).
|
||||||
|
// Find(&classifyList).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("获取分类失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for _, item := range classifyList {
|
||||||
|
// err = connection.DB.Self.Model(&process2.Info{}).
|
||||||
|
// Where("classify = ?", item.Id).
|
||||||
|
// Select("id, create_time, update_time, name").
|
||||||
|
// Find(&item.ProcessList).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("获取流程失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, classifyList, "")
|
||||||
|
//}
|
230
apis/process/task.go
Normal file
230
apis/process/task.go
Normal file
@ -0,0 +1,230 @@
|
|||||||
|
package process
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// "ferry/pkg/pagination"
|
||||||
|
// "ferry/pkg/response/code"
|
||||||
|
// . "ferry/pkg/response/response"
|
||||||
|
// "fmt"
|
||||||
|
// "io/ioutil"
|
||||||
|
// "os"
|
||||||
|
// "strings"
|
||||||
|
//
|
||||||
|
// "github.com/gin-gonic/gin"
|
||||||
|
// uuid "github.com/satori/go.uuid"
|
||||||
|
// "github.com/spf13/viper"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
///*
|
||||||
|
// @Author : lanyulei
|
||||||
|
//*/
|
||||||
|
//
|
||||||
|
//// 任务列表
|
||||||
|
//func TaskList(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// pageValue pagination.ListRequest
|
||||||
|
// taskName string
|
||||||
|
// taskData []map[string]interface{}
|
||||||
|
// total_count int
|
||||||
|
// )
|
||||||
|
// taskName = c.DefaultQuery("name", "")
|
||||||
|
//
|
||||||
|
// err = c.ShouldBind(&pageValue)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// getFileDetails := func(fn string) map[string]interface{} {
|
||||||
|
// file := make(map[string]interface{})
|
||||||
|
// fileClassify := strings.Split(fn, ".")
|
||||||
|
// fileDetails := strings.Split(fileClassify[0], "-")
|
||||||
|
// switch fileClassify[1] {
|
||||||
|
// case "py":
|
||||||
|
// file["classify"] = "Python"
|
||||||
|
// case "sh":
|
||||||
|
// file["classify"] = "Shell"
|
||||||
|
// default:
|
||||||
|
// file["classify"] = "Other"
|
||||||
|
// }
|
||||||
|
// if len(fileDetails) == 3 {
|
||||||
|
// file["name"] = fileDetails[0]
|
||||||
|
// file["uuid"] = fileDetails[1]
|
||||||
|
// file["creator"] = fileDetails[2]
|
||||||
|
// }
|
||||||
|
// file["full_name"] = fn
|
||||||
|
// return file
|
||||||
|
// }
|
||||||
|
// files, _ := ioutil.ReadDir(viper.GetString("script.path"))
|
||||||
|
// var endIndex int
|
||||||
|
// if taskName != "" {
|
||||||
|
// for _, f := range files {
|
||||||
|
// if strings.Contains(strings.Split(f.Name(), "-")[0], taskName) {
|
||||||
|
// taskData = append(taskData, getFileDetails(f.Name()))
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// total_count = len(taskData)
|
||||||
|
// if pageValue.Page*pageValue.PerPage > len(taskData) {
|
||||||
|
// endIndex = len(taskData)
|
||||||
|
// } else {
|
||||||
|
// endIndex = pageValue.Page * pageValue.PerPage
|
||||||
|
// }
|
||||||
|
// taskData = taskData[(pageValue.Page-1)*pageValue.PerPage : endIndex]
|
||||||
|
// } else {
|
||||||
|
// if pageValue.Page*pageValue.PerPage > len(files) {
|
||||||
|
// endIndex = len(files)
|
||||||
|
// } else {
|
||||||
|
// endIndex = pageValue.Page * pageValue.PerPage
|
||||||
|
// }
|
||||||
|
// for _, f := range files[(pageValue.Page-1)*pageValue.PerPage : endIndex] {
|
||||||
|
// taskData = append(taskData, getFileDetails(f.Name()))
|
||||||
|
// }
|
||||||
|
// total_count = len(files)
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, map[string]interface{}{
|
||||||
|
// "data": taskData,
|
||||||
|
// "page": pageValue.Page,
|
||||||
|
// "per_page": pageValue.PerPage,
|
||||||
|
// "total_count": total_count,
|
||||||
|
// }, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 创建任务
|
||||||
|
//func CreateTask(c *gin.Context) {
|
||||||
|
// type Task struct {
|
||||||
|
// Name string `json:"name"`
|
||||||
|
// Classify string `json:"classify"`
|
||||||
|
// Content string `json:"content"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// taskValue Task
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// err = c.ShouldBind(&taskValue)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// uuidValue := uuid.Must(uuid.NewV4(), err)
|
||||||
|
// fileName := fmt.Sprintf("%v/%v-%v-%v",
|
||||||
|
// viper.GetString("script.path"),
|
||||||
|
// taskValue.Name,
|
||||||
|
// strings.Split(uuidValue.String(), "-")[4],
|
||||||
|
// c.GetString("username"),
|
||||||
|
// )
|
||||||
|
// if taskValue.Classify == "python" {
|
||||||
|
// fileName = fileName + ".py"
|
||||||
|
// } else if taskValue.Classify == "shell" {
|
||||||
|
// fileName = fileName + ".sh"
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err = ioutil.WriteFile(fileName, []byte(taskValue.Content), 0666)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, fmt.Sprintf("创建任务脚本失败: %v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 更新任务
|
||||||
|
//func UpdateTask(c *gin.Context) {
|
||||||
|
// type fileDetails struct {
|
||||||
|
// Name string `json:"name"`
|
||||||
|
// FullName string `json:"full_name"`
|
||||||
|
// Classify string `json:"classify"`
|
||||||
|
// Content string `json:"content"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// file fileDetails
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// err = c.ShouldBind(&file)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, "")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// fullNameList := strings.Split(file.FullName, "-")
|
||||||
|
// if fullNameList[0] != file.Name {
|
||||||
|
// fullNameList[0] = file.Name
|
||||||
|
// }
|
||||||
|
// var suffixName string
|
||||||
|
// if strings.ToLower(file.Classify) == "python" {
|
||||||
|
// suffixName = ".py"
|
||||||
|
// } else if strings.ToLower(file.Classify) == "shell" {
|
||||||
|
// suffixName = ".sh"
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if fullNameList[len(fullNameList)-1][len(fullNameList[len(fullNameList)-1])-3:len(fullNameList[len(fullNameList)-1])] != suffixName {
|
||||||
|
// tList := strings.Split(fullNameList[len(fullNameList)-1], ".")
|
||||||
|
// tList[len(tList)-1] = suffixName[1:len(suffixName)]
|
||||||
|
// fullNameList[len(fullNameList)-1] = strings.Join(tList, ".")
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// fileFullName := strings.Join(fullNameList, "-")
|
||||||
|
//
|
||||||
|
// // 修改文件内容
|
||||||
|
// err = ioutil.WriteFile(fmt.Sprintf("%v/%v", viper.GetString("script.path"), fileFullName), []byte(file.Content), 0666)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, fmt.Sprintf("更新脚本文件失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 修改文件名称
|
||||||
|
// err = os.Rename(
|
||||||
|
// fmt.Sprintf("%v/%v", viper.GetString("script.path"), file.FullName),
|
||||||
|
// fmt.Sprintf("%v/%v", viper.GetString("script.path"), fileFullName),
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, fmt.Sprintf("更改脚本文件名称失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 删除任务
|
||||||
|
//func DeleteTask(c *gin.Context) {
|
||||||
|
// fullName := c.DefaultQuery("full_name", "")
|
||||||
|
// if fullName == "" {
|
||||||
|
// Response(c, code.InternalServerError, nil, "参数不正确,请确定参数full_name是否传递")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err := os.Remove(fmt.Sprintf("%v/%v", viper.GetString("script.path"), fullName))
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.DeleteError, nil, fmt.Sprintf("删除文件失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 任务详情
|
||||||
|
//func TaskDetails(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// fileName string
|
||||||
|
// content []byte
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// fileName = c.DefaultQuery("file_name", "")
|
||||||
|
// if fileName == "" {
|
||||||
|
// Response(c, code.ParamError, nil, "参数不正确,请确认file_name参数是否存在")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// content, err = ioutil.ReadFile(fmt.Sprintf("%v/%v", viper.GetString("script.path"), fileName))
|
||||||
|
// if err != nil {
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, string(content), "")
|
||||||
|
//}
|
154
apis/process/tpl.go
Normal file
154
apis/process/tpl.go
Normal file
@ -0,0 +1,154 @@
|
|||||||
|
package process
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// "ferry/models/tpl"
|
||||||
|
// "ferry/pkg/connection"
|
||||||
|
// "ferry/pkg/pagination"
|
||||||
|
// "ferry/pkg/response/code"
|
||||||
|
// . "ferry/pkg/response/response"
|
||||||
|
// "fmt"
|
||||||
|
//
|
||||||
|
// "github.com/gin-gonic/gin"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
///*
|
||||||
|
// @Author : lanyulei
|
||||||
|
//*/
|
||||||
|
//
|
||||||
|
//// 模板列表
|
||||||
|
//func TemplateList(c *gin.Context) {
|
||||||
|
// type templateUserValue struct {
|
||||||
|
// tpl.Info
|
||||||
|
// CreateUser string `json:"create_user"`
|
||||||
|
// CreateName string `json:"create_name"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// templateList []*templateUserValue
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// SearchParams := map[string]map[string]interface{}{
|
||||||
|
// "like": pagination.RequestParams(c),
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// db := connection.DB.Self.Model(&tpl.Info{}).Joins("left join user_info on user_info.id = tpl_info.creator").
|
||||||
|
// Select("tpl_info.id, tpl_info.create_time, tpl_info.update_time, tpl_info.`name`, tpl_info.`creator`, user_info.username as create_user, user_info.nickname as create_name").Where("tpl_info.`delete_time` IS NULL")
|
||||||
|
//
|
||||||
|
// result, err := pagination.Paging(&pagination.Param{
|
||||||
|
// C: c,
|
||||||
|
// DB: db,
|
||||||
|
// }, &templateList, SearchParams, "tpl_info")
|
||||||
|
//
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询模版失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, result, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 创建模版
|
||||||
|
//func CreateTemplate(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// templateValue tpl.Info
|
||||||
|
// templateCount int
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// err = c.ShouldBind(&templateValue)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 确定修改的分类是否存在
|
||||||
|
// err = connection.DB.Self.Model(&templateValue).
|
||||||
|
// Where("name = ?", templateValue.Name).
|
||||||
|
// Count(&templateCount).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询模版数量失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// if templateCount > 0 {
|
||||||
|
// Response(c, code.InternalServerError, nil, "模版名称出现重复,请换一个名称")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// templateValue.Creator = c.GetInt("userId") // 当前登陆用户ID
|
||||||
|
// err = connection.DB.Self.Create(&templateValue).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.CreateError, nil, fmt.Sprintf("创建模板失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 模版详情
|
||||||
|
//func TemplateDetails(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// templateDetailsValue tpl.Info
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// templateId := c.DefaultQuery("template_id", "")
|
||||||
|
// if templateId == "" {
|
||||||
|
// Response(c, code.ParamError, nil, fmt.Sprintf("参数不正确,请确认template_id是否传递"))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err = connection.DB.Self.Model(&templateDetailsValue).Where("id = ?", templateId).Find(&templateDetailsValue).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询模版数据失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, templateDetailsValue, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 更新模版
|
||||||
|
//func UpdateTemplate(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// templateValue tpl.Info
|
||||||
|
// )
|
||||||
|
// err = c.ShouldBind(&templateValue)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, fmt.Sprintf("参数绑定失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err = connection.DB.Self.Model(&templateValue).Where("id = ?", templateValue.Id).Updates(map[string]interface{}{
|
||||||
|
// "name": templateValue.Name,
|
||||||
|
// "remarks": templateValue.Remarks,
|
||||||
|
// "form_structure": templateValue.FormStructure,
|
||||||
|
// }).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.UpdateError, nil, fmt.Sprintf("更新模版失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, templateValue, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 删除模版
|
||||||
|
//func DeleteTemplate(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// templateId := c.DefaultQuery("template_id", "")
|
||||||
|
// if templateId == "" {
|
||||||
|
// Response(c, code.ParamError, nil, fmt.Sprintf("参数不正确,请确认template_id是否传递"))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err = connection.DB.Self.Delete(tpl.Info{}, "id = ?", templateId).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.DeleteError, nil, fmt.Sprintf("模版删除失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
400
apis/process/workOrder.go
Normal file
400
apis/process/workOrder.go
Normal file
@ -0,0 +1,400 @@
|
|||||||
|
package process
|
||||||
|
|
||||||
|
//import (
|
||||||
|
// "encoding/json"
|
||||||
|
// "errors"
|
||||||
|
// "ferry/models/user"
|
||||||
|
// "ferry/models/workOrder"
|
||||||
|
// "ferry/pkg/connection"
|
||||||
|
// "ferry/pkg/response/code"
|
||||||
|
// . "ferry/pkg/response/response"
|
||||||
|
// "ferry/pkg/service"
|
||||||
|
// "fmt"
|
||||||
|
// "strconv"
|
||||||
|
//
|
||||||
|
// "github.com/gin-gonic/gin"
|
||||||
|
//)
|
||||||
|
//
|
||||||
|
///*
|
||||||
|
// @Author : lanyulei
|
||||||
|
//*/
|
||||||
|
//
|
||||||
|
//// 流程结构包括节点,流转和模版
|
||||||
|
//func ProcessStructure(c *gin.Context) {
|
||||||
|
// processId := c.DefaultQuery("processId", "")
|
||||||
|
// if processId == "" {
|
||||||
|
// Response(c, code.InternalServerError, nil, "参数不正确,请确定参数processId是否传递")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// workOrderId := c.DefaultQuery("workOrderId", "0")
|
||||||
|
// if processId == "" {
|
||||||
|
// Response(c, code.InternalServerError, nil, "参数不正确,请确定参数processId是否传递")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// workOrderIdInt, _ := strconv.Atoi(workOrderId)
|
||||||
|
// processIdInt, _ := strconv.Atoi(processId)
|
||||||
|
// result, err := service.ProcessStructure(c, processIdInt, workOrderIdInt)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if workOrderIdInt != 0 {
|
||||||
|
// currentState := result["workOrder"].(service.WorkOrderData).CurrentState
|
||||||
|
// userAuthority, err := service.JudgeUserAuthority(c, workOrderIdInt, currentState)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.InternalServerError, nil, fmt.Sprintf("判断用户是否有权限失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// result["userAuthority"] = userAuthority
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, result, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 新建工单
|
||||||
|
//func CreateWorkOrder(c *gin.Context) {
|
||||||
|
// var workOrderValue struct {
|
||||||
|
// workOrder.Info
|
||||||
|
// Tpls map[string][]interface{} `json:"tpls"`
|
||||||
|
// SourceState string `json:"source_state"`
|
||||||
|
// Tasks json.RawMessage `json:"tasks"`
|
||||||
|
// Source string `json:"source"`
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err := c.ShouldBind(&workOrderValue)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// relatedPerson, err := json.Marshal([]int{c.GetInt("userId")})
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 创建工单数据
|
||||||
|
// tx := connection.DB.Self.Begin()
|
||||||
|
// var workOrderInfo = workOrder.Info{
|
||||||
|
// Title: workOrderValue.Title,
|
||||||
|
// Process: workOrderValue.Process,
|
||||||
|
// Classify: workOrderValue.Classify,
|
||||||
|
// State: workOrderValue.State,
|
||||||
|
// RelatedPerson: relatedPerson,
|
||||||
|
// Creator: c.GetInt("userId"),
|
||||||
|
// }
|
||||||
|
// err = tx.Create(&workOrderInfo).Error
|
||||||
|
// if err != nil {
|
||||||
|
// tx.Rollback()
|
||||||
|
// Response(c, code.CreateError, nil, fmt.Sprintf("创建工单失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 创建工单模版关联数据
|
||||||
|
// for i := 0; i < len(workOrderValue.Tpls["form_structure"]); i++ {
|
||||||
|
// formDataJson, err := json.Marshal(workOrderValue.Tpls["form_data"][i])
|
||||||
|
// if err != nil {
|
||||||
|
// tx.Rollback()
|
||||||
|
// Response(c, code.InternalServerError, nil, fmt.Sprintf("生成json字符串错误,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// formStructureJson, err := json.Marshal(workOrderValue.Tpls["form_structure"][i])
|
||||||
|
// if err != nil {
|
||||||
|
// tx.Rollback()
|
||||||
|
// Response(c, code.InternalServerError, nil, fmt.Sprintf("生成json字符串错误,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// formData := workOrder.TplData{
|
||||||
|
// WorkOrder: workOrderInfo.Id,
|
||||||
|
// FormStructure: formStructureJson,
|
||||||
|
// FormData: formDataJson,
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err = tx.Create(&formData).Error
|
||||||
|
// if err != nil {
|
||||||
|
// tx.Rollback()
|
||||||
|
// Response(c, code.CreateError, nil, fmt.Sprintf("创建工单模版关联数据失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 获取当前用户信息
|
||||||
|
// var userInfo user.Info
|
||||||
|
// err = tx.Model(&user.Info{}).Where("id = ?", c.GetInt("userId")).Find(&userInfo).Error
|
||||||
|
// if err != nil {
|
||||||
|
// tx.Rollback()
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询用户信息失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// nameValue := userInfo.Nickname
|
||||||
|
// if nameValue == "" {
|
||||||
|
// nameValue = userInfo.Username
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 创建历史记录
|
||||||
|
// var stateList []map[string]interface{}
|
||||||
|
// err = json.Unmarshal(workOrderInfo.State, &stateList)
|
||||||
|
// if err != nil {
|
||||||
|
// tx.Rollback()
|
||||||
|
// Response(c, code.InternalServerError, nil, fmt.Sprintf("Json序列化失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// err = tx.Create(&workOrder.CirculationHistory{
|
||||||
|
// Title: workOrderValue.Title,
|
||||||
|
// WorkOrder: workOrderInfo.Id,
|
||||||
|
// State: workOrderValue.SourceState,
|
||||||
|
// Source: workOrderValue.Source,
|
||||||
|
// Target: stateList[0]["id"].(string),
|
||||||
|
// Circulation: "新建",
|
||||||
|
// Processor: nameValue,
|
||||||
|
// ProcessorId: userInfo.Id,
|
||||||
|
// }).Error
|
||||||
|
// if err != nil {
|
||||||
|
// tx.Rollback()
|
||||||
|
// err = fmt.Errorf("新建历史记录失败,%v", err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// tx.Commit()
|
||||||
|
//
|
||||||
|
// // 执行任务
|
||||||
|
// var taskList []string
|
||||||
|
// err = json.Unmarshal(workOrderValue.Tasks, &taskList)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.InternalServerError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// go service.ExecTask(taskList)
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 工单列表
|
||||||
|
//func WorkOrderList(c *gin.Context) {
|
||||||
|
// /*
|
||||||
|
// 1. 待办工单
|
||||||
|
// 2. 我创建的
|
||||||
|
// 3. 我相关的
|
||||||
|
// 4. 所有工单
|
||||||
|
// */
|
||||||
|
//
|
||||||
|
// var (
|
||||||
|
// result interface{}
|
||||||
|
// err error
|
||||||
|
// classifyInt int
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// classify := c.DefaultQuery("classify", "0")
|
||||||
|
// if classify == "" {
|
||||||
|
// Response(c, code.ParamError, nil, "参数错误,请确认classify是否传递")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// classifyInt, _ = strconv.Atoi(classify)
|
||||||
|
// result, err = service.WorkOrderList(c, classifyInt)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询工单数据失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, result, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 处理工单
|
||||||
|
//func ProcessWorkOrder(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// userAuthority bool
|
||||||
|
// handle service.Handle
|
||||||
|
// params struct {
|
||||||
|
// Tasks []string
|
||||||
|
// TargetState string `json:"target_state"` // 目标状态
|
||||||
|
// SourceState string `json:"source_state"` // 源状态
|
||||||
|
// WorkOrderId int `json:"work_order_id"` // 工单ID
|
||||||
|
// Circulation string `json:"circulation"` // 流转ID
|
||||||
|
// FlowProperties int `json:"flow_properties"` // 流转类型 0 拒绝,1 同意,2 其他
|
||||||
|
// }
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// err = c.ShouldBind(¶ms)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 处理工单
|
||||||
|
// userAuthority, err = service.JudgeUserAuthority(c, params.WorkOrderId, params.SourceState)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.InternalServerError, nil, fmt.Sprintf("判断用户是否有权限失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// if !userAuthority {
|
||||||
|
// err = errors.New("当前用户没有权限进行此操作")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// err = handle.HandleWorkOrder(
|
||||||
|
// c,
|
||||||
|
// params.WorkOrderId, // 工单ID
|
||||||
|
// params.Tasks, // 任务列表
|
||||||
|
// params.TargetState, // 目标节点
|
||||||
|
// params.SourceState, // 源节点
|
||||||
|
// params.Circulation, // 流转标题
|
||||||
|
// params.FlowProperties, // 流转属性
|
||||||
|
// )
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.InternalServerError, nil, fmt.Sprintf("处理工单失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 结束工单
|
||||||
|
//func UnityWorkOrder(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// workOrderId string
|
||||||
|
// workOrderInfo workOrder.Info
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// workOrderId = c.DefaultQuery("work_oroder_id", "")
|
||||||
|
// if workOrderId == "" {
|
||||||
|
// Response(c, code.InternalServerError, nil, "参数不正确,work_oroder_id")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// tx := connection.DB.Self.Begin()
|
||||||
|
//
|
||||||
|
// // 查询工单信息
|
||||||
|
// err = connection.DB.Self.Model(&workOrderInfo).
|
||||||
|
// Where("id = ?", workOrderId).
|
||||||
|
// Find(&workOrderInfo).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询工单失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
// if workOrderInfo.IsEnd == 1 {
|
||||||
|
// Response(c, code.UpdateError, nil, "工单已结束")
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 更新工单状态
|
||||||
|
// err = tx.Model(&workOrder.Info{}).
|
||||||
|
// Where("id = ?", workOrderId).
|
||||||
|
// Update("is_end", 1).
|
||||||
|
// Error
|
||||||
|
// if err != nil {
|
||||||
|
// tx.Rollback()
|
||||||
|
// Response(c, code.UpdateError, nil, fmt.Sprintf("结束工单失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 写入历史
|
||||||
|
// tx.Create(&workOrder.CirculationHistory{
|
||||||
|
// Title: workOrderInfo.Title,
|
||||||
|
// WorkOrder: workOrderInfo.Id,
|
||||||
|
// State: "结束工单",
|
||||||
|
// Circulation: "结束",
|
||||||
|
// Processor: c.GetString("nickname"),
|
||||||
|
// ProcessorId: c.GetInt("userId"),
|
||||||
|
// Remarks: "手动结束工单。",
|
||||||
|
// })
|
||||||
|
//
|
||||||
|
// tx.Commit()
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//// 转交工单
|
||||||
|
//func InversionWorkOrder(c *gin.Context) {
|
||||||
|
// var (
|
||||||
|
// err error
|
||||||
|
// workOrderInfo workOrder.Info
|
||||||
|
// stateList []map[string]interface{}
|
||||||
|
// stateValue []byte
|
||||||
|
// currentState map[string]interface{}
|
||||||
|
// userInfo user.Info
|
||||||
|
// params struct {
|
||||||
|
// WorkOrderId int `json:"work_order_id"`
|
||||||
|
// NodeId string `json:"node_id"`
|
||||||
|
// UserId int `json:"user_id"`
|
||||||
|
// Remarks string `json:"remarks"`
|
||||||
|
// }
|
||||||
|
// )
|
||||||
|
//
|
||||||
|
// err = c.ShouldBind(¶ms)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.BindError, nil, err.Error())
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 查询工单信息
|
||||||
|
// err = connection.DB.Self.Model(&workOrderInfo).
|
||||||
|
// Where("id = ?", params.WorkOrderId).
|
||||||
|
// Find(&workOrderInfo).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询工单信息失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 序列化节点数据
|
||||||
|
// err = json.Unmarshal(workOrderInfo.State, &stateList)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.InternalServerError, nil, fmt.Sprintf("节点数据反序列化失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// for _, s := range stateList {
|
||||||
|
// if s["id"].(string) == params.NodeId {
|
||||||
|
// s["processor"] = []interface{}{params.UserId}
|
||||||
|
// s["process_method"] = "person"
|
||||||
|
// currentState = s
|
||||||
|
// break
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// stateValue, err = json.Marshal(stateList)
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.InternalServerError, nil, fmt.Sprintf("节点数据序列化失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// tx := connection.DB.Self.Begin()
|
||||||
|
//
|
||||||
|
// // 更新数据
|
||||||
|
// err = tx.Model(&workOrder.Info{}).
|
||||||
|
// Where("id = ?", params.WorkOrderId).
|
||||||
|
// Update("state", stateValue).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.UpdateError, nil, fmt.Sprintf("更新节点信息失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 查询用户信息
|
||||||
|
// err = connection.DB.Self.Model(&user.Info{}).
|
||||||
|
// Where("id = ?", params.UserId).
|
||||||
|
// Find(&userInfo).Error
|
||||||
|
// if err != nil {
|
||||||
|
// Response(c, code.SelectError, nil, fmt.Sprintf("查询用户信息失败,%v", err.Error()))
|
||||||
|
// return
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// // 添加转交历史
|
||||||
|
// tx.Create(&workOrder.CirculationHistory{
|
||||||
|
// Title: workOrderInfo.Title,
|
||||||
|
// WorkOrder: workOrderInfo.Id,
|
||||||
|
// State: currentState["label"].(string),
|
||||||
|
// Circulation: "转交",
|
||||||
|
// Processor: c.GetString("nickname"),
|
||||||
|
// ProcessorId: c.GetInt("userId"),
|
||||||
|
// Remarks: fmt.Sprintf("此阶段负责人已转交给《%v》", userInfo.Nickname),
|
||||||
|
// })
|
||||||
|
//
|
||||||
|
// tx.Commit()
|
||||||
|
//
|
||||||
|
// Response(c, nil, nil, "")
|
||||||
|
//}
|
@ -4,7 +4,6 @@ import (
|
|||||||
"ferry/models/system"
|
"ferry/models/system"
|
||||||
"ferry/tools"
|
"ferry/tools"
|
||||||
"ferry/tools/app"
|
"ferry/tools/app"
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/gin-gonic/gin/binding"
|
"github.com/gin-gonic/gin/binding"
|
||||||
@ -100,9 +99,6 @@ func UpdateRole(c *gin.Context) {
|
|||||||
var data system.SysRole
|
var data system.SysRole
|
||||||
data.UpdateBy = tools.GetUserIdStr(c)
|
data.UpdateBy = tools.GetUserIdStr(c)
|
||||||
err := c.Bind(&data)
|
err := c.Bind(&data)
|
||||||
fmt.Println("--------------------------")
|
|
||||||
fmt.Println(err)
|
|
||||||
fmt.Println("--------------------------")
|
|
||||||
tools.HasError(err, "数据解析失败", -1)
|
tools.HasError(err, "数据解析失败", -1)
|
||||||
result, err := data.Update(data.RoleId)
|
result, err := data.Update(data.RoleId)
|
||||||
tools.HasError(err, "", -1)
|
tools.HasError(err, "", -1)
|
||||||
|
@ -4,7 +4,6 @@ import (
|
|||||||
"ferry/database"
|
"ferry/database"
|
||||||
"ferry/global/orm"
|
"ferry/global/orm"
|
||||||
"ferry/models/gorm"
|
"ferry/models/gorm"
|
||||||
"ferry/models/system"
|
|
||||||
"ferry/tools"
|
"ferry/tools"
|
||||||
config2 "ferry/tools/config"
|
config2 "ferry/tools/config"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -44,9 +43,9 @@ func run() {
|
|||||||
_ = migrateModel()
|
_ = migrateModel()
|
||||||
log.Println("数据库结构初始化成功!")
|
log.Println("数据库结构初始化成功!")
|
||||||
//5. 数据初始化完成
|
//5. 数据初始化完成
|
||||||
if err := system.InitDb(); err != nil {
|
//if err := system.InitDb(); err != nil {
|
||||||
log.Fatal("数据库基础数据初始化失败!")
|
// log.Fatal("数据库基础数据初始化失败!")
|
||||||
}
|
//}
|
||||||
|
|
||||||
usage = `数据库基础数据初始化成功`
|
usage = `数据库基础数据初始化成功`
|
||||||
fmt.Println(usage)
|
fmt.Println(usage)
|
||||||
|
16
go.mod
16
go.mod
@ -3,18 +3,19 @@ module ferry
|
|||||||
go 1.14
|
go 1.14
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/RichardKnop/machinery v1.8.8
|
||||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
|
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
|
||||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
|
||||||
github.com/casbin/casbin/v2 v2.2.1
|
github.com/casbin/casbin/v2 v2.2.1
|
||||||
github.com/casbin/gorm-adapter/v2 v2.0.3
|
github.com/casbin/gorm-adapter/v2 v2.0.3
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||||
github.com/gin-gonic/gin v1.4.0
|
github.com/gin-contrib/cors v1.3.1
|
||||||
|
github.com/gin-gonic/gin v1.5.0
|
||||||
github.com/go-kit/kit v0.8.0
|
github.com/go-kit/kit v0.8.0
|
||||||
github.com/go-ole/go-ole v1.2.4 // indirect
|
github.com/go-ole/go-ole v1.2.4 // indirect
|
||||||
github.com/go-openapi/spec v0.19.7 // indirect
|
github.com/go-openapi/spec v0.19.7 // indirect
|
||||||
github.com/go-openapi/swag v0.19.8 // indirect
|
github.com/go-openapi/swag v0.19.8 // indirect
|
||||||
github.com/go-sql-driver/mysql v1.4.1
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
github.com/golang/protobuf v1.3.2 // indirect
|
|
||||||
github.com/google/uuid v1.1.1
|
github.com/google/uuid v1.1.1
|
||||||
github.com/jinzhu/gorm v1.9.10
|
github.com/jinzhu/gorm v1.9.10
|
||||||
github.com/json-iterator/go v1.1.8 // indirect
|
github.com/json-iterator/go v1.1.8 // indirect
|
||||||
@ -22,20 +23,17 @@ require (
|
|||||||
github.com/mattn/go-isatty v0.0.10 // indirect
|
github.com/mattn/go-isatty v0.0.10 // indirect
|
||||||
github.com/mojocn/base64Captcha v1.3.1
|
github.com/mojocn/base64Captcha v1.3.1
|
||||||
github.com/mssola/user_agent v0.5.1
|
github.com/mssola/user_agent v0.5.1
|
||||||
github.com/pkg/errors v0.8.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/robfig/cron/v3 v3.0.0
|
github.com/robfig/cron/v3 v3.0.0
|
||||||
github.com/satori/go.uuid v1.2.0
|
github.com/satori/go.uuid v1.2.0
|
||||||
github.com/shirou/gopsutil v2.20.3+incompatible
|
github.com/shirou/gopsutil v2.20.3+incompatible
|
||||||
github.com/sirupsen/logrus v1.2.0
|
github.com/sirupsen/logrus v1.4.2
|
||||||
github.com/spf13/cobra v1.0.0
|
github.com/spf13/cobra v1.0.0
|
||||||
github.com/spf13/viper v1.6.2
|
github.com/spf13/viper v1.6.2
|
||||||
github.com/swaggo/gin-swagger v1.2.0
|
github.com/swaggo/gin-swagger v1.2.0
|
||||||
github.com/swaggo/swag v1.6.5
|
github.com/swaggo/swag v1.6.5
|
||||||
github.com/ugorji/go v1.1.7 // indirect
|
github.com/ugorji/go v1.1.7 // indirect
|
||||||
github.com/unrolled/secure v1.0.8
|
github.com/unrolled/secure v1.0.8
|
||||||
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
|
|
||||||
golang.org/x/tools v0.0.0-20200402223321-bcf690261a44 // indirect
|
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
|
||||||
gopkg.in/yaml.v2 v2.2.8 // indirect
|
|
||||||
)
|
)
|
||||||
|
394
go.sum
394
go.sum
@ -2,8 +2,41 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
|
|||||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||||
cloud.google.com/go v0.37.4 h1:glPeL3BQJsbF6aIIYfZizMwc5LTYz250bDMjttbBGAU=
|
cloud.google.com/go v0.37.4 h1:glPeL3BQJsbF6aIIYfZizMwc5LTYz250bDMjttbBGAU=
|
||||||
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
|
cloud.google.com/go v0.37.4/go.mod h1:NHPJ89PdicEuT9hdPXMROBD91xc5uRDxsMtSB16k7hw=
|
||||||
|
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
||||||
|
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
|
||||||
|
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
|
||||||
|
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
|
||||||
|
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
|
||||||
|
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
|
||||||
|
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
|
||||||
|
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
|
||||||
|
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
|
||||||
|
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
|
||||||
|
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
|
||||||
|
cloud.google.com/go v0.60.0 h1:R+tDlceO7Ss+zyvtsdhTxacDyZ1k99xwskQ4FT7ruoM=
|
||||||
|
cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU=
|
||||||
|
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
|
||||||
|
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
|
||||||
|
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
|
||||||
|
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
|
||||||
|
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
|
||||||
|
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
|
||||||
|
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
|
||||||
|
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
|
||||||
|
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
|
||||||
|
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
|
||||||
|
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
|
||||||
|
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
|
||||||
|
cloud.google.com/go/pubsub v1.4.0 h1:76oR7VBOkL7ivoIrFKyW0k7YDCRelrlxktIzQiIUGgg=
|
||||||
|
cloud.google.com/go/pubsub v1.4.0/go.mod h1:LFrqilwgdw4X2cJS9ALgzYmMu+ULyrUN6IHV3CPK4TM=
|
||||||
|
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
|
||||||
|
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
|
||||||
|
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
|
||||||
|
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
||||||
|
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
|
||||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||||
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
|
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw=
|
||||||
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
|
||||||
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
|
github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc=
|
||||||
@ -15,6 +48,12 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN
|
|||||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||||
|
github.com/RichardKnop/logging v0.0.0-20190827224416-1a693bdd4fae h1:DcFpTQBYQ9Ct2d6sC7ol0/ynxc2pO1cpGUM+f4t5adg=
|
||||||
|
github.com/RichardKnop/logging v0.0.0-20190827224416-1a693bdd4fae/go.mod h1:rJJ84PyA/Wlmw1hO+xTzV2wsSUon6J5ktg0g8BF2PuU=
|
||||||
|
github.com/RichardKnop/machinery v1.8.8 h1:9T6ACnBT083vlfhhtZ2oGEe7E+vKuJ72qPVkfGw/c7k=
|
||||||
|
github.com/RichardKnop/machinery v1.8.8/go.mod h1:oZSPaqhblRMsR6WEhk8TSnW6Z6SuKjM+JxyS1FDXGoc=
|
||||||
|
github.com/RichardKnop/redsync v1.2.0 h1:gK35hR3zZkQigHKm8wOGb9MpJ9BsrW6MzxezwjTcHP0=
|
||||||
|
github.com/RichardKnop/redsync v1.2.0/go.mod h1:9b8nBGAX3bE2uCfJGSnsDvF23mKyHTZzmvmj5FH3Tp0=
|
||||||
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
|
||||||
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
|
||||||
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
|
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
|
||||||
@ -26,15 +65,24 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
|
|||||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||||
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
|
github.com/aws/aws-sdk-go v1.32.12 h1:l/djCeLI4ggBFWLlYUGTqkHraoLnVMubNlLXPdEtoYc=
|
||||||
|
github.com/aws/aws-sdk-go v1.32.12/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||||
|
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b h1:L/QXpzIa3pOvUGt1D1lA5KjYhPBAN/3iWdP7xeFS9F0=
|
||||||
|
github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b/go.mod h1:H0wQNHz2YrLsuXOZozoeDmnHXkNCRmMW0gwFWDfEZDA=
|
||||||
github.com/casbin/casbin/v2 v2.0.0/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
github.com/casbin/casbin/v2 v2.0.0/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
||||||
github.com/casbin/casbin/v2 v2.2.1 h1:ijrSMfBfbQlDc4LnMTGtGYWmhKuuR6RLSQRj8vHrMzc=
|
github.com/casbin/casbin/v2 v2.2.1 h1:ijrSMfBfbQlDc4LnMTGtGYWmhKuuR6RLSQRj8vHrMzc=
|
||||||
github.com/casbin/casbin/v2 v2.2.1/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
github.com/casbin/casbin/v2 v2.2.1/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ=
|
||||||
github.com/casbin/gorm-adapter/v2 v2.0.3 h1:m8o/APMGkm5Gb8RLHU51F/+9ODUyGgPmC+EEzRJsPr0=
|
github.com/casbin/gorm-adapter/v2 v2.0.3 h1:m8o/APMGkm5Gb8RLHU51F/+9ODUyGgPmC+EEzRJsPr0=
|
||||||
github.com/casbin/gorm-adapter/v2 v2.0.3/go.mod h1:pnulk7RNHbFsldTBruui8jqUhq91sLHtub8LJCJSZg8=
|
github.com/casbin/gorm-adapter/v2 v2.0.3/go.mod h1:pnulk7RNHbFsldTBruui8jqUhq91sLHtub8LJCJSZg8=
|
||||||
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
|
||||||
|
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||||
|
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||||
|
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||||
|
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||||
@ -53,12 +101,18 @@ github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8
|
|||||||
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||||
|
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||||
|
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5 h1:Yzb9+7DPaBjB8zlTR87/ElzFsnQfuHnVUVqpZZIcV5Y=
|
||||||
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
|
||||||
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
|
||||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||||
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
|
||||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
|
github.com/gin-contrib/cors v1.3.1 h1:doAsuITavI4IOcd0Y19U4B+O0dNWihRyX//nn4sEmgA=
|
||||||
|
github.com/gin-contrib/cors v1.3.1/go.mod h1:jjEJ4268OPZUcU7k9Pm653S7lXUGcqMADzFA61xsmDk=
|
||||||
github.com/gin-contrib/gzip v0.0.1 h1:ezvKOL6jH+jlzdHNE4h9h8q8uMpDQjyl0NN0Jd7jozc=
|
github.com/gin-contrib/gzip v0.0.1 h1:ezvKOL6jH+jlzdHNE4h9h8q8uMpDQjyl0NN0Jd7jozc=
|
||||||
github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w=
|
github.com/gin-contrib/gzip v0.0.1/go.mod h1:fGBJBCdt6qCZuCAOwWuFhBB4OOq9EFqlo5dEaFhhu5w=
|
||||||
github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
|
github.com/gin-contrib/sse v0.0.0-20170109093832-22d885f9ecc7/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s=
|
||||||
@ -69,6 +123,11 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm
|
|||||||
github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y=
|
github.com/gin-gonic/gin v1.3.0/go.mod h1:7cKuhb5qV2ggCFctp2fJQ+ErvciLZrIeoOSOm6mUr7Y=
|
||||||
github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ=
|
github.com/gin-gonic/gin v1.4.0 h1:3tMoCCfM7ppqsR0ptz/wi1impNpT7/9wQtMZ8lr1mCQ=
|
||||||
github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
|
github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM=
|
||||||
|
github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc=
|
||||||
|
github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do=
|
||||||
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
|
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
|
||||||
github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
|
github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
|
||||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||||
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
|
||||||
@ -102,9 +161,42 @@ github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tF
|
|||||||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||||
github.com/go-openapi/swag v0.19.8 h1:vfK6jLhs7OI4tAXkvkooviaE1JEPcw3mutyegLHHjmk=
|
github.com/go-openapi/swag v0.19.8 h1:vfK6jLhs7OI4tAXkvkooviaE1JEPcw3mutyegLHHjmk=
|
||||||
github.com/go-openapi/swag v0.19.8/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
|
github.com/go-openapi/swag v0.19.8/go.mod h1:ao+8BpOPyKdpQz3AOJfbeEVpLmWAvlT1IfTe5McPyhY=
|
||||||
|
github.com/go-playground/locales v0.12.1 h1:2FITxuFt/xuCNP1Acdhv62OzaCiviiE4kotfhkmOqEc=
|
||||||
|
github.com/go-playground/locales v0.12.1/go.mod h1:IUMDtCfWo/w/mtMfIE/IG2K+Ey3ygWanZIBtBW0W2TM=
|
||||||
|
github.com/go-playground/universal-translator v0.16.0 h1:X++omBR/4cE2MNg91AoC3rmGrCjJ8eAeUP/K/EKx4DM=
|
||||||
|
github.com/go-playground/universal-translator v0.16.0/go.mod h1:1AnU7NaIRDWWzGEKwgtJRd2xk99HeFyHw3yid4rvQIY=
|
||||||
|
github.com/go-redis/redis v6.15.8+incompatible h1:BKZuG6mCnRj5AOaWJXoCgf6rqTYnYJLe4en2hxT7r9o=
|
||||||
|
github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
|
||||||
github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
|
github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=
|
||||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||||
|
github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs=
|
||||||
|
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
|
||||||
|
github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
||||||
|
github.com/gobuffalo/attrs v0.0.0-20190224210810-a9411de4debd/go.mod h1:4duuawTqi2wkkpB4ePgWMaai6/Kc6WEz83bhFwpHzj0=
|
||||||
|
github.com/gobuffalo/depgen v0.0.0-20190329151759-d478694a28d3/go.mod h1:3STtPUQYuzV0gBVOY3vy6CfMm/ljR4pABfrTeHNLHUY=
|
||||||
|
github.com/gobuffalo/depgen v0.1.0/go.mod h1:+ifsuy7fhi15RWncXQQKjWS9JPkdah5sZvtHc2RXGlg=
|
||||||
|
github.com/gobuffalo/envy v1.6.15/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
|
||||||
|
github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
|
||||||
|
github.com/gobuffalo/flect v0.1.0/go.mod h1:d2ehjJqGOH/Kjqcoz+F7jHTBbmDb38yXA598Hb50EGs=
|
||||||
|
github.com/gobuffalo/flect v0.1.1/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
|
||||||
|
github.com/gobuffalo/flect v0.1.3/go.mod h1:8JCgGVbRjJhVgD6399mQr4fx5rRfGKVzFjbj6RE/9UI=
|
||||||
|
github.com/gobuffalo/genny v0.0.0-20190329151137-27723ad26ef9/go.mod h1:rWs4Z12d1Zbf19rlsn0nurr75KqhYp52EAGGxTbBhNk=
|
||||||
|
github.com/gobuffalo/genny v0.0.0-20190403191548-3ca520ef0d9e/go.mod h1:80lIj3kVJWwOrXWWMRzzdhW3DsrdjILVil/SFKBzF28=
|
||||||
|
github.com/gobuffalo/genny v0.1.0/go.mod h1:XidbUqzak3lHdS//TPu2OgiFB+51Ur5f7CSnXZ/JDvo=
|
||||||
|
github.com/gobuffalo/genny v0.1.1/go.mod h1:5TExbEyY48pfunL4QSXxlDOmdsD44RRq4mVZ0Ex28Xk=
|
||||||
|
github.com/gobuffalo/gitgen v0.0.0-20190315122116-cc086187d211/go.mod h1:vEHJk/E9DmhejeLeNt7UVvlSGv3ziL+djtTr3yyzcOw=
|
||||||
|
github.com/gobuffalo/gogen v0.0.0-20190315121717-8f38393713f5/go.mod h1:V9QVDIxsgKNZs6L2IYiGR8datgMhB577vzTDqypH360=
|
||||||
|
github.com/gobuffalo/gogen v0.1.0/go.mod h1:8NTelM5qd8RZ15VjQTFkAW6qOMx5wBbW4dSCS3BY8gg=
|
||||||
|
github.com/gobuffalo/gogen v0.1.1/go.mod h1:y8iBtmHmGc4qa3urIyo1shvOD8JftTtfcKi+71xfDNE=
|
||||||
|
github.com/gobuffalo/logger v0.0.0-20190315122211-86e12af44bc2/go.mod h1:QdxcLw541hSGtBnhUc4gaNIXRjiDppFGaDqzbrBd3v8=
|
||||||
|
github.com/gobuffalo/mapi v1.0.1/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
|
||||||
|
github.com/gobuffalo/mapi v1.0.2/go.mod h1:4VAGh89y6rVOvm5A8fKFxYG+wIW6LO1FMTG9hnKStFc=
|
||||||
|
github.com/gobuffalo/packd v0.0.0-20190315124812-a385830c7fc0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
|
||||||
|
github.com/gobuffalo/packd v0.1.0/go.mod h1:M2Juc+hhDXf/PnmBANFCqx4DM3wRbgDvnVWeG2RIxq4=
|
||||||
|
github.com/gobuffalo/packr/v2 v2.0.9/go.mod h1:emmyGweYTm6Kdper+iywB6YK5YzuKchGtJQZ0Odn4pQ=
|
||||||
|
github.com/gobuffalo/packr/v2 v2.2.0/go.mod h1:CaAwI0GPIAv+5wKLtv8Afwl+Cm78K/I/VCm/3ptBN+0=
|
||||||
|
github.com/gobuffalo/syncx v0.0.0-20190224160051-33c29581e754/go.mod h1:HhnNqWY95UYwwW3uSASeV7vtgYkT2t16hJgV3AEPUpw=
|
||||||
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
|
||||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||||
@ -112,25 +204,63 @@ github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 h1:DACJavvAHhabrF0
|
|||||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
|
||||||
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
|
github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
|
||||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
|
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
|
||||||
|
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||||
|
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||||
|
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
|
||||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
||||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
||||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||||
|
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
|
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||||
|
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||||
|
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||||
|
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||||
|
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||||
|
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
|
||||||
|
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
|
||||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
|
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||||
|
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||||
|
github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0=
|
||||||
|
github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4=
|
||||||
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||||
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
|
||||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||||
|
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
|
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||||
|
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
|
github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
|
||||||
|
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
||||||
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
||||||
|
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
|
||||||
|
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
|
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
|
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
|
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
|
github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
|
||||||
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY=
|
||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
|
||||||
|
github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
|
||||||
|
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||||
@ -140,10 +270,12 @@ github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmg
|
|||||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||||
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
|
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||||
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
|
||||||
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
|
||||||
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
|
||||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||||
|
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
github.com/jinzhu/gorm v1.9.10 h1:HvrsqdhCW78xpJF67g1hMxS6eCToo9PZH4LDB8WKPac=
|
github.com/jinzhu/gorm v1.9.10 h1:HvrsqdhCW78xpJF67g1hMxS6eCToo9PZH4LDB8WKPac=
|
||||||
@ -152,21 +284,35 @@ github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD
|
|||||||
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
|
||||||
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
|
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
|
||||||
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
|
||||||
|
github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
|
||||||
|
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
|
||||||
|
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
|
||||||
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
|
||||||
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
|
||||||
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
|
github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs=
|
||||||
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
|
||||||
|
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
|
github.com/json-iterator/go v1.1.8 h1:QiWkFLKq0T7mpzwOTu6BzNDbfTE8OLrYhVKYMLF46Ok=
|
||||||
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
|
||||||
|
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
|
||||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||||
|
github.com/karrick/godirwalk v1.8.0/go.mod h1:H5KPZjojv4lE+QYImBI8xVtrBRgYrIVsaRPx4tDPEn4=
|
||||||
|
github.com/karrick/godirwalk v1.10.3/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
|
||||||
|
github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dvMUtDTo2cv8=
|
||||||
|
github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
|
||||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||||
|
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
||||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||||
|
github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||||
|
github.com/klauspost/compress v1.10.10 h1:a/y8CglcM7gLGYmlbP/stPE5sR3hbhFRUjCBfd/0B3I=
|
||||||
|
github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
|
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
|
||||||
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||||
@ -174,6 +320,8 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|||||||
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
|
||||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
|
github.com/leodido/go-urn v1.1.0 h1:Sm1gr51B1kKyfD2BlRcLSiEkffoG96g6TPv6eRoEiB8=
|
||||||
|
github.com/leodido/go-urn v1.1.0/go.mod h1:+cyI34gQWZcE1eQU7NVgKkkzdXDQHr1dBMtdAPozLkw=
|
||||||
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
github.com/lib/pq v1.1.1 h1:sJZmqHoEaY7f+NPP8pgLB/WxulyR3fewgCM2qaSlBb4=
|
||||||
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||||
@ -186,11 +334,14 @@ github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e h1:hB2xlXdHp/pmPZq
|
|||||||
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
|
||||||
github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8=
|
github.com/mailru/easyjson v0.7.1 h1:mdxE1MF9o53iCb2Ghj1VfWvh7ZOwHpnVG/xwXrV90U8=
|
||||||
github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
github.com/mailru/easyjson v0.7.1/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
|
||||||
|
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
|
||||||
|
github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0=
|
||||||
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||||
github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc=
|
github.com/mattn/go-isatty v0.0.7 h1:UvyT9uN+3r7yLEYSlJsbQGdsaB/a0DlgWP3pql6iwOc=
|
||||||
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
|
github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
|
||||||
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
|
||||||
|
github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ=
|
||||||
github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10=
|
github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10=
|
||||||
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
|
github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
|
||||||
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
|
github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=
|
||||||
@ -208,6 +359,7 @@ github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9
|
|||||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
github.com/mojocn/base64Captcha v1.3.1 h1:2Wbkt8Oc8qjmNJ5GyOfSo4tgVQPsbKMftqASnq8GlT0=
|
github.com/mojocn/base64Captcha v1.3.1 h1:2Wbkt8Oc8qjmNJ5GyOfSo4tgVQPsbKMftqASnq8GlT0=
|
||||||
github.com/mojocn/base64Captcha v1.3.1/go.mod h1:wAQCKEc5bDujxKRmbT6/vTnTt5CjStQ8bRfPWUuz/iY=
|
github.com/mojocn/base64Captcha v1.3.1/go.mod h1:wAQCKEc5bDujxKRmbT6/vTnTt5CjStQ8bRfPWUuz/iY=
|
||||||
|
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
|
||||||
github.com/mssola/user_agent v0.5.1 h1:sJUCUozh+j7c0dR2zMIUX5aJjoY/TNo/gXiNujoH5oY=
|
github.com/mssola/user_agent v0.5.1 h1:sJUCUozh+j7c0dR2zMIUX5aJjoY/TNo/gXiNujoH5oY=
|
||||||
github.com/mssola/user_agent v0.5.1/go.mod h1:TTPno8LPY3wAIEKRpAtkdMT0f8SE24pLRGPahjCH4uw=
|
github.com/mssola/user_agent v0.5.1/go.mod h1:TTPno8LPY3wAIEKRpAtkdMT0f8SE24pLRGPahjCH4uw=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
@ -215,15 +367,23 @@ github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn
|
|||||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
|
github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs=
|
||||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
|
github.com/onsi/ginkgo v1.10.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||||
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
|
github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU=
|
||||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
|
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
|
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
|
||||||
|
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw=
|
||||||
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
|
||||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
|
github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg=
|
||||||
|
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
|
||||||
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
|
||||||
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||||
@ -232,6 +392,7 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf
|
|||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||||
@ -243,6 +404,9 @@ github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqn
|
|||||||
github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
|
github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
|
||||||
github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||||
|
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
|
github.com/rogpeppe/go-internal v1.2.2/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
|
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
|
||||||
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||||
@ -251,6 +415,10 @@ github.com/shirou/gopsutil v2.20.3+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu
|
|||||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=
|
github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=
|
||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||||
|
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||||
|
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||||
|
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
|
||||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||||
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
|
||||||
@ -261,6 +429,7 @@ github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
|
|||||||
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
|
||||||
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
|
||||||
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||||
|
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||||
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
github.com/spf13/cobra v1.0.0 h1:6m/oheQuQ13N9ks4hubMG6BnvwOeaJrqSPLahSnczz8=
|
||||||
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||||
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
|
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
|
||||||
@ -270,6 +439,8 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
|
|||||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||||
github.com/spf13/viper v1.6.2 h1:7aKfF+e8/k68gda3LOjo5RxiUqddoFxVq4BKBPrxk5E=
|
github.com/spf13/viper v1.6.2 h1:7aKfF+e8/k68gda3LOjo5RxiUqddoFxVq4BKBPrxk5E=
|
||||||
github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k=
|
github.com/spf13/viper v1.6.2/go.mod h1:t3iDnF5Jlj76alVNuyFBk5oUMCvsrkbvZK0WQdfDi5k=
|
||||||
|
github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo=
|
||||||
|
github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
|
||||||
@ -279,6 +450,8 @@ github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0
|
|||||||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
|
||||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||||
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
|
github.com/stvp/tempredis v0.0.0-20181119212430-b82af8480203/go.mod h1:oqN97ltKNihBbwlX8dLpwxCl3+HnXKV/R0e+sRLd9C8=
|
||||||
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
|
||||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||||
github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E=
|
github.com/swaggo/files v0.0.0-20190704085106-630677cd5c14/go.mod h1:gxQT6pBGRuIGunNf/+tSOB5OHvguWi8Tbt82WOkf35E=
|
||||||
@ -288,6 +461,7 @@ github.com/swaggo/swag v1.5.1 h1:2Agm8I4K5qb00620mHq0VJ05/KT4FtmALPIcQR9lEZM=
|
|||||||
github.com/swaggo/swag v1.5.1/go.mod h1:1Bl9F/ZBpVWh22nY0zmYyASPO1lI/zIwRDrpZU+tv8Y=
|
github.com/swaggo/swag v1.5.1/go.mod h1:1Bl9F/ZBpVWh22nY0zmYyASPO1lI/zIwRDrpZU+tv8Y=
|
||||||
github.com/swaggo/swag v1.6.5 h1:2C+t+xyK6p1sujqncYO/VnMvPZcBJjNdKKyxbOdAW8o=
|
github.com/swaggo/swag v1.6.5 h1:2C+t+xyK6p1sujqncYO/VnMvPZcBJjNdKKyxbOdAW8o=
|
||||||
github.com/swaggo/swag v1.6.5/go.mod h1:Y7ZLSS0d0DdxhWGVhQdu+Bu1QhaF5k0RD7FKdiAykeY=
|
github.com/swaggo/swag v1.6.5/go.mod h1:Y7ZLSS0d0DdxhWGVhQdu+Bu1QhaF5k0RD7FKdiAykeY=
|
||||||
|
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
|
||||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||||
github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw=
|
github.com/ugorji/go v1.1.4 h1:j4s+tAvLfL3bZyefP2SEWmhBzmuIlH/eqNuPdFPgngw=
|
||||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||||
@ -304,13 +478,28 @@ github.com/unrolled/secure v1.0.8 h1:JaMvKbe4CRt8oyxVXn+xY+6jlqd7pyJNSVkmsBxxQsM
|
|||||||
github.com/unrolled/secure v1.0.8/go.mod h1:fO+mEan+FLB0CdEnHf6Q4ZZVNqG+5fuLFnP8p0BXDPI=
|
github.com/unrolled/secure v1.0.8/go.mod h1:fO+mEan+FLB0CdEnHf6Q4ZZVNqG+5fuLFnP8p0BXDPI=
|
||||||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||||
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
|
github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc=
|
github.com/urfave/negroni v1.0.0 h1:kIimOitoypq34K7TG7DUaJ9kq/N4Ofuwi1sjz0KipXc=
|
||||||
github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
|
github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
|
||||||
|
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c h1:u40Z8hqBAAQyv+vATcGgV0YCnDjqSL7/q/JyPhhJSPk=
|
||||||
|
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
|
||||||
|
github.com/xdg/stringprep v0.0.0-20180714160509-73f8eece6fdc/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
|
||||||
|
github.com/xdg/stringprep v1.0.0 h1:d9X0esnoa3dFsV0FG35rAT0RIhYFlPq7MiP+DW89La0=
|
||||||
|
github.com/xdg/stringprep v1.0.0/go.mod h1:Jhud4/sHMO4oL310DaZAKk9ZaJ08SJfe+sJh0HrGL1Y=
|
||||||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||||
|
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||||
|
go.mongodb.org/mongo-driver v1.3.4 h1:zs/dKNwX0gYUtzwrN9lLiR15hCO0nDwQj5xXx+vjCdE=
|
||||||
|
go.mongodb.org/mongo-driver v1.3.4/go.mod h1:MSWZXKOynuguX+JSvwP8i+58jYCXxbia8HS3gZBapIE=
|
||||||
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
|
||||||
|
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
|
||||||
|
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||||
|
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
|
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
|
go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=
|
||||||
|
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
|
||||||
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
|
||||||
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
|
||||||
@ -318,19 +507,50 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf
|
|||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI=
|
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c h1:Vj5n4GlwjmQteupaxJ9+0FNOmBrHfq7vN4btdGoDZgI=
|
||||||
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
|
golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
|
||||||
|
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 h1:3zb4D3T4G8jdExgVU/95+vQXfpEPiMdCaZgmGVxjNHM=
|
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59 h1:3zb4D3T4G8jdExgVU/95+vQXfpEPiMdCaZgmGVxjNHM=
|
||||||
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||||
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
|
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
|
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||||
|
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
|
||||||
|
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
||||||
|
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||||
|
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||||
|
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||||
|
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
||||||
|
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
||||||
|
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
golang.org/x/image v0.0.0-20190501045829-6d32002ffd75 h1:TbGuee8sSq15Iguxu4deQ7+Bqq/d2rsQejGcEtADAMQ=
|
golang.org/x/image v0.0.0-20190501045829-6d32002ffd75 h1:TbGuee8sSq15Iguxu4deQ7+Bqq/d2rsQejGcEtADAMQ=
|
||||||
golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
golang.org/x/image v0.0.0-20190501045829-6d32002ffd75/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||||
|
golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4=
|
||||||
|
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
|
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
|
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
|
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
|
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
|
||||||
|
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
|
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||||
|
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
||||||
|
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||||
|
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||||
|
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
||||||
|
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||||
|
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||||
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
|
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
|
||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -342,26 +562,48 @@ golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73r
|
|||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
|
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco=
|
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco=
|
||||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
|
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||||
golang.org/x/net v0.0.0-20190611141213-3f473d35a33a h1:+KkCgOMgnKSgenxTBoiwkMqTiouMIy/3o8RLdmSbGoY=
|
golang.org/x/net v0.0.0-20190611141213-3f473d35a33a h1:+KkCgOMgnKSgenxTBoiwkMqTiouMIy/3o8RLdmSbGoY=
|
||||||
golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
|
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
|
||||||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
|
golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
|
||||||
|
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||||
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
|
||||||
|
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
|
||||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=
|
||||||
|
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
@ -373,61 +615,203 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv
|
|||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8=
|
||||||
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190419153524-e8e3143a4f4a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae h1:xiXzMMEQdQcric9hXtr1QU98MHunKK7OTtsoU6bYWs4=
|
golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae h1:xiXzMMEQdQcric9hXtr1QU98MHunKK7OTtsoU6bYWs4=
|
||||||
golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190610200419-93c9922d18ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
|
||||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
|
||||||
|
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||||
|
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||||
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
|
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
|
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190329151228-23e29df326fe/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||||
|
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
|
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
|
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||||
|
golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
golang.org/x/tools v0.0.0-20190606050223-4d9ae51c2468/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
|
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b h1:/mJ+GKieZA6hFDQGdWZrjj4AXPl5ylY+5HusG80roy0=
|
golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b h1:/mJ+GKieZA6hFDQGdWZrjj4AXPl5ylY+5HusG80roy0=
|
||||||
golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
golang.org/x/tools v0.0.0-20190611222205-d73e1c7e250b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
|
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
|
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||||
|
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
|
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||||
|
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||||
|
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
|
||||||
|
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
|
||||||
golang.org/x/tools v0.0.0-20200402223321-bcf690261a44 h1:bMm0eoDiGkM5VfIyKjxDvoflW5GLp7+VCo+60n8F+TE=
|
golang.org/x/tools v0.0.0-20200402223321-bcf690261a44 h1:bMm0eoDiGkM5VfIyKjxDvoflW5GLp7+VCo+60n8F+TE=
|
||||||
golang.org/x/tools v0.0.0-20200402223321-bcf690261a44/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
golang.org/x/tools v0.0.0-20200402223321-bcf690261a44/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200527183253-8e7acdbce89d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
|
golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632 h1:fxWeLV4ol1icb47+btwfzuf8gOkJE/PPo9bLjSvZzA8=
|
||||||
|
golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk=
|
||||||
|
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||||
|
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
||||||
|
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
|
||||||
|
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
|
||||||
|
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
|
||||||
|
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
|
||||||
|
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
|
||||||
|
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
|
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
|
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
|
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
|
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
|
||||||
|
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||||
|
google.golang.org/api v0.25.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||||
|
google.golang.org/api v0.28.0 h1:jMF5hhVfMkTZwHW1SDpKq5CkgWLXOb31Foaca9Zr3oM=
|
||||||
|
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
|
||||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||||
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
|
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
|
||||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||||
|
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
|
||||||
|
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
|
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
|
||||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||||
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
|
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
|
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
|
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||||
|
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
|
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||||
|
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
|
||||||
|
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
|
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
|
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
|
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
|
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
|
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||||
|
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
|
||||||
|
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||||
|
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
|
||||||
|
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||||
|
google.golang.org/genproto v0.0.0-20200528110217-3d3490e7e671/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||||
|
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5 h1:a/Sqq5B3dGnmxhuJZIHFsIxhEkqElErr5TaU6IqBAj0=
|
||||||
|
google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
|
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||||
|
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||||
|
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||||
|
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
|
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
|
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||||
|
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
|
||||||
|
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||||
|
google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
|
||||||
|
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||||
|
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||||
|
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||||
|
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||||
|
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||||
|
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
|
||||||
|
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
|
||||||
|
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
|
||||||
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
|
||||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||||
gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM=
|
gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM=
|
||||||
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE=
|
||||||
gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ=
|
gopkg.in/go-playground/validator.v8 v8.18.2 h1:lFB4DoMU6B626w8ny76MV7VX6W2VHct2GVOI3xgiMrQ=
|
||||||
gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
|
gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y=
|
||||||
|
gopkg.in/go-playground/validator.v9 v9.29.1 h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvRQyEAKbw1xc=
|
||||||
|
gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ=
|
||||||
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
|
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
|
||||||
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||||
@ -440,6 +824,16 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
|
||||||
|
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
|
||||||
|
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
|
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
|
||||||
|
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||||
|
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||||
|
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||||
|
@ -20,7 +20,7 @@ func AuthCheckRole() gin.HandlerFunc {
|
|||||||
tools.HasError(err, "", 500)
|
tools.HasError(err, "", 500)
|
||||||
//检查权限
|
//检查权限
|
||||||
res, err := e.Enforce(v["rolekey"], c.Request.URL.Path, c.Request.Method)
|
res, err := e.Enforce(v["rolekey"], c.Request.URL.Path, c.Request.Method)
|
||||||
log.Println("----------------", v["rolekey"], c.Request.URL.Path, c.Request.Method)
|
log.Println(v["rolekey"], c.Request.URL.Path, c.Request.Method)
|
||||||
|
|
||||||
tools.HasError(err, "", 500)
|
tools.HasError(err, "", 500)
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package gorm
|
package gorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"ferry/models/process"
|
||||||
"ferry/models/system"
|
"ferry/models/system"
|
||||||
|
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
@ -21,5 +22,6 @@ func AutoMigrate(db *gorm.DB) error {
|
|||||||
new(system.Post),
|
new(system.Post),
|
||||||
|
|
||||||
// 流程中心
|
// 流程中心
|
||||||
|
new(process.Classify),
|
||||||
).Error
|
).Error
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
package workOrder
|
package process
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"ferry/models/base"
|
"ferry/models/base"
|
@ -1,4 +1,4 @@
|
|||||||
package task
|
package process
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"ferry/models/base"
|
"ferry/models/base"
|
@ -1,4 +1,4 @@
|
|||||||
package task
|
package process
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"ferry/models/base"
|
"ferry/models/base"
|
||||||
@ -9,7 +9,7 @@ import (
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// 任务
|
// 任务
|
||||||
type Info struct {
|
type TaskInfo struct {
|
||||||
base.Model
|
base.Model
|
||||||
Name string `gorm:"column:name; type: varchar(256)" json:"name" form:"name"` // 任务名称
|
Name string `gorm:"column:name; type: varchar(256)" json:"name" form:"name"` // 任务名称
|
||||||
TaskType string `gorm:"column:task_type; type: varchar(45)" json:"task_type" form:"task_type"` // 任务类型
|
TaskType string `gorm:"column:task_type; type: varchar(45)" json:"task_type" form:"task_type"` // 任务类型
|
||||||
@ -18,6 +18,6 @@ type Info struct {
|
|||||||
Remarks string `gorm:"column:remarks; type: longtext" json:"remarks" form:"remarks"` // 备注
|
Remarks string `gorm:"column:remarks; type: longtext" json:"remarks" form:"remarks"` // 备注
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Info) TableName() string {
|
func (TaskInfo) TableName() string {
|
||||||
return "task_info"
|
return "task_info"
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package tpl
|
package process
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@ -10,7 +10,7 @@ import (
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// 模板
|
// 模板
|
||||||
type Info struct {
|
type TplInfo struct {
|
||||||
base.Model
|
base.Model
|
||||||
Name string `gorm:"column:name; type: varchar(128)" json:"name" form:"name" binding:"required"` // 模板名称
|
Name string `gorm:"column:name; type: varchar(128)" json:"name" form:"name" binding:"required"` // 模板名称
|
||||||
FormStructure json.RawMessage `gorm:"column:form_structure; type: json" json:"form_structure" form:"form_structure" binding:"required"` // 表单结构
|
FormStructure json.RawMessage `gorm:"column:form_structure; type: json" json:"form_structure" form:"form_structure" binding:"required"` // 表单结构
|
||||||
@ -18,6 +18,6 @@ type Info struct {
|
|||||||
Remarks string `gorm:"column:remarks; type: longtext" json:"remarks" form:"remarks"` // 备注
|
Remarks string `gorm:"column:remarks; type: longtext" json:"remarks" form:"remarks"` // 备注
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Info) TableName() string {
|
func (TplInfo) TableName() string {
|
||||||
return "tpl_info"
|
return "tpl_info"
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package workOrder
|
package process
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
@ -1,4 +1,4 @@
|
|||||||
package workOrder
|
package process
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
@ -10,7 +10,7 @@ import (
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// 工单
|
// 工单
|
||||||
type Info struct {
|
type WorkOrderInfo struct {
|
||||||
base.Model
|
base.Model
|
||||||
Title string `gorm:"column:title; type:varchar(128)" json:"title" form:"title"` // 工单标题
|
Title string `gorm:"column:title; type:varchar(128)" json:"title" form:"title"` // 工单标题
|
||||||
Process int `gorm:"column:process; type:int(11)" json:"process" form:"process"` // 流程ID
|
Process int `gorm:"column:process; type:int(11)" json:"process" form:"process"` // 流程ID
|
||||||
@ -21,6 +21,6 @@ type Info struct {
|
|||||||
Creator int `gorm:"column:creator; type:int(11)" json:"creator" form:"creator"` // 创建人
|
Creator int `gorm:"column:creator; type:int(11)" json:"creator" form:"creator"` // 创建人
|
||||||
}
|
}
|
||||||
|
|
||||||
func (Info) TableName() string {
|
func (WorkOrderInfo) TableName() string {
|
||||||
return "work_order_info"
|
return "work_order_info"
|
||||||
}
|
}
|
117
pkg/pagination/pagination.go
Normal file
117
pkg/pagination/pagination.go
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
package pagination
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
|
||||||
|
"github.com/RichardKnop/machinery/v1/log"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/jinzhu/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Param struct {
|
||||||
|
C *gin.Context
|
||||||
|
DB *gorm.DB
|
||||||
|
ShowSQL bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type Paginator struct {
|
||||||
|
TotalCount int `json:"total_count"`
|
||||||
|
TotalPage int `json:"total_page"`
|
||||||
|
Data interface{} `json:"data"`
|
||||||
|
PerPage int `json:"per_page"`
|
||||||
|
Page int `json:"page"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ListRequest struct {
|
||||||
|
Page int `json:"page" form:"page"`
|
||||||
|
PerPage int `json:"per_page" form:"per_page"`
|
||||||
|
Sort int `json:"sort" form:"sort"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Paging 分页
|
||||||
|
func Paging(p *Param, result interface{}, args ...interface{}) (*Paginator, error) {
|
||||||
|
var (
|
||||||
|
param ListRequest
|
||||||
|
paginator Paginator
|
||||||
|
count int
|
||||||
|
offset int
|
||||||
|
tableName string
|
||||||
|
)
|
||||||
|
|
||||||
|
if err := p.C.Bind(¶m); err != nil {
|
||||||
|
log.ERROR.Printf("参数绑定失败,错误:%v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
db := p.DB
|
||||||
|
|
||||||
|
if p.ShowSQL {
|
||||||
|
db = db.Debug()
|
||||||
|
}
|
||||||
|
|
||||||
|
if param.Page < 1 {
|
||||||
|
param.Page = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
if param.PerPage == 0 {
|
||||||
|
param.PerPage = 10
|
||||||
|
}
|
||||||
|
|
||||||
|
if param.Sort == 0 || param.Sort == -1 {
|
||||||
|
db = db.Order("id desc")
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(args) > 1 {
|
||||||
|
tableName = fmt.Sprintf("`%s`.", args[1].(string))
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(args) > 0 {
|
||||||
|
for paramType, paramsValue := range args[0].(map[string]map[string]interface{}) {
|
||||||
|
if paramType == "like" {
|
||||||
|
for key, value := range paramsValue {
|
||||||
|
db = db.Where(fmt.Sprintf("%v%v like ?", tableName, key), fmt.Sprintf("%%%v%%", value))
|
||||||
|
}
|
||||||
|
} else if paramType == "equal" {
|
||||||
|
for key, value := range paramsValue {
|
||||||
|
db = db.Where(fmt.Sprintf("%v%v = ?", tableName, key), value)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
done := make(chan bool, 1)
|
||||||
|
|
||||||
|
go countRecords(db, result, done, &count)
|
||||||
|
|
||||||
|
if param.Page == 1 {
|
||||||
|
offset = 0
|
||||||
|
} else {
|
||||||
|
offset = (param.Page - 1) * param.PerPage
|
||||||
|
}
|
||||||
|
|
||||||
|
err := db.Limit(param.PerPage).Offset(offset).Scan(result).Error
|
||||||
|
if err != nil {
|
||||||
|
log.ERROR.Printf("数据查询失败,错误:%v", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
<-done
|
||||||
|
|
||||||
|
paginator.TotalCount = count
|
||||||
|
paginator.Data = result
|
||||||
|
paginator.Page = param.Page
|
||||||
|
paginator.PerPage = param.PerPage
|
||||||
|
paginator.TotalPage = int(math.Ceil(float64(count) / float64(param.PerPage)))
|
||||||
|
|
||||||
|
return &paginator, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func countRecords(db *gorm.DB, anyType interface{}, done chan bool, count *int) {
|
||||||
|
db.Model(anyType).Count(count)
|
||||||
|
done <- true
|
||||||
|
}
|
32
pkg/pagination/params.go
Normal file
32
pkg/pagination/params.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package pagination
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/RichardKnop/machinery/v1/log"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
func RequestParams(c *gin.Context) map[string]interface{} {
|
||||||
|
params := make(map[string]interface{}, 10)
|
||||||
|
|
||||||
|
if c.Request.Form == nil {
|
||||||
|
if err := c.Request.ParseMultipartForm(32 << 20); err != nil {
|
||||||
|
log.ERROR.Println(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(c.Request.Form) > 0 {
|
||||||
|
for key, value := range c.Request.Form {
|
||||||
|
if key == "page" || key == "per_page" || key == "sort" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
params[key] = value[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return params
|
||||||
|
}
|
50
pkg/service/getPrincipal.go
Normal file
50
pkg/service/getPrincipal.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"ferry/models/user"
|
||||||
|
"ferry/pkg/connection"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
func GetPrincipal(processor []int, processMethod string) (principals string, err error) {
|
||||||
|
/*
|
||||||
|
person 人员
|
||||||
|
persongroup 人员组
|
||||||
|
department 部门
|
||||||
|
variable 变量
|
||||||
|
*/
|
||||||
|
var principalList []string
|
||||||
|
switch processMethod {
|
||||||
|
case "person":
|
||||||
|
err = connection.DB.Self.Model(&user.Info{}).
|
||||||
|
Where("id in (?)", processor).
|
||||||
|
Pluck("nickname", &principalList).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case "persongroup":
|
||||||
|
err = connection.DB.Self.Model(&user.Group{}).Where("id in (?)", processor).Pluck("nickname", &principalList).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case "department":
|
||||||
|
err = connection.DB.Self.Model(&user.Dept{}).Where("id in (?)", processor).Pluck("nickname", &principalList).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case "variable":
|
||||||
|
for _, p := range processor {
|
||||||
|
switch p {
|
||||||
|
case 1:
|
||||||
|
principalList = append(principalList, "创建人")
|
||||||
|
case 2:
|
||||||
|
principalList = append(principalList, "创建人领导")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return strings.Join(principalList, ","), nil
|
||||||
|
}
|
58
pkg/service/getState.go
Normal file
58
pkg/service/getState.go
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
@Desc : 获取节点数据
|
||||||
|
*/
|
||||||
|
|
||||||
|
type ProcessState struct {
|
||||||
|
Structure map[string][]map[string]interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取节点信息
|
||||||
|
func (p *ProcessState) GetNode(stateId string) (nodeValue map[string]interface{}, err error) {
|
||||||
|
for _, node := range p.Structure["nodes"] {
|
||||||
|
if node["id"] == stateId {
|
||||||
|
nodeValue = node
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取流转信息
|
||||||
|
func (p *ProcessState) GetEdge(stateId string, classify string) (edgeValue []map[string]interface{}, err error) {
|
||||||
|
var (
|
||||||
|
leftSort int
|
||||||
|
rightSort int
|
||||||
|
)
|
||||||
|
|
||||||
|
for _, edge := range p.Structure["edges"] {
|
||||||
|
if edge[classify] == stateId {
|
||||||
|
edgeValue = append(edgeValue, edge)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排序
|
||||||
|
if len(edgeValue) > 1 {
|
||||||
|
for i := 0; i < len(edgeValue)-1; i++ {
|
||||||
|
for j := i + 1; j < len(edgeValue); j++ {
|
||||||
|
if t, ok := edgeValue[i]["sort"]; ok {
|
||||||
|
leftSort, _ = strconv.Atoi(t.(string))
|
||||||
|
}
|
||||||
|
if t, ok := edgeValue[j]["sort"]; ok {
|
||||||
|
rightSort, _ = strconv.Atoi(t.(string))
|
||||||
|
}
|
||||||
|
if leftSort > rightSort {
|
||||||
|
edgeValue[j], edgeValue[i] = edgeValue[i], edgeValue[j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
676
pkg/service/handle.go
Normal file
676
pkg/service/handle.go
Normal file
@ -0,0 +1,676 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"ferry/models/base"
|
||||||
|
"ferry/models/process"
|
||||||
|
"ferry/models/workOrder"
|
||||||
|
"ferry/pkg/connection"
|
||||||
|
"fmt"
|
||||||
|
"reflect"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/jinzhu/gorm"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
@Desc : 处理工单
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
-- 节点 --
|
||||||
|
start: 开始节点
|
||||||
|
userTask: 审批节点
|
||||||
|
receiveTask: 处理节点
|
||||||
|
scriptTask: 任务节点
|
||||||
|
end: 结束节点
|
||||||
|
|
||||||
|
-- 网关 --
|
||||||
|
exclusiveGateway: 排他网关
|
||||||
|
parallelGateway: 并行网关
|
||||||
|
inclusiveGateway: 包容网关
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
type Handle struct {
|
||||||
|
cirHistoryList []workOrder.CirculationHistory
|
||||||
|
workOrderId int
|
||||||
|
updateValue map[string]interface{}
|
||||||
|
stateValue map[string]interface{}
|
||||||
|
targetStateValue map[string]interface{}
|
||||||
|
workOrderData [][]byte
|
||||||
|
workOrderDetails workOrder.Info
|
||||||
|
endHistory bool
|
||||||
|
flowProperties int
|
||||||
|
circulationValue string
|
||||||
|
processState ProcessState
|
||||||
|
tx *gorm.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
// 时间格式化
|
||||||
|
func fmtDuration(d time.Duration) string {
|
||||||
|
d = d.Round(time.Minute)
|
||||||
|
h := d / time.Hour
|
||||||
|
d -= h * time.Hour
|
||||||
|
m := d / time.Minute
|
||||||
|
return fmt.Sprintf("%02d小时 %02d分钟", h, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 会签
|
||||||
|
func (h *Handle) Countersign(c *gin.Context) (err error) {
|
||||||
|
var (
|
||||||
|
stateList []map[string]interface{}
|
||||||
|
stateIdMap map[string]interface{}
|
||||||
|
currentState map[string]interface{}
|
||||||
|
cirHistoryCount int
|
||||||
|
)
|
||||||
|
|
||||||
|
err = json.Unmarshal(h.workOrderDetails.State, &stateList)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
stateIdMap = make(map[string]interface{})
|
||||||
|
for _, v := range stateList {
|
||||||
|
stateIdMap[v["id"].(string)] = v["label"]
|
||||||
|
if v["id"].(string) == h.stateValue["id"].(string) {
|
||||||
|
currentState = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, cirHistoryValue := range h.cirHistoryList {
|
||||||
|
if _, ok := stateIdMap[cirHistoryValue.Source]; !ok {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
for _, processor := range currentState["processor"].([]interface{}) {
|
||||||
|
if cirHistoryValue.ProcessorId != c.GetInt("userId") &&
|
||||||
|
cirHistoryValue.Source == currentState["id"].(string) &&
|
||||||
|
cirHistoryValue.ProcessorId == int(processor.(float64)) {
|
||||||
|
cirHistoryCount += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if cirHistoryCount == len(currentState["processor"].([]interface{}))-1 {
|
||||||
|
h.endHistory = true
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 工单跳转
|
||||||
|
func (h *Handle) circulation() (err error) {
|
||||||
|
var (
|
||||||
|
stateValue []byte
|
||||||
|
)
|
||||||
|
|
||||||
|
stateValue, err = json.Marshal(h.updateValue["state"])
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = h.tx.Model(&workOrder.Info{}).
|
||||||
|
Where("id = ?", h.workOrderId).
|
||||||
|
Updates(map[string]interface{}{
|
||||||
|
"state": stateValue,
|
||||||
|
"related_person": h.updateValue["related_person"],
|
||||||
|
}).Error
|
||||||
|
if err != nil {
|
||||||
|
h.tx.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 条件判断
|
||||||
|
func (h *Handle) ConditionalJudgment(condExpr map[string]interface{}) (result bool, err error) {
|
||||||
|
var (
|
||||||
|
condExprOk bool
|
||||||
|
condExprValue interface{}
|
||||||
|
)
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
switch e := r.(type) {
|
||||||
|
case string:
|
||||||
|
err = errors.New(e)
|
||||||
|
case error:
|
||||||
|
err = e
|
||||||
|
default:
|
||||||
|
err = errors.New("未知错误")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
for _, data := range h.workOrderData {
|
||||||
|
var formData map[string]interface{}
|
||||||
|
err = json.Unmarshal(data, &formData)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if condExprValue, condExprOk = formData[condExpr["key"].(string)]; condExprOk {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if condExprValue == nil {
|
||||||
|
err = errors.New("未查询到对应的表单数据。")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo 待优化
|
||||||
|
switch reflect.TypeOf(condExprValue).String() {
|
||||||
|
case "string":
|
||||||
|
switch condExpr["sign"] {
|
||||||
|
case "==":
|
||||||
|
if condExprValue.(string) == condExpr["value"].(string) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case "!=":
|
||||||
|
if condExprValue.(string) != condExpr["value"].(string) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case ">":
|
||||||
|
if condExprValue.(string) > condExpr["value"].(string) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case ">=":
|
||||||
|
if condExprValue.(string) >= condExpr["value"].(string) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case "<":
|
||||||
|
if condExprValue.(string) < condExpr["value"].(string) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case "<=":
|
||||||
|
if condExprValue.(string) <= condExpr["value"].(string) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
err = errors.New("目前仅支持6种常规判断类型,包括(等于、不等于、大于、大于等于、小于、小于等于)")
|
||||||
|
}
|
||||||
|
case "float64":
|
||||||
|
switch condExpr["sign"] {
|
||||||
|
case "==":
|
||||||
|
if condExprValue.(float64) == condExpr["value"].(float64) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case "!=":
|
||||||
|
if condExprValue.(float64) != condExpr["value"].(float64) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case ">":
|
||||||
|
if condExprValue.(float64) > condExpr["value"].(float64) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case ">=":
|
||||||
|
if condExprValue.(float64) >= condExpr["value"].(float64) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case "<":
|
||||||
|
if condExprValue.(float64) < condExpr["value"].(float64) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
case "<=":
|
||||||
|
if condExprValue.(float64) <= condExpr["value"].(float64) {
|
||||||
|
result = true
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
err = errors.New("目前仅支持6种常规判断类型,包括(等于、不等于、大于、大于等于、小于、小于等于)")
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
err = errors.New("条件判断目前仅支持字符串、整型。")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 并行网关,确认其他节点是否完成
|
||||||
|
func (h *Handle) completeAllParallel(c *gin.Context, target string) (statusOk bool, err error) {
|
||||||
|
var (
|
||||||
|
stateList []map[string]interface{}
|
||||||
|
)
|
||||||
|
|
||||||
|
err = json.Unmarshal(h.workOrderDetails.State, &stateList)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("反序列化失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
continueHistoryTag:
|
||||||
|
for _, v := range h.cirHistoryList {
|
||||||
|
status := false
|
||||||
|
for i, s := range stateList {
|
||||||
|
if v.Source == s["id"].(string) && v.Target == target {
|
||||||
|
status = true
|
||||||
|
stateList = append(stateList[:i], stateList[i+1:]...)
|
||||||
|
continue continueHistoryTag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !status {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(stateList) == 1 && stateList[0]["id"].(string) == h.stateValue["id"] {
|
||||||
|
statusOk = true
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Handle) commonProcessing(c *gin.Context) (err error) {
|
||||||
|
// 如果是拒绝的流转则直接跳转
|
||||||
|
if h.flowProperties == 0 {
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("工单跳转失败,%v", err.Error())
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 会签
|
||||||
|
if h.stateValue["assignValue"] != nil && len(h.stateValue["assignValue"].([]interface{})) > 1 {
|
||||||
|
if isCounterSign, ok := h.stateValue["isCounterSign"]; ok {
|
||||||
|
if isCounterSign.(bool) {
|
||||||
|
h.endHistory = false
|
||||||
|
err = h.Countersign(c)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *Handle) HandleWorkOrder(
|
||||||
|
c *gin.Context,
|
||||||
|
workOrderId int,
|
||||||
|
tasks []string,
|
||||||
|
targetState string,
|
||||||
|
sourceState string,
|
||||||
|
circulationValue string,
|
||||||
|
flowProperties int,
|
||||||
|
) (err error) {
|
||||||
|
h.workOrderId = workOrderId
|
||||||
|
h.flowProperties = flowProperties
|
||||||
|
h.endHistory = true
|
||||||
|
|
||||||
|
var (
|
||||||
|
execTasks []string
|
||||||
|
relatedPersonList []int
|
||||||
|
cirHistoryValue []workOrder.CirculationHistory
|
||||||
|
cirHistoryData workOrder.CirculationHistory
|
||||||
|
costDurationValue string
|
||||||
|
sourceEdges []map[string]interface{}
|
||||||
|
targetEdges []map[string]interface{}
|
||||||
|
condExprStatus bool
|
||||||
|
relatedPersonValue []byte
|
||||||
|
parallelStatusOk bool
|
||||||
|
processInfo process.Info
|
||||||
|
)
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if r := recover(); r != nil {
|
||||||
|
switch e := r.(type) {
|
||||||
|
case string:
|
||||||
|
err = errors.New(e)
|
||||||
|
case error:
|
||||||
|
err = e
|
||||||
|
default:
|
||||||
|
err = errors.New("未知错误")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
// 获取工单信息
|
||||||
|
err = connection.DB.Self.Model(&workOrder.Info{}).Where("id = ?", workOrderId).Find(&h.workOrderDetails).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取流程信息
|
||||||
|
err = connection.DB.Self.Model(&process.Info{}).Where("id = ?", h.workOrderDetails.Process).Find(&processInfo).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(processInfo.Structure, &h.processState.Structure)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取当前节点
|
||||||
|
h.stateValue, err = h.processState.GetNode(sourceState)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 目标状态
|
||||||
|
h.targetStateValue, err = h.processState.GetNode(targetState)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取工单数据
|
||||||
|
err = connection.DB.Self.Model(&workOrder.TplData{}).
|
||||||
|
Where("work_order = ?", workOrderId).
|
||||||
|
Pluck("form_data", &h.workOrderData).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据处理人查询出需要会签的条数
|
||||||
|
err = connection.DB.Self.Model(&workOrder.CirculationHistory{}).
|
||||||
|
Where("work_order = ?", workOrderId).
|
||||||
|
Order("id desc").
|
||||||
|
Find(&h.cirHistoryList).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(h.workOrderDetails.RelatedPerson, &relatedPersonList)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
relatedPersonStatus := false
|
||||||
|
for _, r := range relatedPersonList {
|
||||||
|
if r == c.GetInt("userId") {
|
||||||
|
relatedPersonStatus = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !relatedPersonStatus {
|
||||||
|
relatedPersonList = append(relatedPersonList, c.GetInt("userId"))
|
||||||
|
}
|
||||||
|
|
||||||
|
relatedPersonValue, err = json.Marshal(relatedPersonList)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
h.updateValue = map[string]interface{}{
|
||||||
|
"related_person": relatedPersonValue,
|
||||||
|
}
|
||||||
|
|
||||||
|
// 开启事务
|
||||||
|
h.tx = connection.DB.Self.Begin()
|
||||||
|
|
||||||
|
stateValue := map[string]interface{}{
|
||||||
|
"label": h.targetStateValue["label"].(string),
|
||||||
|
"id": h.targetStateValue["id"].(string),
|
||||||
|
}
|
||||||
|
|
||||||
|
switch h.targetStateValue["clazz"] {
|
||||||
|
// 排他网关
|
||||||
|
case "exclusiveGateway":
|
||||||
|
sourceEdges, err = h.processState.GetEdge(h.targetStateValue["id"].(string), "source")
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
breakTag:
|
||||||
|
for _, edge := range sourceEdges {
|
||||||
|
edgeCondExpr := make([]map[string]interface{}, 0)
|
||||||
|
err = json.Unmarshal([]byte(edge["conditionExpression"].(string)), &edgeCondExpr)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, condExpr := range edgeCondExpr {
|
||||||
|
// 条件判断
|
||||||
|
condExprStatus, err = h.ConditionalJudgment(condExpr)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if condExprStatus {
|
||||||
|
// 进行节点跳转
|
||||||
|
h.targetStateValue, err = h.processState.GetNode(edge["target"].(string))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if h.targetStateValue["clazz"] == "userTask" || h.targetStateValue["clazz"] == "receiveTask" {
|
||||||
|
if h.targetStateValue["assignValue"] == nil || h.targetStateValue["assignType"] == "" {
|
||||||
|
err = errors.New("处理人不能为空")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h.updateValue["state"] = []map[string]interface{}{{
|
||||||
|
"id": h.targetStateValue["id"].(string),
|
||||||
|
"label": h.targetStateValue["label"],
|
||||||
|
"processor": h.targetStateValue["assignValue"],
|
||||||
|
"process_method": h.targetStateValue["assignType"],
|
||||||
|
}}
|
||||||
|
err = h.commonProcessing(c)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("流程流程跳转失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
break breakTag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !condExprStatus {
|
||||||
|
err = errors.New("所有流转均不符合条件,请确认。")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 并行/聚合网关
|
||||||
|
case "parallelGateway":
|
||||||
|
// 入口,判断
|
||||||
|
sourceEdges, err = h.processState.GetEdge(h.targetStateValue["id"].(string), "source")
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("查询流转信息失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
targetEdges, err = h.processState.GetEdge(h.targetStateValue["id"].(string), "target")
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("查询流转信息失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(sourceEdges) > 0 {
|
||||||
|
h.targetStateValue, err = h.processState.GetNode(sourceEdges[0]["target"].(string))
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
err = errors.New("并行网关流程不正确")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(sourceEdges) > 1 && len(targetEdges) == 1 {
|
||||||
|
// 入口
|
||||||
|
h.updateValue["state"] = make([]map[string]interface{}, 0)
|
||||||
|
for _, edge := range sourceEdges {
|
||||||
|
targetStateValue, err := h.processState.GetNode(edge["target"].(string))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
h.updateValue["state"] = append(h.updateValue["state"].([]map[string]interface{}), map[string]interface{}{
|
||||||
|
"id": edge["target"].(string),
|
||||||
|
"label": targetStateValue["label"],
|
||||||
|
"processor": targetStateValue["assignValue"],
|
||||||
|
"process_method": targetStateValue["assignType"],
|
||||||
|
})
|
||||||
|
}
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("工单跳转失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else if len(sourceEdges) == 1 && len(targetEdges) > 1 {
|
||||||
|
// 出口
|
||||||
|
parallelStatusOk, err = h.completeAllParallel(c, sourceEdges[0]["target"].(string))
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("并行检测失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if parallelStatusOk {
|
||||||
|
h.endHistory = true
|
||||||
|
h.updateValue["state"] = []map[string]interface{}{{
|
||||||
|
"id": h.targetStateValue["id"].(string),
|
||||||
|
"label": h.targetStateValue["label"],
|
||||||
|
"processor": h.targetStateValue["assignValue"],
|
||||||
|
"process_method": h.targetStateValue["assignType"],
|
||||||
|
}}
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("工单跳转失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
h.endHistory = false
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
err = errors.New("并行网关流程不正确")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 包容网关
|
||||||
|
case "inclusiveGateway":
|
||||||
|
fmt.Println("inclusiveGateway")
|
||||||
|
return
|
||||||
|
case "start":
|
||||||
|
stateValue["processor"] = []int{h.workOrderDetails.Creator}
|
||||||
|
stateValue["process_method"] = "person"
|
||||||
|
h.updateValue["state"] = []interface{}{stateValue}
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case "userTask":
|
||||||
|
stateValue["processor"] = h.targetStateValue["assignValue"].([]interface{})
|
||||||
|
stateValue["process_method"] = h.targetStateValue["assignType"].(string)
|
||||||
|
h.updateValue["state"] = []interface{}{stateValue}
|
||||||
|
err = h.commonProcessing(c)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case "receiveTask":
|
||||||
|
stateValue["processor"] = h.targetStateValue["assignValue"].([]interface{})
|
||||||
|
stateValue["process_method"] = h.targetStateValue["assignType"].(string)
|
||||||
|
h.updateValue["state"] = []interface{}{stateValue}
|
||||||
|
err = h.commonProcessing(c)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
case "scriptTask":
|
||||||
|
stateValue["processor"] = []int{}
|
||||||
|
stateValue["process_method"] = ""
|
||||||
|
h.updateValue["state"] = []interface{}{stateValue}
|
||||||
|
case "end":
|
||||||
|
stateValue["processor"] = []int{}
|
||||||
|
stateValue["process_method"] = ""
|
||||||
|
h.updateValue["state"] = []interface{}{stateValue}
|
||||||
|
err = h.circulation()
|
||||||
|
if err != nil {
|
||||||
|
h.tx.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = h.tx.Model(&workOrder.Info{}).
|
||||||
|
Where("id = ?", h.workOrderId).
|
||||||
|
Update("is_end", 1).Error
|
||||||
|
if err != nil {
|
||||||
|
h.tx.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 流转历史写入
|
||||||
|
err = connection.DB.Self.Model(&cirHistoryValue).
|
||||||
|
Where("work_order = ?", workOrderId).
|
||||||
|
Find(&cirHistoryValue).
|
||||||
|
Order("create_time desc").Error
|
||||||
|
if err != nil {
|
||||||
|
h.tx.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, t := range cirHistoryValue {
|
||||||
|
if t.Source != h.stateValue["id"] {
|
||||||
|
costDuration := time.Since(t.CreatedAt.Time)
|
||||||
|
costDurationValue = fmtDuration(costDuration)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
cirHistoryData = workOrder.CirculationHistory{
|
||||||
|
Model: base.Model{},
|
||||||
|
Title: h.workOrderDetails.Title,
|
||||||
|
WorkOrder: h.workOrderDetails.Id,
|
||||||
|
State: h.stateValue["label"].(string),
|
||||||
|
Source: h.stateValue["id"].(string),
|
||||||
|
Target: h.targetStateValue["id"].(string),
|
||||||
|
Circulation: circulationValue,
|
||||||
|
Processor: c.GetString("nickname"),
|
||||||
|
ProcessorId: c.GetInt("userId"),
|
||||||
|
CostDuration: costDurationValue,
|
||||||
|
}
|
||||||
|
|
||||||
|
err = h.tx.Create(&cirHistoryData).Error
|
||||||
|
if err != nil {
|
||||||
|
h.tx.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 判断目标是否是结束节点
|
||||||
|
if h.targetStateValue["clazz"] == "end" && h.endHistory == true {
|
||||||
|
err = h.tx.Create(&workOrder.CirculationHistory{
|
||||||
|
Model: base.Model{},
|
||||||
|
Title: h.workOrderDetails.Title,
|
||||||
|
WorkOrder: h.workOrderDetails.Id,
|
||||||
|
State: h.targetStateValue["label"].(string),
|
||||||
|
Source: h.targetStateValue["id"].(string),
|
||||||
|
Processor: c.GetString("nickname"),
|
||||||
|
ProcessorId: c.GetInt("userId"),
|
||||||
|
Circulation: "结束",
|
||||||
|
}).Error
|
||||||
|
if err != nil {
|
||||||
|
h.tx.Rollback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
h.tx.Commit() // 提交事务
|
||||||
|
|
||||||
|
// 执行流程公共任务及节点任务
|
||||||
|
if h.stateValue["task"] != nil {
|
||||||
|
for _, task := range h.stateValue["task"].([]interface{}) {
|
||||||
|
tasks = append(tasks, task.(string))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continueTag:
|
||||||
|
for _, task := range tasks {
|
||||||
|
for _, t := range execTasks {
|
||||||
|
if t == task {
|
||||||
|
continue continueTag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
execTasks = append(execTasks, task)
|
||||||
|
}
|
||||||
|
go ExecTask(execTasks)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
174
pkg/service/process.go
Normal file
174
pkg/service/process.go
Normal file
@ -0,0 +1,174 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"ferry/models/process"
|
||||||
|
"ferry/models/tpl"
|
||||||
|
"ferry/models/workOrder"
|
||||||
|
"ferry/pkg/connection"
|
||||||
|
"fmt"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
type WorkOrderData struct {
|
||||||
|
workOrder.Info
|
||||||
|
CurrentState string `json:"current_state"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func ProcessStructure(c *gin.Context, processId int, workOrderId int) (result map[string]interface{}, err error) {
|
||||||
|
var (
|
||||||
|
processValue process.Info
|
||||||
|
processStructureDetails map[string]interface{}
|
||||||
|
processNode []map[string]interface{}
|
||||||
|
tplDetails []*tpl.Info
|
||||||
|
workOrderInfo WorkOrderData
|
||||||
|
workOrderTpls []*workOrder.TplData
|
||||||
|
workOrderHistory []*workOrder.CirculationHistory
|
||||||
|
stateList []map[string]interface{}
|
||||||
|
)
|
||||||
|
|
||||||
|
err = connection.DB.Self.Model(&processValue).Where("id = ?", processId).Find(&processValue).Error
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("查询流程失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal([]byte(processValue.Structure), &processStructureDetails)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("json转map失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 排序,使用冒泡
|
||||||
|
p := processStructureDetails["nodes"].([]interface{})
|
||||||
|
if len(p) > 1 {
|
||||||
|
for i := 0; i < len(p); i++ {
|
||||||
|
for j := 1; j < len(p)-i; j++ {
|
||||||
|
if p[j].(map[string]interface{})["sort"] == nil || p[j-1].(map[string]interface{})["sort"] == nil {
|
||||||
|
return nil, errors.New("流程未定义顺序属性,请确认")
|
||||||
|
}
|
||||||
|
leftInt, _ := strconv.Atoi(p[j].(map[string]interface{})["sort"].(string))
|
||||||
|
rightInt, _ := strconv.Atoi(p[j-1].(map[string]interface{})["sort"].(string))
|
||||||
|
if leftInt < rightInt {
|
||||||
|
//交换
|
||||||
|
p[j], p[j-1] = p[j-1], p[j]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, node := range processStructureDetails["nodes"].([]interface{}) {
|
||||||
|
processNode = append(processNode, node.(map[string]interface{}))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
processNode = processStructureDetails["nodes"].([]map[string]interface{})
|
||||||
|
}
|
||||||
|
|
||||||
|
processValue.Structure = nil
|
||||||
|
result = map[string]interface{}{
|
||||||
|
"process": processValue,
|
||||||
|
"nodes": processNode,
|
||||||
|
"edges": processStructureDetails["edges"],
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取历史记录
|
||||||
|
err = connection.DB.Self.Model(&workOrder.CirculationHistory{}).
|
||||||
|
Where("work_order = ?", workOrderId).
|
||||||
|
Order("id desc").
|
||||||
|
Find(&workOrderHistory).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
result["circulationHistory"] = workOrderHistory
|
||||||
|
|
||||||
|
if workOrderId == 0 {
|
||||||
|
// 查询流程模版
|
||||||
|
var tplIdList []int
|
||||||
|
err = json.Unmarshal(processValue.Tpls, &tplIdList)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("json转map失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = connection.DB.Self.Model(&tplDetails).
|
||||||
|
Where("id in (?)", tplIdList).
|
||||||
|
Find(&tplDetails).Error
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("查询模版失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
result["tpls"] = tplDetails
|
||||||
|
} else {
|
||||||
|
// 查询工单信息
|
||||||
|
err = connection.DB.Self.Model(&workOrder.Info{}).
|
||||||
|
Where("id = ?", workOrderId).
|
||||||
|
Scan(&workOrderInfo).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 获取当前节点
|
||||||
|
err = json.Unmarshal(workOrderInfo.State, &stateList)
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("序列化节点列表失败,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(stateList) == 0 {
|
||||||
|
err = errors.New("当前工单没有下一节点数据")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 整理需要并行处理的数据
|
||||||
|
if len(stateList) > 1 {
|
||||||
|
continueHistoryTag:
|
||||||
|
for _, v := range workOrderHistory {
|
||||||
|
status := false
|
||||||
|
for i, s := range stateList {
|
||||||
|
if v.Source == s["id"].(string) && v.Target != "" {
|
||||||
|
status = true
|
||||||
|
stateList = append(stateList[:i], stateList[i+1:]...)
|
||||||
|
continue continueHistoryTag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !status {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(stateList) > 0 {
|
||||||
|
breakStateTag:
|
||||||
|
for _, stateValue := range stateList {
|
||||||
|
for _, processNodeValue := range processStructureDetails["nodes"].([]interface{}) {
|
||||||
|
if stateValue["id"].(string) == processNodeValue.(map[string]interface{})["id"] {
|
||||||
|
for _, userId := range stateValue["processor"].([]interface{}) {
|
||||||
|
if int(userId.(float64)) == c.GetInt("userId") {
|
||||||
|
workOrderInfo.CurrentState = stateValue["id"].(string)
|
||||||
|
break breakStateTag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if workOrderInfo.CurrentState == "" {
|
||||||
|
workOrderInfo.CurrentState = stateList[0]["id"].(string)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result["workOrder"] = workOrderInfo
|
||||||
|
|
||||||
|
// 查询工单表单数据
|
||||||
|
err = connection.DB.Self.Model(&workOrderTpls).
|
||||||
|
Where("work_order = ?", workOrderId).
|
||||||
|
Find(&workOrderTpls).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
result["tpls"] = workOrderTpls
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
24
pkg/service/task.go
Normal file
24
pkg/service/task.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"ferry/pkg/task"
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
func ExecTask(taskList []string) {
|
||||||
|
for _, taskName := range taskList {
|
||||||
|
filePath := fmt.Sprintf("%v/%v", viper.GetString("script.path"), taskName)
|
||||||
|
if strings.HasSuffix(filePath, ".py") {
|
||||||
|
task.Send("python", filePath)
|
||||||
|
} else if strings.HasSuffix(filePath, ".sh") {
|
||||||
|
task.Send("shell", filePath)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
148
pkg/service/userAuthority.go
Normal file
148
pkg/service/userAuthority.go
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"ferry/models/process"
|
||||||
|
"ferry/models/user"
|
||||||
|
"ferry/models/workOrder"
|
||||||
|
"ferry/pkg/connection"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
func JudgeUserAuthority(c *gin.Context, workOrderId int, currentState string) (status bool, err error) {
|
||||||
|
/*
|
||||||
|
person 人员
|
||||||
|
persongroup 人员组
|
||||||
|
department 部门
|
||||||
|
variable 变量
|
||||||
|
*/
|
||||||
|
var (
|
||||||
|
workOrderInfo workOrder.Info
|
||||||
|
userInfo user.Info
|
||||||
|
userDept user.Dept
|
||||||
|
cirHistoryList []workOrder.CirculationHistory
|
||||||
|
stateValue map[string]interface{}
|
||||||
|
processInfo process.Info
|
||||||
|
processState ProcessState
|
||||||
|
currentStateList []map[string]interface{}
|
||||||
|
currentStateValue map[string]interface{}
|
||||||
|
)
|
||||||
|
// 获取工单信息
|
||||||
|
err = connection.DB.Self.Model(&workOrderInfo).
|
||||||
|
Where("id = ?", workOrderId).
|
||||||
|
Find(&workOrderInfo).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取流程信息
|
||||||
|
err = connection.DB.Self.Model(&process.Info{}).Where("id = ?", workOrderInfo.Process).Find(&processInfo).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(processInfo.Structure, &processState.Structure)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
stateValue, err = processState.GetNode(currentState)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
err = json.Unmarshal(workOrderInfo.State, ¤tStateList)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range currentStateList {
|
||||||
|
if v["id"].(string) == currentState {
|
||||||
|
currentStateValue = v
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 会签
|
||||||
|
if currentStateValue["processor"] != nil && len(currentStateValue["processor"].([]interface{})) > 1 {
|
||||||
|
if isCounterSign, ok := stateValue["isCounterSign"]; ok {
|
||||||
|
if isCounterSign.(bool) {
|
||||||
|
err = connection.DB.Self.Model(&workOrder.CirculationHistory{}).
|
||||||
|
Where("work_order = ?", workOrderId).
|
||||||
|
Order("id desc").
|
||||||
|
Find(&cirHistoryList).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, cirHistoryValue := range cirHistoryList {
|
||||||
|
if cirHistoryValue.Source != stateValue["id"] {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if cirHistoryValue.Source == stateValue["id"] && cirHistoryValue.ProcessorId == c.GetInt("userId") {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch currentStateValue["process_method"].(string) {
|
||||||
|
case "person":
|
||||||
|
for _, processorValue := range currentStateValue["processor"].([]interface{}) {
|
||||||
|
if int(processorValue.(float64)) == c.GetInt("userId") {
|
||||||
|
status = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "persongroup":
|
||||||
|
var persongroupCount int
|
||||||
|
err = connection.DB.Self.Model(&user.UserGroup{}).
|
||||||
|
Where("group in (?) and user = ?", currentStateValue["processor"].([]interface{}), c.GetInt("userId")).
|
||||||
|
Count(&persongroupCount).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if persongroupCount > 0 {
|
||||||
|
status = true
|
||||||
|
}
|
||||||
|
case "department":
|
||||||
|
var departmentCount int
|
||||||
|
err = connection.DB.Self.Model(&user.Info{}).
|
||||||
|
Where("dept in (?) and id = ?", currentStateValue["processor"].([]interface{}), c.GetInt("userId")).
|
||||||
|
Count(&departmentCount).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if departmentCount > 0 {
|
||||||
|
status = true
|
||||||
|
}
|
||||||
|
case "variable":
|
||||||
|
for _, p := range currentStateValue["processor"].([]interface{}) {
|
||||||
|
switch int(p.(float64)) {
|
||||||
|
case 1:
|
||||||
|
if workOrderInfo.Creator == c.GetInt("userId") {
|
||||||
|
status = true
|
||||||
|
}
|
||||||
|
case 2:
|
||||||
|
err = connection.DB.Self.Model(&userInfo).Where("id = ?", workOrderInfo.Creator).Find(&userInfo).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = connection.DB.Self.Model(&userDept).Where("id = ?", userInfo.Dept).Find(&userDept).Error
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if userDept.Approver == c.GetInt("userId") {
|
||||||
|
status = true
|
||||||
|
} else if userDept.Leader == c.GetInt("userId") {
|
||||||
|
status = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
124
pkg/service/workOrderList.go
Normal file
124
pkg/service/workOrderList.go
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
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
|
||||||
|
}
|
14
pkg/task/send.go
Normal file
14
pkg/task/send.go
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
package task
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"ferry/pkg/task/worker"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Send(classify string, scriptPath string) {
|
||||||
|
worker.SendTask(context.Background(), classify, scriptPath)
|
||||||
|
}
|
19
pkg/task/server.go
Normal file
19
pkg/task/server.go
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
package task
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
import (
|
||||||
|
"ferry/pkg/logger"
|
||||||
|
"ferry/pkg/task/worker"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Start() {
|
||||||
|
// 启动异步任务框架
|
||||||
|
taskWorker := worker.NewAsyncTaskWorker(0)
|
||||||
|
err := taskWorker.Launch()
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("启动machinery失败,%v", err.Error())
|
||||||
|
}
|
||||||
|
}
|
71
pkg/task/worker/tasks.go
Normal file
71
pkg/task/worker/tasks.go
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
package worker
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"os/exec"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/RichardKnop/machinery/v1/log"
|
||||||
|
"github.com/RichardKnop/machinery/v1/tasks"
|
||||||
|
)
|
||||||
|
|
||||||
|
var asyncTaskMap map[string]interface{}
|
||||||
|
|
||||||
|
func executeTaskBase(scriptPath string) {
|
||||||
|
command := exec.Command("/bin/bash", "-c", scriptPath) //初始化Cmd
|
||||||
|
err := command.Start() //运行脚本
|
||||||
|
if nil != err {
|
||||||
|
log.ERROR.Printf("task exec failed,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.INFO.Println("Process PID:", command.Process.Pid)
|
||||||
|
|
||||||
|
err = command.Wait() //等待执行完成
|
||||||
|
if nil != err {
|
||||||
|
log.ERROR.Printf("task exec failed,%v", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
log.INFO.Println("ProcessState PID:", command.ProcessState.Pid())
|
||||||
|
log.INFO.Println("Exit Code", command.ProcessState.Sys().(syscall.WaitStatus).ExitStatus())
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecCommand 异步任务
|
||||||
|
func ExecCommand(classify string, scriptPath string) error {
|
||||||
|
if classify == "shell" {
|
||||||
|
log.INFO.Println("start exec shell...", scriptPath)
|
||||||
|
executeTaskBase(scriptPath)
|
||||||
|
return nil
|
||||||
|
} else if classify == "python" {
|
||||||
|
log.INFO.Println("start exec python...", scriptPath)
|
||||||
|
executeTaskBase(scriptPath)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SendTask(ctx context.Context, classify string, scriptPath string) {
|
||||||
|
args := make([]tasks.Arg, 0)
|
||||||
|
args = append(args, tasks.Arg{
|
||||||
|
Name: "classify",
|
||||||
|
Type: "string",
|
||||||
|
Value: classify,
|
||||||
|
})
|
||||||
|
args = append(args, tasks.Arg{
|
||||||
|
Name: "scriptPath",
|
||||||
|
Type: "string",
|
||||||
|
Value: scriptPath,
|
||||||
|
})
|
||||||
|
task, _ := tasks.NewSignature("ExecCommandTask", args)
|
||||||
|
task.RetryCount = 5
|
||||||
|
_, err := AsyncTaskCenter.SendTaskWithContext(ctx, task)
|
||||||
|
if err != nil {
|
||||||
|
log.ERROR.Println(err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func initAsyncTaskMap() {
|
||||||
|
asyncTaskMap = make(map[string]interface{})
|
||||||
|
asyncTaskMap["ExecCommandTask"] = ExecCommand
|
||||||
|
}
|
50
pkg/task/worker/worker.go
Normal file
50
pkg/task/worker/worker.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package worker
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/RichardKnop/machinery/v1"
|
||||||
|
taskConfig "github.com/RichardKnop/machinery/v1/config"
|
||||||
|
"github.com/RichardKnop/machinery/v1/log"
|
||||||
|
"github.com/RichardKnop/machinery/v1/tasks"
|
||||||
|
)
|
||||||
|
|
||||||
|
var AsyncTaskCenter *machinery.Server
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
tc, err := NewTaskCenter()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
AsyncTaskCenter = tc
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewTaskCenter() (*machinery.Server, error) {
|
||||||
|
cnf := &taskConfig.Config{
|
||||||
|
Broker: "redis://127.0.0.1:6379",
|
||||||
|
DefaultQueue: "ServerTasksQueue",
|
||||||
|
ResultBackend: "eager",
|
||||||
|
}
|
||||||
|
server, err := machinery.NewServer(cnf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
initAsyncTaskMap()
|
||||||
|
return server, server.RegisterTasks(asyncTaskMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewAsyncTaskWorker(concurrency int) *machinery.Worker {
|
||||||
|
consumerTag := "TaskWorker"
|
||||||
|
worker := AsyncTaskCenter.NewWorker(consumerTag, concurrency)
|
||||||
|
errorHandler := func(err error) {
|
||||||
|
log.ERROR.Println("执行失败: ", err)
|
||||||
|
}
|
||||||
|
preTaskHandler := func(signature *tasks.Signature) {
|
||||||
|
log.INFO.Println("开始执行: ", signature.Name)
|
||||||
|
}
|
||||||
|
postTaskHandler := func(signature *tasks.Signature) {
|
||||||
|
log.INFO.Println("执行结束: ", signature.Name)
|
||||||
|
}
|
||||||
|
worker.SetPostTaskHandler(postTaskHandler)
|
||||||
|
worker.SetErrorHandler(errorHandler)
|
||||||
|
worker.SetPreTaskHandler(preTaskHandler)
|
||||||
|
return worker
|
||||||
|
}
|
@ -24,9 +24,5 @@ func InitRouter() *gin.Engine {
|
|||||||
// 注册系统路由
|
// 注册系统路由
|
||||||
InitSysRouter(r, authMiddleware)
|
InitSysRouter(r, authMiddleware)
|
||||||
|
|
||||||
// 注册业务路由
|
|
||||||
// TODO: 这里可存放业务路由,里边并无实际路由是有演示代码
|
|
||||||
InitExamplesRouter(r, authMiddleware)
|
|
||||||
|
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
23
router/process/classify.go
Normal file
23
router/process/classify.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package process
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
import (
|
||||||
|
"ferry/apis/process"
|
||||||
|
"ferry/middleware"
|
||||||
|
jwt "ferry/pkg/jwtauth"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RegisterClassifyRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
|
classify := v1.Group("/classify").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
|
{
|
||||||
|
classify.GET("", process.ClassifyList)
|
||||||
|
classify.POST("", process.CreateClassify)
|
||||||
|
classify.PUT("", process.UpdateClassify)
|
||||||
|
classify.DELETE("", process.DeleteClassify)
|
||||||
|
}
|
||||||
|
}
|
23
router/process/process.go
Normal file
23
router/process/process.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
package process
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
import (
|
||||||
|
jwt "ferry/pkg/jwtauth"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RegisterProcessRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
|
//processRouter := v1.Group("/process").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
|
//{
|
||||||
|
//processRouter.GET("/classify", process.ClassifyProcessList)
|
||||||
|
//processRouter.GET("", process.ProcessList)
|
||||||
|
//processRouter.POST("", process.CreateProcess)
|
||||||
|
//processRouter.PUT("", process.UpdateProcess)
|
||||||
|
//processRouter.DELETE("", process.DeleteProcess)
|
||||||
|
//processRouter.GET("/details", process.ProcessDetails)
|
||||||
|
//}
|
||||||
|
}
|
22
router/process/task.go
Normal file
22
router/process/task.go
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
package process
|
||||||
|
|
||||||
|
import (
|
||||||
|
jwt "ferry/pkg/jwtauth"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
func RegisterTaskRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
|
//taskRouter := v1.Group("/task").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
|
//{
|
||||||
|
// taskRouter.GET("", process.TaskList)
|
||||||
|
// taskRouter.GET("/details", process.TaskDetails)
|
||||||
|
// taskRouter.POST("", process.CreateTask)
|
||||||
|
// taskRouter.PUT("", process.UpdateTask)
|
||||||
|
// taskRouter.DELETE("", process.DeleteTask)
|
||||||
|
//}
|
||||||
|
}
|
24
router/process/tpl.go
Normal file
24
router/process/tpl.go
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
package process
|
||||||
|
|
||||||
|
import (
|
||||||
|
//"ferry/apis/process"
|
||||||
|
//"ferry/middleware"
|
||||||
|
jwt "ferry/pkg/jwtauth"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RegisterTplRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
|
//tplRouter := v1.Group("/tpl").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
|
//{
|
||||||
|
// tplRouter.GET("", process.TemplateList)
|
||||||
|
// tplRouter.POST("", process.CreateTemplate)
|
||||||
|
// tplRouter.PUT("", process.UpdateTemplate)
|
||||||
|
// tplRouter.DELETE("", process.DeleteTemplate)
|
||||||
|
// tplRouter.GET("/details", process.TemplateDetails)
|
||||||
|
//}
|
||||||
|
}
|
23
router/process/workOrder.go
Normal file
23
router/process/workOrder.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
@Author : lanyulei
|
||||||
|
*/
|
||||||
|
|
||||||
|
package process
|
||||||
|
|
||||||
|
import (
|
||||||
|
jwt "ferry/pkg/jwtauth"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
func RegisterWorkOrderRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
|
//workOrderRouter := v1.Group("/work-order").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
|
//{
|
||||||
|
// workOrderRouter.GET("/process-structure", process.ProcessStructure)
|
||||||
|
// workOrderRouter.POST("/create", process.CreateWorkOrder)
|
||||||
|
// workOrderRouter.GET("/list", process.WorkOrderList)
|
||||||
|
// workOrderRouter.POST("/handle", process.ProcessWorkOrder)
|
||||||
|
// workOrderRouter.GET("/unity", process.UnityWorkOrder)
|
||||||
|
// workOrderRouter.POST("/inversion", process.InversionWorkOrder)
|
||||||
|
//}
|
||||||
|
}
|
@ -1,37 +1,82 @@
|
|||||||
package router
|
package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"ferry/apis/monitor"
|
||||||
|
"ferry/apis/system"
|
||||||
|
"ferry/handler"
|
||||||
"ferry/pkg/jwtauth"
|
"ferry/pkg/jwtauth"
|
||||||
jwt "ferry/pkg/jwtauth"
|
jwt "ferry/pkg/jwtauth"
|
||||||
|
"ferry/router/process"
|
||||||
|
systemRouter "ferry/router/system"
|
||||||
|
|
||||||
|
ginSwagger "github.com/swaggo/gin-swagger"
|
||||||
|
"github.com/swaggo/gin-swagger/swaggerFiles"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
_ "github.com/gin-gonic/gin"
|
_ "github.com/gin-gonic/gin"
|
||||||
)
|
)
|
||||||
|
|
||||||
// 路由示例
|
func InitSysRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gin.RouterGroup {
|
||||||
func InitExamplesRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gin.Engine {
|
g := r.Group("")
|
||||||
|
|
||||||
// 无需认证的路由
|
sysBaseRouter(g)
|
||||||
examplesNoCheckRoleRouter(r)
|
// 静态文件
|
||||||
// 需要认证的路由
|
sysStaticFileRouter(g)
|
||||||
examplesCheckRoleRouter(r, authMiddleware)
|
|
||||||
|
|
||||||
return r
|
// swagger;注意:生产环境可以注释掉
|
||||||
|
sysSwaggerRouter(g)
|
||||||
|
|
||||||
|
// 无需认证
|
||||||
|
sysNoCheckRoleRouter(g)
|
||||||
|
// 需要认证
|
||||||
|
sysCheckRoleRouterInit(g, authMiddleware)
|
||||||
|
|
||||||
|
return g
|
||||||
}
|
}
|
||||||
|
|
||||||
// 无需认证的路由示例
|
func sysBaseRouter(r *gin.RouterGroup) {
|
||||||
func examplesNoCheckRoleRouter(r *gin.Engine) {
|
r.GET("/", system.HelloWorld)
|
||||||
|
r.GET("/info", handler.Ping)
|
||||||
//v1 := r.Group("/api/v1")
|
|
||||||
//v1.GET("/examples/list", examples.apis)
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 需要认证的路由示例
|
func sysStaticFileRouter(r *gin.RouterGroup) {
|
||||||
func examplesCheckRoleRouter(r *gin.Engine, authMiddleware *jwtauth.GinJWTMiddleware) {
|
r.Static("/static", "./static")
|
||||||
//v1 := r.Group("/api/v1")
|
}
|
||||||
//v1auth := v1.Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
|
||||||
//{
|
func sysSwaggerRouter(r *gin.RouterGroup) {
|
||||||
// v1auth.GET("/examples/list", examples.apis)
|
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
||||||
//}
|
}
|
||||||
|
|
||||||
|
func sysNoCheckRoleRouter(r *gin.RouterGroup) {
|
||||||
|
v1 := r.Group("/api/v1")
|
||||||
|
|
||||||
|
v1.GET("/monitor/server", monitor.ServerInfo)
|
||||||
|
v1.GET("/getCaptcha", system.GenerateCaptchaHandler)
|
||||||
|
v1.GET("/menuTreeselect", system.GetMenuTreeelect)
|
||||||
|
}
|
||||||
|
|
||||||
|
func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwtauth.GinJWTMiddleware) {
|
||||||
|
r.POST("/login", authMiddleware.LoginHandler)
|
||||||
|
// Refresh time can be longer than token timeout
|
||||||
|
r.GET("/refresh_token", authMiddleware.RefreshHandler)
|
||||||
|
|
||||||
|
v1 := r.Group("/api/v1")
|
||||||
|
|
||||||
|
// 系统管理
|
||||||
|
systemRouter.RegisterPageRouter(v1, authMiddleware)
|
||||||
|
systemRouter.RegisterBaseRouter(v1, authMiddleware)
|
||||||
|
systemRouter.RegisterDeptRouter(v1, authMiddleware)
|
||||||
|
systemRouter.RegisterSysUserRouter(v1, authMiddleware)
|
||||||
|
systemRouter.RegisterRoleRouter(v1, authMiddleware)
|
||||||
|
systemRouter.RegisterUserCenterRouter(v1, authMiddleware)
|
||||||
|
systemRouter.RegisterPostRouter(v1, authMiddleware)
|
||||||
|
systemRouter.RegisterMenuRouter(v1, authMiddleware)
|
||||||
|
systemRouter.RegisterLoginLogRouter(v1, authMiddleware)
|
||||||
|
|
||||||
|
// 流程中心
|
||||||
|
process.RegisterClassifyRouter(v1, authMiddleware)
|
||||||
|
process.RegisterProcessRouter(v1, authMiddleware)
|
||||||
|
process.RegisterTaskRouter(v1, authMiddleware)
|
||||||
|
process.RegisterTplRouter(v1, authMiddleware)
|
||||||
|
process.RegisterWorkOrderRouter(v1, authMiddleware)
|
||||||
}
|
}
|
||||||
|
@ -1,77 +1,17 @@
|
|||||||
package router
|
package system
|
||||||
|
|
||||||
import (
|
import (
|
||||||
log2 "ferry/apis/log"
|
log2 "ferry/apis/log"
|
||||||
"ferry/apis/monitor"
|
|
||||||
"ferry/apis/system"
|
"ferry/apis/system"
|
||||||
_ "ferry/docs"
|
_ "ferry/docs"
|
||||||
"ferry/handler"
|
"ferry/handler"
|
||||||
"ferry/middleware"
|
"ferry/middleware"
|
||||||
"ferry/pkg/jwtauth"
|
|
||||||
jwt "ferry/pkg/jwtauth"
|
jwt "ferry/pkg/jwtauth"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
ginSwagger "github.com/swaggo/gin-swagger"
|
|
||||||
"github.com/swaggo/gin-swagger/swaggerFiles"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func InitSysRouter(r *gin.Engine, authMiddleware *jwt.GinJWTMiddleware) *gin.RouterGroup {
|
func RegisterBaseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
g := r.Group("")
|
|
||||||
sysBaseRouter(g)
|
|
||||||
// 静态文件
|
|
||||||
sysStaticFileRouter(g)
|
|
||||||
|
|
||||||
// swagger;注意:生产环境可以注释掉
|
|
||||||
sysSwaggerRouter(g)
|
|
||||||
|
|
||||||
// 无需认证
|
|
||||||
sysNoCheckRoleRouter(g)
|
|
||||||
// 需要认证
|
|
||||||
sysCheckRoleRouterInit(g, authMiddleware)
|
|
||||||
|
|
||||||
return g
|
|
||||||
}
|
|
||||||
|
|
||||||
func sysBaseRouter(r *gin.RouterGroup) {
|
|
||||||
r.GET("/", system.HelloWorld)
|
|
||||||
r.GET("/info", handler.Ping)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sysStaticFileRouter(r *gin.RouterGroup) {
|
|
||||||
r.Static("/static", "./static")
|
|
||||||
}
|
|
||||||
|
|
||||||
func sysSwaggerRouter(r *gin.RouterGroup) {
|
|
||||||
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
|
|
||||||
}
|
|
||||||
|
|
||||||
func sysNoCheckRoleRouter(r *gin.RouterGroup) {
|
|
||||||
v1 := r.Group("/api/v1")
|
|
||||||
|
|
||||||
v1.GET("/monitor/server", monitor.ServerInfo)
|
|
||||||
v1.GET("/getCaptcha", system.GenerateCaptchaHandler)
|
|
||||||
v1.GET("/menuTreeselect", system.GetMenuTreeelect)
|
|
||||||
}
|
|
||||||
|
|
||||||
func sysCheckRoleRouterInit(r *gin.RouterGroup, authMiddleware *jwtauth.GinJWTMiddleware) {
|
|
||||||
r.POST("/login", authMiddleware.LoginHandler)
|
|
||||||
// Refresh time can be longer than token timeout
|
|
||||||
r.GET("/refresh_token", authMiddleware.RefreshHandler)
|
|
||||||
|
|
||||||
v1 := r.Group("/api/v1")
|
|
||||||
|
|
||||||
registerPageRouter(v1, authMiddleware)
|
|
||||||
registerBaseRouter(v1, authMiddleware)
|
|
||||||
registerDeptRouter(v1, authMiddleware)
|
|
||||||
registerSysUserRouter(v1, authMiddleware)
|
|
||||||
registerRoleRouter(v1, authMiddleware)
|
|
||||||
registerUserCenterRouter(v1, authMiddleware)
|
|
||||||
registerPostRouter(v1, authMiddleware)
|
|
||||||
registerMenuRouter(v1, authMiddleware)
|
|
||||||
registerLoginLogRouter(v1, authMiddleware)
|
|
||||||
}
|
|
||||||
|
|
||||||
func registerBaseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
|
||||||
v1auth := v1.Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
v1auth := v1.Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
v1auth.GET("/getinfo", system.GetInfo)
|
v1auth.GET("/getinfo", system.GetInfo)
|
||||||
@ -85,7 +25,7 @@ func registerBaseRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerPageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func RegisterPageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
v1auth := v1.Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
v1auth := v1.Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
v1auth.GET("/deptList", system.GetDeptList)
|
v1auth.GET("/deptList", system.GetDeptList)
|
||||||
@ -98,7 +38,7 @@ func registerPageRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerUserCenterRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func RegisterUserCenterRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
user := v1.Group("/user").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
user := v1.Group("/user").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
user.GET("/profile", system.GetSysUserProfile)
|
user.GET("/profile", system.GetSysUserProfile)
|
||||||
@ -107,7 +47,7 @@ func registerUserCenterRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMid
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerLoginLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func RegisterLoginLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
loginlog := v1.Group("/loginlog").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
loginlog := v1.Group("/loginlog").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
loginlog.GET("/:infoId", log2.GetLoginLog)
|
loginlog.GET("/:infoId", log2.GetLoginLog)
|
||||||
@ -117,7 +57,7 @@ func registerLoginLogRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerPostRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func RegisterPostRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
post := v1.Group("/post").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
post := v1.Group("/post").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
post.GET("/:postId", system.GetPost)
|
post.GET("/:postId", system.GetPost)
|
||||||
@ -127,7 +67,7 @@ func registerPostRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func RegisterMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
menu := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
menu := v1.Group("/menu").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
menu.GET("/:id", system.GetMenu)
|
menu.GET("/:id", system.GetMenu)
|
||||||
@ -137,7 +77,7 @@ func registerMenuRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func RegisterRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
role := v1.Group("/role").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
role := v1.Group("/role").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
role.GET("/:roleId", system.GetRole)
|
role.GET("/:roleId", system.GetRole)
|
||||||
@ -147,7 +87,7 @@ func registerRoleRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlewar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func RegisterSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
sysuser := v1.Group("/sysUser").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
sysuser := v1.Group("/sysUser").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
sysuser.GET("/:userId", system.GetSysUser)
|
sysuser.GET("/:userId", system.GetSysUser)
|
||||||
@ -158,7 +98,7 @@ func registerSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func registerDeptRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
func RegisterDeptRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
|
||||||
dept := v1.Group("/dept").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
dept := v1.Group("/dept").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
|
||||||
{
|
{
|
||||||
dept.GET("/:deptId", system.GetDept)
|
dept.GET("/:deptId", system.GetDept)
|
Loading…
x
Reference in New Issue
Block a user