ferry/apis/process/process.go

245 lines
6.0 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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

package process
import (
"errors"
"ferry/global/orm"
"ferry/models/process"
process2 "ferry/models/process"
"ferry/pkg/pagination"
"ferry/tools"
"ferry/tools/app"
"fmt"
"github.com/gin-gonic/gin"
)
/*
@Author : lanyulei
*/
// 流程列表
func ProcessList(c *gin.Context) {
var (
err error
processList []*struct {
process2.Info
CreateUser string `json:"create_user"`
CreateName string `json:"create_name"`
ClassifyName string `json:"classify_name"`
}
)
SearchParams := map[string]map[string]interface{}{
"like": pagination.RequestParams(c),
}
db := orm.Eloquent.Model(&process2.Info{}).
Joins("left join sys_user on sys_user.user_id = p_process_info.creator").
Joins("left join p_process_classify on p_process_classify.id = p_process_info.classify").
Select("p_process_info.id, p_process_info.create_time, p_process_info.update_time, p_process_info.name, p_process_info.creator, p_process_classify.name as classify_name, sys_user.username as create_user, sys_user.nick_name as create_name")
result, err := pagination.Paging(&pagination.Param{
C: c,
DB: db,
}, &processList, SearchParams, "p_process_info")
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("查询流程模版失败,%v", err.Error()))
return
}
app.OK(c, result, "查询流程列表成功")
}
// 创建流程
func CreateProcess(c *gin.Context) {
var (
err error
processValue process2.Info
processCount int
)
err = c.ShouldBind(&processValue)
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("参数绑定失败,%v", err.Error()))
return
}
// 确定流程名称是否重复
err = orm.Eloquent.Model(&processValue).
Where("name = ?", processValue.Name).
Count(&processCount).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("流程信息查询失败,%v", err.Error()))
return
}
if processCount > 0 {
app.Error(c, -1, errors.New("流程名称重复"), "")
return
}
processValue.Creator = tools.GetUserId(c)
err = orm.Eloquent.Create(&processValue).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("创建流程失败,%v", err.Error()))
return
}
app.OK(c, processValue, "流程创建成功")
}
// 更新流程
func UpdateProcess(c *gin.Context) {
var (
err error
processValue process2.Info
)
err = c.ShouldBind(&processValue)
if err != nil {
app.Error(c, -1, err, "")
return
}
err = orm.Eloquent.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,
"notice": processValue.Notice,
"icon": processValue.Icon,
"remarks": processValue.Remarks,
}).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("更新流程信息失败,%v", err.Error()))
return
}
app.OK(c, processValue, "更新流程信息成功")
}
// 删除流程
func DeleteProcess(c *gin.Context) {
processId := c.DefaultQuery("processId", "")
if processId == "" {
app.Error(c, -1, errors.New("参数不正确请确定参数processId是否传递"), "")
return
}
err := orm.Eloquent.Delete(process2.Info{}, "id = ?", processId).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("删除流程失败, %v", err.Error()))
return
}
app.OK(c, "", "删除流程成功")
}
// 流程详情
func ProcessDetails(c *gin.Context) {
processId := c.DefaultQuery("processId", "")
if processId == "" {
app.Error(c, -1, errors.New("参数不正确请确定参数processId是否传递"), "")
return
}
var processValue process2.Info
err := orm.Eloquent.Model(&processValue).
Where("id = ?", processId).
Find(&processValue).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("查询流程详情失败, %v", err.Error()))
return
}
app.OK(c, processValue, "查询流程详情成功")
}
// 分类流程列表
func ClassifyProcessList(c *gin.Context) {
var (
err error
classifyIdList []int
classifyList []*struct {
process2.Classify
ProcessList []*process2.Info `json:"process_list"`
}
)
processName := c.DefaultQuery("name", "")
if processName == "" {
err = orm.Eloquent.Model(&process2.Classify{}).Find(&classifyList).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("获取分类列表失败,%v", err.Error()))
return
}
} else {
err = orm.Eloquent.Model(&process2.Info{}).
Where("name LIKE ?", fmt.Sprintf("%%%v%%", processName)).
Pluck("distinct classify", &classifyIdList).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("获取分类失败,%v", err.Error()))
return
}
err = orm.Eloquent.Model(&process2.Classify{}).
Where("id in (?)", classifyIdList).
Find(&classifyList).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("获取分类失败,%v", err.Error()))
return
}
}
for _, item := range classifyList {
err = orm.Eloquent.Model(&process2.Info{}).
Where("classify = ? and name LIKE ?", item.Id, fmt.Sprintf("%%%v%%", processName)).
Select("id, create_time, update_time, name, icon, remarks").
Find(&item.ProcessList).Error
if err != nil {
app.Error(c, -1, err, fmt.Sprintf("获取流程失败,%v", err.Error()))
return
}
}
app.OK(c, classifyList, "成功获取数据")
}
// 克隆流程
func CloneProcess(c *gin.Context) {
var (
err error
id string
info process.Info
)
id = c.Param("id")
err = orm.Eloquent.Find(&info, id).Error
if err != nil {
app.Error(c, -1, err, "查询流程数据失败")
return
}
err = orm.Eloquent.Create(&process.Info{
Name: info.Name + "-copy",
Icon: info.Icon,
Structure: info.Structure,
Classify: info.Classify,
Tpls: info.Tpls,
Task: info.Task,
SubmitCount: info.SubmitCount,
Creator: tools.GetUserId(c),
Notice: info.Notice,
Remarks: info.Remarks,
}).Error
if err != nil {
app.Error(c, -1, err, "克隆流程失败")
return
}
app.OK(c, nil, "")
}