Files
gfast-mandate/resource/template/vm/go/controller.template

389 lines
16 KiB
Plaintext

// ==========================================================================
// GFast自动生成controller操作代码。
// 生成日期:{{date "Y-m-d H:i:s"}}
// 生成路径: {{.table.PackageName}}/controller/{{.table.TableName}}.go
// 生成人:{{.table.FunctionAuthor}}
// desc:{{.table.FunctionName}}
// company:云南奇讯科技有限公司
// ==========================================================================
////
{{$structName := .table.BusinessName | CaseCamelLower}}
{{$businessName := .table.BusinessName | CaseCamelLower}}
package controller
////
{{$hasGmap:=false}}
{{$hasGstr:=false}}
{{$hasGconv:=false}}
{{$hasSystemApi:=false}}
{{$hasCommonService:=false}}
{{$excel :=false}}
{{$serviceVal := "service"}}
{{if ne .table.ModuleName "system"}}
{{$serviceVal = "systemService"}}
{{end}}
{{$impSystemService := false}}
{{if or .table.ExcelPort .table.ExcelImp}}
{{$excel = true}}
{{end}}
{{if .table.ExcelPort}}
{{range $index, $column := .table.Columns}}
{{if ne $column.DictType ""}}
{{$hasGmap = true}}
{{$hasGconv = true}}
{{$hasSystemApi = true}}
{{$hasCommonService = true}}
{{if eq $column.HtmlType "checkbox" "" "selects" "treeSelects"}}
{{$hasGstr = true}}
{{end}}
{{else if ne $column.LinkTableName ""}}
{{if eq $column.HtmlType "checkbox" "" "selects" "treeSelects"}}
{{$hasGstr = true}}
{{end}}
{{end}}
{{end}}
{{end}}
import (
"context"
"{{.goModName}}/api/v1/{{.modulePath}}"
"{{.goModName}}/{{.table.PackageName}}/service"
{{if ne $.table.ModuleName "system"}}
systemController "{{.goModName}}/internal/app/system/controller"
{{end}}
{{if gt (len .table.LinkedTables) 0}}
"errors"
{{if ne $.table.ModuleName "system"}}
{{$impSystemService = true}}
{{else}}
"{{.goModName}}/internal/app/system/service"
{{end}}
{{end}}
{{if .table.ExcelPort }}
{{if $hasGmap}}
"github.com/gogf/gf/v2/container/gmap"
{{end}}
"github.com/gogf/gf/v2/encoding/gurl"
"github.com/gogf/gf/v2/net/ghttp"
{{if $hasGstr}}
"github.com/gogf/gf/v2/text/gstr"
{{end}}
{{if $hasGconv}}
"github.com/gogf/gf/v2/util/gconv"
{{end}}
{{if and (ne $.table.ModuleName "system") $hasSystemApi}}
systemApi "{{$.goModName}}/api/v1/system"
{{end}}
{{if $hasCommonService}}
commonService "{{.goModName}}/internal/app/common/service"
{{end}}
"{{$.goModName}}/{{$.table.PackageName}}/model"
{{end}}
{{if $excel}}
"{{$.goModName}}/library/libUtils"
"github.com/xuri/excelize/v2"
{{end}}
{{if not $impSystemService}}
{{range $index,$column:= .table.Columns}}
{{if eq $column.HtmlType "switch"}}
{{$impSystemService = true}}
{{end}}
{{end}}
{{end}}
{{if $impSystemService}}
systemService "{{.goModName}}/internal/app/system/service"
{{end}}
)
////
type {{$structName}}Controller struct {
{{if ne $.table.ModuleName "system"}}
systemController.BaseController
{{else}}
BaseController
{{end}}
}
////
var {{.table.ClassName}} = new({{$structName}}Controller)
////
// List 列表
func (c *{{$structName}}Controller) List(ctx context.Context, req *{{.table.ModuleName}}.{{.table.ClassName}}SearchReq) (res *{{.table.ModuleName}}.{{.table.ClassName}}SearchRes, err error) {
res = new({{.table.ModuleName}}.{{.table.ClassName}}SearchRes)
res.{{.table.ClassName}}SearchRes, err = service.{{.table.ClassName}}().List(ctx, &req.{{.table.ClassName}}SearchReq)
return
}
{{if .table.ExcelPort }}
////
// Export 导出excel
func (c *{{$structName}}Controller) Export(ctx context.Context, req *{{.table.ModuleName}}.{{.table.ClassName}}ExportReq) (res *{{.table.ModuleName}}.{{.table.ClassName}}ExportRes, err error) {
var (
r=ghttp.RequestFromCtx(ctx)
listData []*model.{{.table.ClassName}}InfoRes
//表头
{{$tableHeader := ""}}
{{range $index, $column := .table.Columns}}
{{if and (ne $column.HtmlType "richtext") (ne $column.HtmlType "imagefile") (ne $column.HtmlType "images") (ne $column.HtmlType "file") (ne $column.HtmlType "files")}}
{{$tableHeader = concat $tableHeader `"` $column.ColumnComment `"` "," }}
{{end}}
{{end}}
tableHead = []interface{}{ {{$tableHeader}} }
excelData [][]interface{}
//字典选项处理
{{$dictArr:=newArray}}
{{range $index, $column := .table.Columns}}
{{if and (ne $column.DictType "") (ne (inArray $dictArr $column.DictType) true)}}
{{$dictArr = append $dictArr $column.DictType}}
{{end}}
{{end}}
{{$apiModelName := "system"}}
{{if ne $.table.ModuleName "system"}}
{{$apiModelName = "systemApi"}}
{{end}}
{{range $index, $column := $dictArr}}
{{$column|CaseCamelLower}} *{{$apiModelName}}.GetDictRes
{{$column|CaseCamelLower}}Map = gmap.New()
{{end}}
)
req.PageNum = 1
req.PageSize = 500
//获取字典数据
{{range $index, $column := $dictArr}}
{{$column|CaseCamelLower}},err = commonService.SysDictData().GetDictWithDataByType(ctx,"{{$column}}","")
if err!=nil{
return
}
{{end}}
{{range $index, $column := $dictArr}}
for _,v:=range {{$column|CaseCamelLower}}.Values{
{{$column|CaseCamelLower}}Map.Set(v.DictValue,v.DictLabel)
}
{{end}}
excelData = append(excelData,tableHead)
for {
listData,err = service.{{.table.ClassName}}().GetExportData(ctx,&req.{{.table.ClassName}}SearchReq)
if err!=nil{
return
}
if listData==nil{
break
}
for _,v:=range listData{
var (
{{range $index, $column := .table.Columns}}
{{if and (ne $column.HtmlType "richtext") (ne $column.HtmlType "imagefile") (ne $column.HtmlType "images") (ne $column.HtmlType "file") (ne $column.HtmlType "files")}}
{{if or (ne $column.DictType "") (ne $column.LinkTableName "")}}
{{if eq $column.HtmlType "checkbox" "" "selects" "treeSelects"}}
//多选-{{$column.ColumnComment}}
{{$column.HtmlField}} []string
{{if ne $column.DictType ""}}
{{$column.HtmlField}}Arr = gstr.Split(v.{{$column.GoField}},",")
{{end}}
{{else}}
//单选-{{$column.ColumnComment}}
{{if ne $column.DictType ""}}
{{$column.HtmlField}} interface{}
{{else}}
{{$column.HtmlField}} string
{{end}}
{{end}}
{{else if eq $column.ColumnName "created_by" "updated_by"}}
//{{$column.ColumnComment}}
{{$column.HtmlField}} string
{{end}}
{{end}}
{{end}}
)
{{range $index, $column := .table.Columns}}
{{if and (ne $column.HtmlType "richtext") (ne $column.HtmlType "imagefile") (ne $column.HtmlType "images") (ne $column.HtmlType "file") (ne $column.HtmlType "files")}}
{{if ne $column.DictType ""}}
{{if eq $column.HtmlType "checkbox" "" "selects" "treeSelects"}}
//字典-多选-{{$column.ColumnComment}}
for _,ctv:=range {{$column.HtmlField}}Arr {
if {{$column.DictType|CaseCamelLower}}Map.Contains(ctv){
{{$column.HtmlField}} = append({{$column.HtmlField}},gconv.String({{$column.DictType|CaseCamelLower}}Map.Get(ctv)))
}
}
{{else}}
//字典-单选-{{$column.ColumnComment}}
{{$column.HtmlField}} = {{$column.DictType|CaseCamelLower}}Map.Get(gconv.String(v.{{$column.GoField}}))
{{end}}
{{else if ne $column.LinkTableName ""}}
{{if eq $column.HtmlType "checkbox" "" "selects" "treeSelects"}}
//关联表-多选-{{$column.ColumnComment}}
for _,ctv :=range v.Linked{{$column.GoField}}{
{{$column.HtmlField}} = append({{$column.HtmlField}},ctv.{{$column.LinkLabelName|CaseCamel}})
}
{{else}}
//关联表-单选-{{$column.ColumnComment}}
if v.Linked{{$column.GoField}}!=nil{
{{$column.HtmlField}} = v.Linked{{$column.GoField}}.{{$column.LinkLabelName|CaseCamel}}
}
{{end}}
{{else if eq $column.ColumnName "created_by"}}
//{{$column.ColumnComment}}
if v.CreatedUser!=nil{
{{$column.HtmlField}} = v.CreatedUser.UserNickname
}
{{else if eq $column.ColumnName "updated_by"}}
//{{$column.ColumnComment}}
if v.UpdatedUser!=nil{
{{$column.HtmlField}} = v.UpdatedUser.UserNickname
}
{{end}}
{{end}}
{{end}}
dt := []interface{}{
{{range $index, $column := .table.Columns}}
{{if and (ne $column.HtmlType "richtext") (ne $column.HtmlType "imagefile") (ne $column.HtmlType "images") (ne $column.HtmlType "file") (ne $column.HtmlType "files")}}
{{if ne $column.DictType ""}}
{{if eq $column.HtmlType "checkbox" "" "selects" "treeSelects"}}
//字典-多选-{{$column.ColumnComment}}
gstr.Join({{$column.HtmlField}},","),
{{else}}
//字典-单选-{{$column.ColumnComment}}
{{$column.HtmlField}},
{{end}}
{{else if ne $column.LinkTableName ""}}
{{if eq $column.HtmlType "checkbox" "" "selects" "treeSelects"}}
//关联表-多选-{{$column.ColumnComment}}
gstr.Join({{$column.HtmlField}},","),
{{else}}
//关联表-单选-{{$column.ColumnComment}}
{{$column.HtmlField}},
{{end}}
{{else if eq $column.ColumnName "created_by"}}
//{{$column.ColumnComment}}
{{$column.HtmlField}} ,
{{else if eq $column.ColumnName "updated_by"}}
//{{$column.ColumnComment}}
{{$column.HtmlField}},
{{else if eq $column.HtmlType "date" "datetime"}}
v.{{$column.GoField}}.Format("Y-m-d H:i:s"),
{{else}}
v.{{$column.GoField}},
{{end}}
{{end}}
{{end}}
}
excelData = append(excelData,dt)
}
req.PageNum++
}
//创建excel处理对象
excel := new(libUtils.ExcelHelper).CreateFile()
defer excel.Close()
excel.ArrToExcel("Sheet1", "A1", excelData)
col, _ := excelize.ColumnNumberToName(len(tableHead))
row := len(excelData)
cr, _ := excelize.JoinCellName(col, row)
excel.SetCellBorder("Sheet1", "A1", cr)
_, err = excel.WriteTo(r.Response.BufferWriter)
if err != nil {
return
}
r.Response.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
r.Response.Header().Set("Accept-Ranges", "bytes")
r.Response.Header().Set("Access-Control-Expose-Headers", "*")
r.Response.Header().Set("Content-Disposition", "attachment; filename="+gurl.Encode("{{.table.TableComment}}")+".xlsx")
r.Response.Buffer()
r.Exit()
return
}
{{end}}
{{if .table.ExcelImp}}
func (c *{{$structName}}Controller) ExcelTemplate(ctx context.Context,req *{{.table.ModuleName}}.{{.table.ClassName}}ExcelTemplateReq)(res *{{.table.ModuleName}}.{{.table.ClassName}}ExcelTemplateRes,err error){
var(
r = ghttp.RequestFromCtx(ctx)
//表头
{{$tableHeader := ""}}
{{range $index, $column := .table.Columns}}
{{if and (or (ne $column.IsPk true) $.table.IsPkInsertable) (ne $column.HtmlType "imagefile") (ne $column.HtmlType "images") (ne $column.HtmlType "file") (ne $column.HtmlType "files")}}
{{$tableHeader = concat $tableHeader `"` $column.ColumnComment `"` "," }}
{{end}}
{{end}}
tableHead = []interface{}{ {{$tableHeader}} }
excelData = [][]interface{}{tableHead}
)
//创建excel处理对象
excel := new(libUtils.ExcelHelper).CreateFile()
defer excel.Close()
excel.ArrToExcel("Sheet1", "A1", excelData)
col, _ := excelize.ColumnNumberToName(len(tableHead))
row := len(excelData)
cr, _ := excelize.JoinCellName(col, row)
excel.SetCellBorder("Sheet1", "A1", cr)
_, err = excel.WriteTo(r.Response.BufferWriter)
if err != nil {
return
}
r.Response.Header().Set("Content-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
r.Response.Header().Set("Accept-Ranges", "bytes")
r.Response.Header().Set("Access-Control-Expose-Headers", "*")
r.Response.Header().Set("Content-Disposition", "attachment; filename="+gurl.Encode("{{.table.TableComment}}模板")+".xlsx")
r.Response.Buffer()
r.Exit()
return
}
func(c *{{$structName}}Controller)Import(ctx context.Context,req *{{.table.ModuleName}}.{{.table.ClassName}}ImportReq)(res *{{.table.ModuleName}}.{{.table.ClassName}}ImportRes,err error){
err = service.{{.table.ClassName}}().Import(ctx,req.File)
return
}
{{end}}
{{if gt (len .table.LinkedTables) 0}}
// Linked{{$.table.ClassName}}DataSearch 相关连表查询数据
func(c *{{$structName}}Controller) Linked{{$.table.ClassName}}DataSearch(ctx context.Context, req *{{.table.ModuleName}}.Linked{{$.table.ClassName}}DataSearchReq) (res *{{.table.ModuleName}}.Linked{{$.table.ClassName}}DataSearchRes, err error) {
if !{{$serviceVal}}.SysUser().AccessRule(ctx, {{$serviceVal}}.Context().GetUserId(ctx), "{{.apiVersion}}/{{.modulePath}}/{{.table.BusinessName | CaseCamelLower}}/list") {
err = errors.New("没有访问权限")
return
}
res = new({{.table.ModuleName}}.Linked{{$.table.ClassName}}DataSearchRes)
res.Linked{{$.table.ClassName}}DataSearchRes,err = service.{{.table.ClassName}}().Linked{{$.table.ClassName}}DataSearch(ctx)
return
}
{{end}}
////
// Get 获取{{.table.FunctionName}}
func (c *{{$structName}}Controller) Get(ctx context.Context, req *{{.table.ModuleName}}.{{.table.ClassName}}GetReq) (res *{{.table.ModuleName}}.{{.table.ClassName}}GetRes, err error) {
res = new({{.table.ModuleName}}.{{.table.ClassName}}GetRes)
res.{{.table.ClassName}}InfoRes,err = service.{{.table.ClassName}}().GetBy{{.table.PkColumn.GoField}}(ctx, req.{{.table.PkColumn.GoField}})
return
}
////
// Add 添加{{.table.FunctionName}}
func (c *{{$structName}}Controller) Add(ctx context.Context, req *{{.table.ModuleName}}.{{.table.ClassName}}AddReq) (res *{{.table.ModuleName}}.{{.table.ClassName}}AddRes, err error) {
err = service.{{.table.ClassName}}().Add(ctx, req.{{.table.ClassName}}AddReq)
return
}
////
// Edit 修改{{.table.FunctionName}}
func (c *{{$structName}}Controller) Edit(ctx context.Context, req *{{.table.ModuleName}}.{{.table.ClassName}}EditReq) (res *{{.table.ModuleName}}.{{.table.ClassName}}EditRes, err error) {
err = service.{{.table.ClassName}}().Edit(ctx, req.{{.table.ClassName}}EditReq)
return
}
////
// Delete 删除{{.table.FunctionName}}
func (c *{{$structName}}Controller) Delete(ctx context.Context, req *{{.table.ModuleName}}.{{.table.ClassName}}DeleteReq) (res *{{.table.ModuleName}}.{{.table.ClassName}}DeleteRes, err error) {
err = service.{{.table.ClassName}}().Delete(ctx, req.{{$.table.PkColumn.GoField}}s)
return
}
{{range $index,$column:= .table.Columns}}
{{if eq $column.HtmlType "switch"}}
// {{$.table.FunctionName}}{{$column.ColumnComment}}修改(状态)
func(c *{{$structName}}Controller)Change{{$column.GoField}}(ctx context.Context, req *{{$.table.ModuleName}}.{{$.table.ClassName}}{{$column.GoField}}SwitchReq)(res *{{$.table.ModuleName}}.{{$.table.ClassName}}{{$column.GoField}}SwitchRes,err error){
if !{{$serviceVal}}.SysUser().AccessRule(ctx, {{$serviceVal}}.Context().GetUserId(ctx), "{{$.apiVersion}}/{{$.modulePath}}/{{$.table.BusinessName | CaseCamelLower}}/edit") {
err = errors.New("没有修改权限")
return
}
err = service.{{$.table.ClassName}}().Change{{$column.GoField}}(ctx,req.{{$.table.PkColumn.GoField}},req.{{$column.GoField}})
return
}
{{end}}
{{end}}