post_data.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package module
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "io/ioutil"
  8. "net/http"
  9. "strconv"
  10. "strings"
  11. "time"
  12. "tmr-watch/conf/setting"
  13. "tmr-watch/http/handle/restful"
  14. "tmr-watch/models"
  15. "tmr-watch/pkg/logging"
  16. "github.com/Anderson-Lu/gofasion/gofasion"
  17. "github.com/gin-gonic/gin"
  18. "github.com/xormplus/xorm"
  19. )
  20. const ClassDataURl = "group/class/sync"
  21. func PostDataByName(c *gin.Context, fashion *gofasion.Fasion) (interface{}, error) {
  22. sqlnamestr := fashion.Get("name").ValueStr()
  23. s_params := make([]interface{}, 0)
  24. tx := restful.Engine.NewSession()
  25. defer tx.Close()
  26. err := tx.Begin()
  27. defer func() {
  28. switch {
  29. case err != nil:
  30. if tx != nil {
  31. tx.Rollback()
  32. }
  33. default:
  34. if tx != nil {
  35. err = tx.Commit()
  36. }
  37. }
  38. if tx != nil {
  39. tx.Close()
  40. }
  41. }()
  42. sql, p := restful.GetSqlByNameDBT(sqlnamestr, tx)
  43. if sql != "" {
  44. if fashion.HasKey("parammaps") {
  45. parammaps := fashion.Get("parammaps")
  46. logging.Info("PostDataByName ", sqlnamestr, parammaps.ValueStr())
  47. paramslist := strings.Split(p, ",")
  48. if len(paramslist) > 0 && p != "" {
  49. for _, value := range paramslist {
  50. if strings.ToLower(strings.Trim(value, " ")) == "jwt_username" {
  51. if tempv, exists := c.Get("jwt_username"); exists {
  52. s_params = append(s_params, tempv.(string))
  53. } else {
  54. s_params = append(s_params, "")
  55. }
  56. } else if strings.ToLower(strings.Trim(value, " ")) == "snowid" {
  57. ids, err := setting.SnowIds.NextId()
  58. if err != nil {
  59. ids = time.Now().UnixNano()
  60. logging.Info("create SnowIds err", err)
  61. }
  62. s_params = append(s_params, ids)
  63. } else {
  64. s_params = append(s_params, parammaps.Get(strings.Trim(value, " ")).ValueStr())
  65. }
  66. }
  67. }
  68. } else if fashion.HasKey("params") {
  69. params := fashion.Get("params").Array()
  70. logging.Info("PostDataByName ", sqlnamestr, params)
  71. for _, v_params := range params {
  72. s_params = append(s_params, v_params.ValueStr())
  73. }
  74. }
  75. queryData, err := ExecDataBySqlT(sql, s_params, tx)
  76. if err != nil {
  77. logging.Error("PostDataByName err: ", err)
  78. //appG.Response(http.StatusOK, e.ERROR, err.Error())
  79. if (sqlnamestr == "copybarfeedremain" || sqlnamestr == "copyFtdry" || sqlnamestr == "copyPennsieve") &&
  80. strings.Contains(err.Error(), "Duplicate entry") {
  81. return nil, errors.New("同一栏舍,同一班次不可重复录入")
  82. } else if (sqlnamestr == "copybarmilk" || sqlnamestr == "copyBodyscore" || sqlnamestr == "copyDungsieve" || sqlnamestr == "copyDungscore") &&
  83. strings.Contains(err.Error(), "Duplicate entry") {
  84. return nil, errors.New("同一栏舍不可重复录入")
  85. } else {
  86. return nil, err
  87. }
  88. } else {
  89. return queryData, nil
  90. }
  91. }
  92. return nil, nil
  93. }
  94. func ParamsMarshal(keyWord string, fashion *gofasion.Fasion) (*models.ClassRequest, error) {
  95. params := fashion.Get("parammaps")
  96. classRequest := &models.ClassRequest{}
  97. if keyWord != "cow" {
  98. if err := json.Unmarshal([]byte(params.Json()), classRequest); err != nil {
  99. logging.Error("GroupCategorySync", "Unmarshal", err)
  100. return nil, err
  101. }
  102. } else {
  103. classCowRequest := &models.ClassCowRequest{}
  104. if err := json.Unmarshal([]byte(params.Json()), classCowRequest); err != nil {
  105. logging.Error("GroupCategorySync", "Unmarshal", err)
  106. return nil, err
  107. }
  108. classRequest.Enable = classCowRequest.Enable
  109. classRequest.PastureId = classCowRequest.PastureId
  110. classRequest.BigFeedClassId = classCowRequest.PastureId
  111. classRequest.BigFeedClassName = classCowRequest.ParentName
  112. classRequest.FcCode = classCowRequest.ClassCode
  113. classRequest.FcName = classCowRequest.ClassName
  114. }
  115. return classRequest, nil
  116. }
  117. func GroupCategorySync(keyWord string, fasion *gofasion.Fasion) error {
  118. classRequest, err := ParamsMarshal(keyWord, fasion)
  119. if err != nil {
  120. return err
  121. }
  122. parentId, _ := strconv.Atoi(classRequest.BigFeedClassId)
  123. pastureId, _ := strconv.Atoi(classRequest.PastureId)
  124. body := &models.CategoryRequest{
  125. KeyWord: keyWord,
  126. PastureId: int32(pastureId),
  127. ParentId: int32(parentId),
  128. ParentName: classRequest.BigFeedClassName,
  129. Name: classRequest.FcName,
  130. Number: classRequest.FcCode,
  131. IsShow: classRequest.Enable,
  132. }
  133. URL := fmt.Sprintf("%s/%s", GetGroupDomain(int64(pastureId)), ClassDataURl)
  134. result, err := DoPost(URL, body)
  135. if err != nil {
  136. return err
  137. }
  138. response := &models.GroupCommonResponse{}
  139. if err = json.Unmarshal(result, response); err != nil {
  140. return err
  141. }
  142. if response.Code != http.StatusOK {
  143. return fmt.Errorf("msg: %s", response.Msg)
  144. }
  145. return nil
  146. }
  147. func GetGroupDomain(pastureId int64) string {
  148. res := &models.SysOpt{}
  149. if _, err := restful.Engine.Table(new(models.SysOpt).TableName()).
  150. Where("pastureid = ?", pastureId).And("inforname = ?", "domain").Get(res); err != nil {
  151. logging.Error("GetGroupDomain", err)
  152. return ""
  153. }
  154. return res.InforValue
  155. }
  156. func ExecDataBySqlT(sqlstr string, params []interface{}, tx *xorm.Session) (interface{}, error) {
  157. queryData, err := restful.ExecQueryT(sqlstr, params, tx)
  158. return queryData, err
  159. }
  160. type GroupClient struct {
  161. Detail *models.Pasture
  162. authClient *http.Client
  163. }
  164. func NewGroupClient(detail *models.Pasture) *GroupClient {
  165. return &GroupClient{
  166. Detail: detail,
  167. authClient: &http.Client{
  168. Timeout: time.Duration(5) * time.Second,
  169. },
  170. }
  171. }
  172. func doRequest(req *http.Request) ([]byte, error) {
  173. groupClient := NewGroupClient(nil)
  174. resp, err := groupClient.authClient.Do(req)
  175. if err != nil {
  176. return nil, err
  177. }
  178. b, err := ioutil.ReadAll(resp.Body)
  179. if err != nil {
  180. return nil, err
  181. }
  182. if resp.StatusCode != http.StatusOK {
  183. if len(b) > 0 {
  184. return nil, fmt.Errorf("err:%v,body:%s", err, string(b))
  185. } else {
  186. return nil, fmt.Errorf("err:%v", err)
  187. }
  188. }
  189. return b, nil
  190. }
  191. func DoGet(url string) ([]byte, error) {
  192. req, err := http.NewRequest(http.MethodGet, url, nil)
  193. if err != nil {
  194. return nil, err
  195. }
  196. req.Header.Add("Accept", "application/json")
  197. req.Header.Add("Content-Type", "application/json")
  198. return doRequest(req)
  199. }
  200. func DoPost(url string, body interface{}) ([]byte, error) {
  201. b, err := json.Marshal(body)
  202. if err != nil {
  203. return nil, err
  204. }
  205. req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(b))
  206. if err != nil {
  207. return nil, err
  208. }
  209. req.Header.Add("Accept", "application/json")
  210. req.Header.Add("Content-Type", "application/json")
  211. return doRequest(req)
  212. }