|
|
package ProtoController
|
|
|
|
|
|
import (
|
|
|
"bytes"
|
|
|
"dsAutoCode/Dao/ProtoDao"
|
|
|
"dsAutoCode/Model"
|
|
|
"dsAutoCode/Service/ProtoService"
|
|
|
"dsAutoCode/Utils/CommonUtil"
|
|
|
"github.com/gin-gonic/gin"
|
|
|
"log"
|
|
|
"net/http"
|
|
|
"strings"
|
|
|
"text/template"
|
|
|
)
|
|
|
|
|
|
/**
|
|
|
功能:生成Service层的操作代码
|
|
|
作者:黄海
|
|
|
时间:2020-04-23
|
|
|
*/
|
|
|
func CodeService(c *gin.Context) {
|
|
|
var operateType string
|
|
|
var tableName string
|
|
|
type VarStruct struct {
|
|
|
Description string
|
|
|
ParameterName string
|
|
|
HttpType string
|
|
|
IsInt32 bool
|
|
|
Parameters string
|
|
|
}
|
|
|
var Parameters string
|
|
|
var RpcServiceParameters string
|
|
|
interfaceId := c.Query("interfaceId")
|
|
|
interfaceName := c.Query("interfaceName")
|
|
|
controllerName := c.Query("controllerName")
|
|
|
authorId := c.Query("author_id")
|
|
|
authorName := ProtoService.GetPersonInfoById(authorId)["person_name"].(string)
|
|
|
var description string
|
|
|
//返回的结构体前缀
|
|
|
var argPrefix string
|
|
|
|
|
|
//对应的结构体
|
|
|
structId,_:=ProtoDao.GetStructIdByInterfaceId(interfaceId)
|
|
|
//argPrefix 替换为结构体名称
|
|
|
_,_,structBean:=ProtoDao.GetStructInfoById(structId)
|
|
|
argPrefix=structBean["struct_name"].(string)
|
|
|
|
|
|
//如果存在swagger的接口配置,一般是指常规的接口,读取swagger参数配置
|
|
|
if controllerName != "" {
|
|
|
var controllerId string
|
|
|
_, controllerId, _ = ProtoDao.GetControllerInfoByName(controllerName)
|
|
|
//swagger接口对应的参数
|
|
|
list := ProtoDao.GetControllerInfoById(controllerId)
|
|
|
for i := 0; i < len(list); i++ {
|
|
|
controllerParameterName := list[i]["controller_parameter_name"].(string)
|
|
|
controllerParameterType := list[i]["controller_parameter_type"].(string)
|
|
|
if controllerParameterType == "integer" {
|
|
|
controllerParameterType = "int32"
|
|
|
}
|
|
|
Parameters += controllerParameterName + " " + controllerParameterType + ","
|
|
|
RpcServiceParameters += CommonUtil.StrFirstToUpper(controllerParameterName) + " : " + CommonUtil.StrFirstToLower(controllerParameterName) + " ,"
|
|
|
}
|
|
|
_, _, description = ProtoDao.GetControllerInfoByName(controllerName)
|
|
|
operateType = ProtoService.GetOperateType(interfaceName)
|
|
|
//如果是Delete操作,那么需要更改RpcServiceParameters,Parameters
|
|
|
//真实表名:
|
|
|
if operateType == "Delete" {
|
|
|
success, message, pkField, pkValue := ProtoService.GetParameterByInterfaceId(interfaceId)
|
|
|
if !success {
|
|
|
c.JSON(http.StatusOK, Model.Res{
|
|
|
Code: 500,
|
|
|
Msg: message,
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
v := CommonUtil.StrFirstToLower(CommonUtil.GetSnakeCaseStr(pkField))
|
|
|
Parameters = v + " " + pkValue+" "
|
|
|
//RpcServiceParameters = "{" + CommonUtil.GetSnakeCaseStr(pkField) + " : " + v + "} "
|
|
|
RpcServiceParameters = CommonUtil.GetSnakeCaseStr(pkField) + " : " + v
|
|
|
}
|
|
|
} else {
|
|
|
//swagger接口不存在,需要读取proto参数配置
|
|
|
|
|
|
//proto的参数
|
|
|
list:=ProtoDao.GetParameterStructInfo(structId)
|
|
|
for i := 0; i < len(list); i++ {
|
|
|
structParameterName := list[i]["struct_parameter_name"].(string)
|
|
|
structParameterType := list[i]["struct_parameter_type"].(string)
|
|
|
//判断是不是数组类型
|
|
|
if list[i]["is_repeate"].(int64)==1{
|
|
|
Parameters += CommonUtil.StrFirstToLower(structParameterName) + " []" + structParameterType + ","
|
|
|
}else{
|
|
|
//普通参数
|
|
|
Parameters += CommonUtil.StrFirstToLower(structParameterName) + " " + structParameterType + ","
|
|
|
}
|
|
|
RpcServiceParameters += CommonUtil.StrFirstToUpper(structParameterName) + " : " + CommonUtil.StrFirstToLower(structParameterName) + " ,"
|
|
|
}
|
|
|
}
|
|
|
tableName = ProtoDao.GetTrueTableNameFromInterfaceId(interfaceId)
|
|
|
tableName = strings.Replace(tableName, ".pb.go", "", -1)
|
|
|
//此接口,在proto文件中,对应的入参结构体
|
|
|
list := ProtoDao.GetStructParameterInfoById(structId)
|
|
|
var _map = make(map[string]string)
|
|
|
for i := 0; i < len(list); i++ {
|
|
|
structParaName := CommonUtil.StrFirstToLower(list[i]["struct_parameter_name"].(string))
|
|
|
structParaType := list[i]["struct_parameter_type"].(string)
|
|
|
_map[structParaName] = structParaType
|
|
|
}
|
|
|
|
|
|
//调用模板
|
|
|
filesName := CommonUtil.GetCurrentPath()+"/Controller/ProtoController/Template/Service.template"
|
|
|
t, err := template.ParseFiles(filesName)
|
|
|
if err != nil {
|
|
|
log.Fatalln("parse file err:", err)
|
|
|
return
|
|
|
}
|
|
|
buf := new(bytes.Buffer)
|
|
|
if len(Parameters) > 0 {
|
|
|
Parameters = Parameters[0 : len(Parameters)-1]
|
|
|
}
|
|
|
if len(RpcServiceParameters) > 0 {
|
|
|
RpcServiceParameters = "{ " + RpcServiceParameters[:len(RpcServiceParameters)-1] + "}"
|
|
|
}
|
|
|
|
|
|
|
|
|
var p = map[string]interface{}{
|
|
|
"tableName": tableName,
|
|
|
"Parameters": Parameters,
|
|
|
"RpcServiceParameters": RpcServiceParameters,
|
|
|
"argPrefix": argPrefix,
|
|
|
"currenttime": CommonUtil.GetCurrentTime(),
|
|
|
"description": description,
|
|
|
"authorName": authorName,
|
|
|
"interfaceName": interfaceName,
|
|
|
}
|
|
|
if err := t.Execute(buf, p); err != nil {
|
|
|
log.Fatal("There was an error:", err.Error())
|
|
|
}
|
|
|
var content = buf.String()
|
|
|
content = CommonUtil.DeleteBlankString(content)
|
|
|
c.JSON(http.StatusOK, Model.Res{
|
|
|
Data: content,
|
|
|
Msg: tableName,
|
|
|
CodePath: ProtoService.GetGenereateCodePath("Service", tableName),
|
|
|
})
|
|
|
}
|