forage_list.go 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. package pasture
  2. import (
  3. "fmt"
  4. "kpt-tmr-group/http/middleware"
  5. "kpt-tmr-group/pkg/apierr"
  6. "kpt-tmr-group/pkg/ginutil"
  7. "kpt-tmr-group/pkg/valid"
  8. "kpt-tmr-group/pkg/xerr"
  9. operationPb "kpt-tmr-group/proto/go/backend/operation"
  10. "mime/multipart"
  11. "net/http"
  12. "path"
  13. "time"
  14. "github.com/gin-gonic/gin"
  15. )
  16. func AddForage(c *gin.Context) {
  17. var req operationPb.AddForageRequest
  18. if err := c.BindJSON(&req); err != nil {
  19. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  20. return
  21. }
  22. if err := valid.ValidateStruct(&req,
  23. valid.Field(&req.Name, valid.Required),
  24. valid.Field(&req.CategoryId, valid.Required),
  25. valid.Field(&req.UniqueEncode, valid.Required),
  26. valid.Field(&req.ForageSourceId, valid.Required),
  27. valid.Field(&req.PlanTypeId, valid.Required),
  28. valid.Field(&req.JumpWeight, valid.Required, valid.Min(0), valid.Max(50)),
  29. ); err != nil {
  30. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  31. return
  32. }
  33. if err := middleware.BackendOperation(c).OpsService.CreateForage(c, &req); err != nil {
  34. apierr.ClassifiedAbort(c, err)
  35. return
  36. }
  37. ginutil.JSONResp(c, &operationPb.CommonOK{
  38. Code: http.StatusOK,
  39. Msg: "ok",
  40. Data: &operationPb.Success{Success: true},
  41. })
  42. }
  43. func EditForage(c *gin.Context) {
  44. var req operationPb.AddForageRequest
  45. if err := c.BindJSON(&req); err != nil {
  46. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  47. return
  48. }
  49. if err := valid.ValidateStruct(&req,
  50. valid.Field(&req.Id, valid.Required, valid.Min(1)),
  51. valid.Field(&req.Name, valid.Required),
  52. valid.Field(&req.CategoryId, valid.Required),
  53. valid.Field(&req.UniqueEncode, valid.Required),
  54. valid.Field(&req.ForageSourceId, valid.Required),
  55. valid.Field(&req.PlanTypeId, valid.Required),
  56. valid.Field(&req.JumpWeight, valid.Required, valid.Min(0), valid.Max(50)),
  57. ); err != nil {
  58. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  59. return
  60. }
  61. if err := middleware.BackendOperation(c).OpsService.EditForage(c, &req); err != nil {
  62. apierr.ClassifiedAbort(c, err)
  63. return
  64. }
  65. ginutil.JSONResp(c, &operationPb.CommonOK{
  66. Code: http.StatusOK,
  67. Msg: "ok",
  68. Data: &operationPb.Success{Success: true},
  69. })
  70. }
  71. func SearchForageList(c *gin.Context) {
  72. req := &operationPb.SearchForageListRequest{}
  73. if err := ginutil.BindProto(c, req); err != nil {
  74. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  75. return
  76. }
  77. req.Pagination = &operationPb.PaginationModel{
  78. Page: int32(c.GetInt(middleware.Page)),
  79. PageSize: int32(c.GetInt(middleware.PageSize)),
  80. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  81. }
  82. res, err := middleware.BackendOperation(c).OpsService.SearchForageList(c, req)
  83. if err != nil {
  84. apierr.ClassifiedAbort(c, err)
  85. return
  86. }
  87. ginutil.JSONResp(c, res)
  88. }
  89. // SearchForageEnumList 饲料列表公共枚举
  90. func SearchForageEnumList(c *gin.Context) {
  91. res := middleware.BackendOperation(c).OpsService.ForageEnumList(c)
  92. ginutil.JSONResp(c, res)
  93. }
  94. func DeleteForageList(c *gin.Context) {
  95. ids := make([]int64, 0)
  96. if err := c.BindJSON(&ids); err != nil {
  97. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  98. return
  99. }
  100. if len(ids) <= 0 {
  101. apierr.AbortBadRequest(c, http.StatusBadRequest, xerr.Custom("参数错误"))
  102. return
  103. }
  104. if err := middleware.BackendOperation(c).OpsService.DeleteForageList(c, ids); err != nil {
  105. apierr.ClassifiedAbort(c, err)
  106. return
  107. }
  108. ginutil.JSONResp(c, &operationPb.CommonOK{
  109. Code: http.StatusOK,
  110. Msg: "ok",
  111. Data: &operationPb.Success{Success: true},
  112. })
  113. }
  114. func IsShowForage(c *gin.Context) {
  115. var req operationPb.IsShowForage
  116. if err := c.BindJSON(&req); err != nil {
  117. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  118. return
  119. }
  120. if err := valid.ValidateStruct(&req,
  121. valid.Field(&req.ForageId, valid.Required, valid.Min(1)),
  122. valid.Field(&req.IsShow, valid.Required, valid.Min(1), valid.Max(2)),
  123. ); err != nil {
  124. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  125. return
  126. }
  127. if err := middleware.BackendOperation(c).OpsService.IsShowForage(c, &req); err != nil {
  128. apierr.ClassifiedAbort(c, err)
  129. return
  130. }
  131. ginutil.JSONResp(c, &operationPb.CommonOK{
  132. Code: http.StatusOK,
  133. Msg: "ok",
  134. Data: &operationPb.Success{Success: true},
  135. })
  136. }
  137. func ExcelImportForage(c *gin.Context) {
  138. file, err := func(c *gin.Context) (multipart.File, error) {
  139. if c.ContentType() != "multipart/form-data" {
  140. return nil, xerr.Custom("invalid Content-Type")
  141. }
  142. if c.Request.Body == nil || int(c.Request.ContentLength) <= 0 {
  143. return nil, xerr.Custom("invalid body")
  144. }
  145. file, fileHeader, err := c.Request.FormFile("file")
  146. if err != nil {
  147. return nil, xerr.WithStack(err)
  148. }
  149. fileSuffix := path.Ext(path.Base(fileHeader.Filename))
  150. if fileSuffix != ".xlsx" {
  151. return nil, xerr.Custom("invalid file suffix")
  152. }
  153. return file, nil
  154. }(c)
  155. if err != nil {
  156. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  157. return
  158. }
  159. if err = middleware.BackendOperation(c).OpsService.ExcelImportForage(c, file); err != nil {
  160. apierr.ClassifiedAbort(c, err)
  161. return
  162. }
  163. ginutil.JSONResp(c, &operationPb.CommonOK{
  164. Code: http.StatusOK,
  165. Msg: "ok",
  166. Data: &operationPb.Success{Success: true},
  167. })
  168. }
  169. func ExcelExportForage(c *gin.Context) {
  170. req := &operationPb.SearchForageListRequest{}
  171. if err := c.BindJSON(req); err != nil {
  172. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  173. return
  174. }
  175. req.Pagination = &operationPb.PaginationModel{
  176. Page: int32(c.GetInt(middleware.Page)),
  177. PageSize: int32(c.GetInt(middleware.PageSize)),
  178. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  179. }
  180. buffer, err := middleware.BackendOperation(c).OpsService.ExcelExportForage(c, req)
  181. if err != nil {
  182. apierr.ClassifiedAbort(c, err)
  183. return
  184. }
  185. c.Header("Content-Type", "application/octet-stream")
  186. c.Header("Content-Disposition", "attachment; filename="+(fmt.Sprintf("饲料表 %s.xlsx", time.Now().Format("200601021504"))))
  187. if _, err = c.Writer.Write(buffer.Bytes()); err != nil {
  188. apierr.ClassifiedAbort(c, err)
  189. return
  190. }
  191. ginutil.JSONResp(c, &operationPb.CommonOK{
  192. Code: http.StatusOK,
  193. Msg: "ok",
  194. Data: &operationPb.Success{Success: true},
  195. })
  196. }
  197. func ExcelTemplateForage(c *gin.Context) {
  198. buffer, err := middleware.BackendOperation(c).OpsService.ExcelTemplateForage(c)
  199. if err != nil {
  200. apierr.ClassifiedAbort(c, err)
  201. return
  202. }
  203. c.Header("Content-Type", "application/octet-stream")
  204. c.Header("Content-Disposition", "attachment; filename="+(fmt.Sprintf("饲料表 %s.xlsx", time.Now().Format("200601021504"))))
  205. if _, err = c.Writer.Write(buffer.Bytes()); err != nil {
  206. apierr.ClassifiedAbort(c, err)
  207. return
  208. }
  209. ginutil.JSONResp(c, &operationPb.CommonOK{
  210. Code: http.StatusOK,
  211. Msg: "ok",
  212. Data: &operationPb.Success{Success: true},
  213. })
  214. }