analysis.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. package statistic
  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. operationPb "kpt-tmr-group/proto/go/backend/operation"
  9. "net/http"
  10. "time"
  11. "github.com/gin-gonic/gin"
  12. )
  13. // SearchFormulaEstimateList 配方评估
  14. func SearchFormulaEstimateList(c *gin.Context) {
  15. var req operationPb.SearchFormulaEstimateRequest
  16. if err := ginutil.BindProto(c, &req); err != nil {
  17. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  18. return
  19. }
  20. if err := valid.ValidateStruct(&req,
  21. valid.Field(&req.ApiName, valid.Required),
  22. valid.Field(&req.PastureId, valid.Required),
  23. valid.Field(&req.StartTime, valid.Required),
  24. valid.Field(&req.EndTime, valid.Required),
  25. ); err != nil {
  26. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  27. return
  28. }
  29. req.Pagination = &operationPb.PaginationModel{
  30. Page: int32(c.GetInt(middleware.Page)),
  31. PageSize: int32(c.GetInt(middleware.PageSize)),
  32. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  33. }
  34. res, err := middleware.BackendOperation(c).OpsService.SearchFormulaEstimateList(c, &req)
  35. if err != nil {
  36. apierr.ClassifiedAbort(c, err)
  37. return
  38. }
  39. c.JSON(http.StatusOK, res)
  40. }
  41. // SearchInventoryStatisticsExcelExport 库存管理-库存统计-报表导出
  42. func SearchInventoryStatisticsExcelExport(c *gin.Context) {
  43. var req operationPb.SearchInventoryStatisticsRequest
  44. if err := ginutil.BindProto(c, &req); err != nil {
  45. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  46. return
  47. }
  48. if err := valid.ValidateStruct(&req,
  49. valid.Field(&req.ApiName, valid.Required),
  50. valid.Field(&req.PastureId, valid.Required),
  51. valid.Field(&req.StartTime, valid.Required),
  52. valid.Field(&req.EndTime, valid.Required),
  53. ); err != nil {
  54. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  55. return
  56. }
  57. req.Pagination = &operationPb.PaginationModel{
  58. Page: int32(c.GetInt(middleware.Page)),
  59. PageSize: int32(c.GetInt(middleware.PageSize)),
  60. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  61. }
  62. buffer, err := middleware.BackendOperation(c).OpsService.InventoryStatisticsExcelExport(c, &req)
  63. if err != nil {
  64. apierr.ClassifiedAbort(c, err)
  65. return
  66. }
  67. c.Header("Content-Type", "application/octet-stream")
  68. c.Header("Content-Disposition", "attachment; filename="+(fmt.Sprintf("库存统计-%s.xlsx", time.Now().Format("200601021504"))))
  69. if _, err = c.Writer.Write(buffer.Bytes()); err != nil {
  70. apierr.ClassifiedAbort(c, err)
  71. return
  72. }
  73. ginutil.JSONResp(c, &operationPb.CommonOK{
  74. Code: http.StatusOK,
  75. Msg: "ok",
  76. Data: &operationPb.Success{Success: true},
  77. })
  78. }
  79. // SearchInventoryStatistics 库存管理-库存统计
  80. func SearchInventoryStatistics(c *gin.Context) {
  81. var req operationPb.SearchInventoryStatisticsRequest
  82. if err := ginutil.BindProto(c, &req); err != nil {
  83. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  84. return
  85. }
  86. if err := valid.ValidateStruct(&req,
  87. valid.Field(&req.ApiName, valid.Required),
  88. valid.Field(&req.PastureId, valid.Required),
  89. valid.Field(&req.StartTime, valid.Required),
  90. valid.Field(&req.EndTime, valid.Required),
  91. ); err != nil {
  92. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  93. return
  94. }
  95. req.Pagination = &operationPb.PaginationModel{
  96. Page: int32(c.GetInt(middleware.Page)),
  97. PageSize: int32(c.GetInt(middleware.PageSize)),
  98. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  99. }
  100. res, err := middleware.BackendOperation(c).OpsService.SearchInventoryStatistics(c, &req)
  101. if err != nil {
  102. apierr.ClassifiedAbort(c, err)
  103. return
  104. }
  105. c.JSON(http.StatusOK, res)
  106. }
  107. // SearchUserMaterialsStatistics 库存管理-用料分析
  108. func SearchUserMaterialsStatistics(c *gin.Context) {
  109. var req operationPb.SearchUserMaterialsStatisticsRequest
  110. if err := ginutil.BindProto(c, &req); err != nil {
  111. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  112. return
  113. }
  114. if err := valid.ValidateStruct(&req,
  115. valid.Field(&req.ApiName, valid.Required),
  116. valid.Field(&req.PastureId, valid.Required),
  117. valid.Field(&req.StartTime, valid.Required),
  118. valid.Field(&req.EndTime, valid.Required),
  119. ); err != nil {
  120. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  121. return
  122. }
  123. req.Pagination = &operationPb.PaginationModel{
  124. Page: int32(c.GetInt(middleware.Page)),
  125. PageSize: int32(c.GetInt(middleware.PageSize)),
  126. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  127. }
  128. res, err := middleware.BackendOperation(c).OpsService.SearchUserMaterialsStatistics(c, &req)
  129. if err != nil {
  130. apierr.ClassifiedAbort(c, err)
  131. return
  132. }
  133. c.JSON(http.StatusOK, res)
  134. }
  135. // SearchUserMaterialsStatisticsExcelExport 库存管理-用料分析-报表导出
  136. func SearchUserMaterialsStatisticsExcelExport(c *gin.Context) {
  137. var req operationPb.SearchUserMaterialsStatisticsRequest
  138. if err := ginutil.BindProto(c, &req); err != nil {
  139. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  140. return
  141. }
  142. if err := valid.ValidateStruct(&req,
  143. valid.Field(&req.ApiName, valid.Required),
  144. valid.Field(&req.PastureId, valid.Required),
  145. valid.Field(&req.StartTime, valid.Required),
  146. valid.Field(&req.EndTime, valid.Required),
  147. ); err != nil {
  148. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  149. return
  150. }
  151. req.Pagination = &operationPb.PaginationModel{
  152. Page: int32(c.GetInt(middleware.Page)),
  153. PageSize: int32(c.GetInt(middleware.PageSize)),
  154. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  155. }
  156. buffer, err := middleware.BackendOperation(c).OpsService.UserMaterialsStatisticsExcelExport(c, &req)
  157. if err != nil {
  158. apierr.ClassifiedAbort(c, err)
  159. return
  160. }
  161. c.Header("Content-Type", "application/octet-stream")
  162. c.Header("Content-Disposition", "attachment; filename="+(fmt.Sprintf("用料分析-%s.xlsx", time.Now().Format("200601021504"))))
  163. if _, err = c.Writer.Write(buffer.Bytes()); err != nil {
  164. apierr.ClassifiedAbort(c, err)
  165. return
  166. }
  167. ginutil.JSONResp(c, &operationPb.CommonOK{
  168. Code: http.StatusOK,
  169. Msg: "ok",
  170. Data: &operationPb.Success{Success: true},
  171. })
  172. }
  173. // SearchPriceStatistics 库存管理-价格分析
  174. func SearchPriceStatistics(c *gin.Context) {
  175. var req operationPb.SearchPriceStatisticsRequest
  176. if err := ginutil.BindProto(c, &req); err != nil {
  177. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  178. return
  179. }
  180. if err := valid.ValidateStruct(&req,
  181. valid.Field(&req.ApiName, valid.Required),
  182. valid.Field(&req.PastureId, valid.Required),
  183. valid.Field(&req.StartTime, valid.Required),
  184. valid.Field(&req.EndTime, valid.Required),
  185. ); err != nil {
  186. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  187. return
  188. }
  189. req.Pagination = &operationPb.PaginationModel{
  190. Page: int32(c.GetInt(middleware.Page)),
  191. PageSize: int32(c.GetInt(middleware.PageSize)),
  192. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  193. }
  194. res, err := middleware.BackendOperation(c).OpsService.SearchPriceStatistics(c, &req)
  195. if err != nil {
  196. apierr.ClassifiedAbort(c, err)
  197. return
  198. }
  199. c.JSON(http.StatusOK, res)
  200. }
  201. // SearchFeedStatistics 饲喂效率-效率统计
  202. func SearchFeedStatistics(c *gin.Context) {
  203. var req operationPb.SearchFeedStatisticsRequest
  204. if err := ginutil.BindProto(c, &req); err != nil {
  205. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  206. return
  207. }
  208. if err := valid.ValidateStruct(&req,
  209. valid.Field(&req.ApiName, valid.Required),
  210. valid.Field(&req.PastureId, valid.Required),
  211. valid.Field(&req.StartTime, valid.Required),
  212. ); err != nil {
  213. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  214. return
  215. }
  216. req.Pagination = &operationPb.PaginationModel{
  217. Page: int32(c.GetInt(middleware.Page)),
  218. PageSize: int32(c.GetInt(middleware.PageSize)),
  219. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  220. }
  221. res, err := middleware.BackendOperation(c).OpsService.SearchFeedStatistics(c, &req)
  222. if err != nil {
  223. apierr.ClassifiedAbort(c, err)
  224. return
  225. }
  226. c.JSON(http.StatusOK, res)
  227. }
  228. // SearchCowsAnalysis 饲喂效率-牛群评估
  229. func SearchCowsAnalysis(c *gin.Context) {
  230. var req operationPb.CowsAnalysisRequest
  231. if err := ginutil.BindProto(c, &req); err != nil {
  232. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  233. return
  234. }
  235. if err := valid.ValidateStruct(&req,
  236. valid.Field(&req.PastureId, valid.Required),
  237. valid.Field(&req.StartTime, valid.Required),
  238. ); err != nil {
  239. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  240. return
  241. }
  242. req.Pagination = &operationPb.PaginationModel{
  243. Page: int32(c.GetInt(middleware.Page)),
  244. PageSize: int32(c.GetInt(middleware.PageSize)),
  245. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  246. }
  247. res, err := middleware.BackendOperation(c).OpsService.CowsAnalysis(c, &req)
  248. if err != nil {
  249. apierr.ClassifiedAbort(c, err)
  250. return
  251. }
  252. c.JSON(http.StatusOK, res)
  253. }
  254. // SearchFeedChartStatistics 饲喂效率-chart图表分析
  255. func SearchFeedChartStatistics(c *gin.Context) {
  256. var req operationPb.FeedChartStatisticsRequest
  257. if err := ginutil.BindProto(c, &req); err != nil {
  258. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  259. return
  260. }
  261. if err := valid.ValidateStruct(&req,
  262. valid.Field(&req.PastureId, valid.Required),
  263. valid.Field(&req.StartTime, valid.Required),
  264. valid.Field(&req.EndTime, valid.Required),
  265. valid.Field(&req.ApiType, valid.Required),
  266. ); err != nil {
  267. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  268. return
  269. }
  270. res, err := middleware.BackendOperation(c).OpsService.FeedChartStatistics(c, &req)
  271. if err != nil {
  272. apierr.ClassifiedAbort(c, err)
  273. return
  274. }
  275. c.JSON(http.StatusOK, res)
  276. }
  277. // SearchAccuracyAggStatistics 准确性分析-汇总统计
  278. func SearchAccuracyAggStatistics(c *gin.Context) {
  279. var req operationPb.AccuracyAggStatisticsRequest
  280. if err := ginutil.BindProto(c, &req); err != nil {
  281. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  282. return
  283. }
  284. if err := valid.ValidateStruct(&req,
  285. valid.Field(&req.PastureId, valid.Required),
  286. valid.Field(&req.StartTime, valid.Required),
  287. valid.Field(&req.EndTime, valid.Required),
  288. ); err != nil {
  289. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  290. return
  291. }
  292. res, err := middleware.BackendOperation(c).OpsService.SearchAccuracyAggStatistics(c, &req)
  293. if err != nil {
  294. apierr.ClassifiedAbort(c, err)
  295. return
  296. }
  297. c.JSON(http.StatusOK, res)
  298. }
  299. // SearchMixFeedStatistics 准确性分析-混料统计
  300. func SearchMixFeedStatistics(c *gin.Context) {
  301. var req operationPb.MixFeedStatisticsRequest
  302. if err := ginutil.BindProto(c, &req); err != nil {
  303. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  304. return
  305. }
  306. if err := valid.ValidateStruct(&req,
  307. valid.Field(&req.ApiName, valid.Required),
  308. valid.Field(&req.PastureId, valid.Required),
  309. valid.Field(&req.StartTime, valid.Required),
  310. valid.Field(&req.EndTime, valid.Required),
  311. ); err != nil {
  312. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  313. return
  314. }
  315. req.Pagination = &operationPb.PaginationModel{
  316. Page: int32(c.GetInt(middleware.Page)),
  317. PageSize: int32(c.GetInt(middleware.PageSize)),
  318. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  319. }
  320. res, err := middleware.BackendOperation(c).OpsService.SearchMixFeedStatistics(c, &req)
  321. if err != nil {
  322. apierr.ClassifiedAbort(c, err)
  323. return
  324. }
  325. c.JSON(http.StatusOK, res)
  326. }
  327. // SearchSprinkleStatistics 准确性分析-撒料统计
  328. func SearchSprinkleStatistics(c *gin.Context) {
  329. var req operationPb.SprinkleStatisticsRequest
  330. if err := ginutil.BindProto(c, &req); err != nil {
  331. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  332. return
  333. }
  334. if err := valid.ValidateStruct(&req,
  335. valid.Field(&req.PastureId, valid.Required),
  336. valid.Field(&req.ApiName, valid.Required),
  337. valid.Field(&req.StartTime, valid.Required),
  338. valid.Field(&req.EndTime, valid.Required),
  339. ); err != nil {
  340. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  341. return
  342. }
  343. req.Pagination = &operationPb.PaginationModel{
  344. Page: int32(c.GetInt(middleware.Page)),
  345. PageSize: int32(c.GetInt(middleware.PageSize)),
  346. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  347. }
  348. res, err := middleware.BackendOperation(c).OpsService.SearchSprinkleStatistics(c, &req)
  349. if err != nil {
  350. apierr.ClassifiedAbort(c, err)
  351. return
  352. }
  353. c.JSON(http.StatusOK, res)
  354. }
  355. // GetDataByName 共同接口
  356. func GetDataByName(c *gin.Context) {
  357. var req operationPb.GetDataByNameRequest
  358. if err := ginutil.BindProto(c, &req); err != nil {
  359. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  360. return
  361. }
  362. if err := valid.ValidateStruct(&req,
  363. valid.Field(&req.PastureId, valid.Required),
  364. valid.Field(&req.ApiName, valid.Required),
  365. valid.Field(&req.StartTime, valid.Required),
  366. valid.Field(&req.EndTime, valid.Required),
  367. ); err != nil {
  368. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  369. return
  370. }
  371. res, err := middleware.BackendOperation(c).OpsService.GetDataByName(c, &req)
  372. if err != nil {
  373. apierr.ClassifiedAbort(c, err)
  374. return
  375. }
  376. c.JSON(http.StatusOK, res)
  377. }
  378. // SearchProcessAnalysis 过程分析
  379. func SearchProcessAnalysis(c *gin.Context) {
  380. var req operationPb.ProcessAnalysisRequest
  381. if err := ginutil.BindProto(c, &req); err != nil {
  382. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  383. return
  384. }
  385. if err := valid.ValidateStruct(&req,
  386. valid.Field(&req.PastureId, valid.Required),
  387. valid.Field(&req.ApiName, valid.Required),
  388. valid.Field(&req.StartTime, valid.Required),
  389. valid.Field(&req.EndTime, valid.Required),
  390. ); err != nil {
  391. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  392. return
  393. }
  394. req.Pagination = &operationPb.PaginationModel{
  395. Page: int32(c.GetInt(middleware.Page)),
  396. PageSize: int32(c.GetInt(middleware.PageSize)),
  397. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  398. }
  399. res, err := middleware.BackendOperation(c).OpsService.SearchProcessAnalysis(c, &req)
  400. if err != nil {
  401. apierr.ClassifiedAbort(c, err)
  402. return
  403. }
  404. c.JSON(http.StatusOK, res)
  405. }
  406. // TrainNumber 班次
  407. func TrainNumber(c *gin.Context) {
  408. var req operationPb.TrainNumberRequest
  409. if err := ginutil.BindProto(c, &req); err != nil {
  410. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  411. return
  412. }
  413. if err := valid.ValidateStruct(&req,
  414. valid.Field(&req.ApiName, valid.Required, valid.Length(1, 100)),
  415. valid.Field(&req.PastureId, valid.Required),
  416. valid.Field(&req.InfoName, valid.Required, valid.Length(1, 30)),
  417. ); err != nil {
  418. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  419. return
  420. }
  421. req.Pagination = &operationPb.PaginationModel{
  422. Page: int32(c.GetInt(middleware.Page)),
  423. PageSize: int32(c.GetInt(middleware.PageSize)),
  424. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  425. }
  426. res, err := middleware.BackendOperation(c).OpsService.GetTrainNumber(c, &req)
  427. if err != nil {
  428. apierr.ClassifiedAbort(c, err)
  429. return
  430. }
  431. ginutil.JSONResp(c, res)
  432. }