| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- package client
- import (
- "bytes"
- "compress/gzip"
- "encoding/json"
- "fmt"
- "io"
- "io/ioutil"
- "mime/multipart"
- "net/http"
- "os"
- "path/filepath"
- "strings"
- "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
- )
- type EngineClient struct {
- ProjectName string
- }
- type ResponeResult struct {
- Code int32 `json:"code"`
- //描述
- Msg string `json:"msg"`
- //数据
- Data []GenerateResult `json:"data"`
- }
- type GenerateResult struct {
- Name string `json:"name"`
- Content []byte `json:"content"`
- Type string `json:"type"`
- }
- func NewEngineClient(project_name string) *EngineClient {
- return &EngineClient{project_name}
- }
- func (c *EngineClient) InitDefalutFile(project_name string) {
- c.ProjectName = project_name
- os.MkdirAll("controllers", os.ModePerm)
- os.MkdirAll("models", os.ModePerm)
- os.MkdirAll("routers", os.ModePerm)
- os.MkdirAll("conf", os.ModePerm)
- os.MkdirAll("sqlconfig", os.ModePerm)
- os.MkdirAll("doc", os.ModePerm)
- os.MkdirAll("web", os.ModePerm)
- _, err := os.Stat(project_name + ".xml")
- if os.IsNotExist(err) {
- xml := strings.Replace(DefaultProjectXML, "{project_name}", project_name, -1)
- ioutil.WriteFile(project_name+".xml", []byte(xml), os.ModePerm)
- }
- _, err = os.Stat(project_name + ".xsd")
- if os.IsNotExist(err) {
- ioutil.WriteFile(project_name+".xsd", []byte(XSD), os.ModePerm)
- }
- _, err = os.Stat("Dockerfile")
- if os.IsNotExist(err) {
- xml := strings.Replace(DockerFile, "{project_name}", project_name, -1)
- ioutil.WriteFile("Dockerfile", []byte(xml), os.ModePerm)
- }
- _, err = os.Stat("build_docker.sh")
- if os.IsNotExist(err) {
- xml := strings.Replace(BuildSH, "{project_name}", project_name, -1)
- ioutil.WriteFile("build_docker.sh", []byte(xml), os.ModePerm)
- }
- _, err = os.Stat("README.md")
- if os.IsNotExist(err) {
- xml := strings.Replace(MARK_DOWN, "{project_name}", project_name, -1)
- xml = strings.Replace(xml, "{!}", "`", -1)
- ioutil.WriteFile("README.md", []byte(xml), os.ModePerm)
- }
- }
- func (c *EngineClient) GenerateCurrentProject() {
- path, _ := utils.GetCurrentPath()
- c.InitDefalutFile(c.ProjectName)
- c.Generate(path + c.ProjectName + ".xml")
- }
- func (c *EngineClient) Generate(xmlfile string) {
- var result ResponeResult
- bs := DoRequest(xmlfile)
- if bs != nil {
- err := json.Unmarshal(bs.Bytes(), &result)
- if err != nil {
- fmt.Println(err.Error())
- }
- for i := 0; i < len(result.Data); i++ {
- var b bytes.Buffer
- b.Write(result.Data[i].Content)
- unzip := unzipbytes(&b)
- result.Data[i].Content = unzip.Bytes()
- }
- for i := 0; i < len(result.Data); i++ {
- path := result.Data[i].Name
- //fmt.Println(path)
- path = path[len(c.ProjectName)+1:]
- fmt.Println(path)
- ft := result.Data[i].Type
- if result.Data[i].Type == "main" {
- } else if ft == "config" || ft == "ci" {
- _, err := os.Stat(path)
- if err == nil {
- fmt.Println(path + "已经存在,忽略...")
- } else {
- ioutil.WriteFile(path, result.Data[i].Content, os.ModePerm)
- }
- } else if ft == "controllers" {
- if strings.Index(path, "_gen.go") > 0 {
- ioutil.WriteFile(path, result.Data[i].Content, os.ModePerm)
- } else {
- _, err := os.Stat(path)
- if err == nil {
- ioutil.WriteFile(path+"_new", result.Data[i].Content, os.ModePerm)
- } else if os.IsNotExist(err) {
- ioutil.WriteFile(path, result.Data[i].Content, os.ModePerm)
- }
- }
- } else if ft == "routers" {
- _, err := os.Stat(path)
- if err == nil {
- fmt.Println(path + "已经存在")
- ioutil.WriteFile(path+"_new", result.Data[i].Content, os.ModePerm)
- } else {
- ioutil.WriteFile(path, result.Data[i].Content, os.ModePerm)
- }
- } else {
- err := ioutil.WriteFile(path, result.Data[i].Content, os.ModePerm)
- if err != nil {
- fmt.Println(err.Error())
- }
- }
- }
- }
- }
- func unzipbytes(bs *bytes.Buffer) bytes.Buffer {
- r, _ := gzip.NewReader(bs)
- defer r.Close()
- var b bytes.Buffer
- b.ReadFrom(r)
- //undatas, _ := ioutil.ReadAll(r)
- //fmt.Println("ungzip size:", len(undatas))
- return b
- }
- func DoRequest(xmlfile string) *bytes.Buffer {
- server := "http://qianqiusoft.com:6166/api/v1/develop/generate"
- request, err := newfileUploadRequest(server, nil, "xmlfile", xmlfile)
- if err != nil {
- fmt.Println(err)
- }
- client := &http.Client{}
- resp, err := client.Do(request)
- if err != nil {
- fmt.Println(err)
- } else {
- body := &bytes.Buffer{}
- _, err := body.ReadFrom(resp.Body)
- if err != nil {
- fmt.Println(err)
- }
- resp.Body.Close()
- fmt.Println(resp.StatusCode)
- fmt.Println(resp.Header)
- //fmt.Println(body)
- return body
- }
- return nil
- }
- func newfileUploadRequest(uri string, params map[string]string, paramName, path string) (*http.Request, error) {
- file, err := os.Open(path)
- if err != nil {
- return nil, err
- }
- defer file.Close()
- body := &bytes.Buffer{}
- writer := multipart.NewWriter(body)
- part, err := writer.CreateFormFile(paramName, filepath.Base(path))
- if err != nil {
- return nil, err
- }
- _, err = io.Copy(part, file)
- for key, val := range params {
- _ = writer.WriteField(key, val)
- }
- err = writer.Close()
- if err != nil {
- return nil, err
- }
- request, err := http.NewRequest("POST", uri, body)
- request.Header.Add("Content-Type", writer.FormDataContentType())
- return request, err
- }
|