engineclient.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package client
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "mime/multipart"
  7. "net/http"
  8. "os"
  9. "path/filepath"
  10. "time"
  11. "encoding/json"
  12. "compress/gzip"
  13. "io/ioutil"
  14. "strings"
  15. "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  16. )
  17. type EngineClient struct {
  18. ProjectName string
  19. }
  20. type ResponeResult struct {
  21. Code int32 `json:"code"`
  22. //描述
  23. Msg string `json:"msg"`
  24. //数据
  25. Data []GenerateResult `json:"data"`
  26. }
  27. type GenerateResult struct {
  28. Name string `json:"name"`
  29. Content []byte `json:"content"`
  30. Type string `json:"type"`
  31. }
  32. func NewEngineClient(project_name string) *EngineClient {
  33. return &EngineClient{project_name}
  34. }
  35. func (c * EngineClient)InitDefalutFile(project_name string) {
  36. c.ProjectName = project_name
  37. os.MkdirAll("controllers", os.ModePerm)
  38. os.MkdirAll("models", os.ModePerm)
  39. os.MkdirAll("routers", os.ModePerm)
  40. os.MkdirAll("conf", os.ModePerm)
  41. xml:=strings.Replace(DefaultProjectXML, "{project_name}", project_name,-1)
  42. _,err:=os.Stat(project_name+".xml")
  43. if os.IsNotExist(err){
  44. ioutil.WriteFile(project_name+".xml",[]byte(xml), os.ModePerm)
  45. }
  46. ioutil.WriteFile(project_name+".xsd",[]byte(XSD), os.ModePerm)
  47. }
  48. func (c * EngineClient)GenerateCurrentProject() {
  49. path,_:=utils.GetCurrentPath()
  50. c.InitDefalutFile(c.ProjectName)
  51. c.Generate(path+c.ProjectName+".xml")
  52. }
  53. func (c * EngineClient)Generate(xmlfile string) {
  54. time.Sleep(2000)
  55. var result ResponeResult
  56. bs := DoRequest(xmlfile)
  57. if bs !=nil {
  58. fmt.Println(string(bs.Bytes()))
  59. err:=json.Unmarshal(bs.Bytes(), &result)
  60. if err!=nil{
  61. fmt.Println(err.Error())
  62. }
  63. for i := 0; i < len(result.Data); i++ {
  64. var b bytes.Buffer
  65. b.Write(result.Data[i].Content)
  66. fmt.Println(b.Bytes())
  67. unzip := unzipbytes(&b)
  68. result.Data[i].Content = unzip.Bytes()
  69. }
  70. for i := 0; i < len(result.Data); i++ {
  71. fmt.Println(string(result.Data[i].Content))
  72. path:= result.Data[i].Name
  73. path = strings.TrimLeft(path, c.ProjectName+"/")
  74. ft:=result.Data[i].Type
  75. if result.Data[i].Type == "main" {
  76. }else if ft == "config"{
  77. _,err := os.Stat("conf/app.conf")
  78. if err == nil{
  79. fmt.Println("配置文件已经存在,忽略...")
  80. }else {
  81. ioutil.WriteFile(path, result.Data[i].Content,os.ModePerm)
  82. }
  83. }else if ft =="controllers"{
  84. if strings.Index(result.Data[i].Name, "_gen.go")>0 {
  85. ioutil.WriteFile(path, result.Data[i].Content,os.ModePerm)
  86. }else {
  87. _, err := os.Stat(result.Data[i].Name)
  88. if err==nil{
  89. ioutil.WriteFile(path+"_new", result.Data[i].Content,os.ModePerm)
  90. }else if os.IsNotExist(err){
  91. ioutil.WriteFile(path, result.Data[i].Content,os.ModePerm)
  92. }
  93. }
  94. }else {
  95. err:=ioutil.WriteFile(path, result.Data[i].Content,os.ModePerm)
  96. if err !=nil{
  97. fmt.Println(err.Error())
  98. }
  99. }
  100. }
  101. }
  102. }
  103. func unzipbytes(bs *bytes.Buffer) bytes.Buffer{
  104. r, _ := gzip.NewReader(bs)
  105. defer r.Close()
  106. var b bytes.Buffer
  107. b.ReadFrom(r)
  108. //undatas, _ := ioutil.ReadAll(r)
  109. //fmt.Println("ungzip size:", len(undatas))
  110. return b
  111. }
  112. func DoRequest(xmlfile string) *bytes.Buffer{
  113. server:="http://ccbeetech.com:6166/api/v1/develop/generate"
  114. request, err := newfileUploadRequest(server, nil, "xmlfile", xmlfile)
  115. if err != nil {
  116. fmt.Println(err)
  117. }
  118. client := &http.Client{}
  119. resp, err := client.Do(request)
  120. if err != nil {
  121. fmt.Println(err)
  122. } else {
  123. body := &bytes.Buffer{}
  124. _, err := body.ReadFrom(resp.Body)
  125. if err != nil {
  126. fmt.Println(err)
  127. }
  128. resp.Body.Close()
  129. fmt.Println(resp.StatusCode)
  130. fmt.Println(resp.Header)
  131. //fmt.Println(body)
  132. return body
  133. }
  134. return nil
  135. }
  136. func newfileUploadRequest(uri string, params map[string]string, paramName, path string) (*http.Request, error) {
  137. file, err := os.Open(path)
  138. if err != nil {
  139. return nil, err
  140. }
  141. defer file.Close()
  142. body := &bytes.Buffer{}
  143. writer := multipart.NewWriter(body)
  144. part, err := writer.CreateFormFile(paramName, filepath.Base(path))
  145. if err != nil {
  146. return nil, err
  147. }
  148. _, err = io.Copy(part, file)
  149. for key, val := range params {
  150. _ = writer.WriteField(key, val)
  151. }
  152. err = writer.Close()
  153. if err != nil {
  154. return nil, err
  155. }
  156. request, err := http.NewRequest("POST", uri, body)
  157. request.Header.Add("Content-Type", writer.FormDataContentType())
  158. return request, err
  159. }