analysis.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496
  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. fmt.Println("=======001======")
  206. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  207. return
  208. }
  209. if err := valid.ValidateStruct(&req,
  210. valid.Field(&req.ApiName, valid.Required),
  211. valid.Field(&req.PastureId, valid.Required),
  212. valid.Field(&req.StartTime, valid.Required),
  213. ); err != nil {
  214. fmt.Println("=======002======")
  215. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  216. return
  217. }
  218. req.Pagination = &operationPb.PaginationModel{
  219. Page: int32(c.GetInt(middleware.Page)),
  220. PageSize: int32(c.GetInt(middleware.PageSize)),
  221. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  222. }
  223. res, err := middleware.BackendOperation(c).OpsService.SearchFeedStatistics(c, &req)
  224. if err != nil {
  225. fmt.Println("=======003======")
  226. apierr.ClassifiedAbort(c, err)
  227. return
  228. }
  229. c.JSON(http.StatusOK, res)
  230. }
  231. // SearchCowsAnalysis 饲喂效率-牛群评估
  232. func SearchCowsAnalysis(c *gin.Context) {
  233. var req operationPb.CowsAnalysisRequest
  234. if err := ginutil.BindProto(c, &req); err != nil {
  235. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  236. return
  237. }
  238. if err := valid.ValidateStruct(&req,
  239. valid.Field(&req.PastureId, valid.Required),
  240. valid.Field(&req.StartTime, valid.Required),
  241. ); err != nil {
  242. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  243. return
  244. }
  245. req.Pagination = &operationPb.PaginationModel{
  246. Page: int32(c.GetInt(middleware.Page)),
  247. PageSize: int32(c.GetInt(middleware.PageSize)),
  248. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  249. }
  250. res, err := middleware.BackendOperation(c).OpsService.CowsAnalysis(c, &req)
  251. if err != nil {
  252. apierr.ClassifiedAbort(c, err)
  253. return
  254. }
  255. c.JSON(http.StatusOK, res)
  256. }
  257. // SearchFeedChartStatistics 饲喂效率-chart图表分析
  258. func SearchFeedChartStatistics(c *gin.Context) {
  259. var req operationPb.FeedChartStatisticsRequest
  260. if err := ginutil.BindProto(c, &req); err != nil {
  261. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  262. return
  263. }
  264. if err := valid.ValidateStruct(&req,
  265. valid.Field(&req.PastureId, valid.Required),
  266. valid.Field(&req.StartTime, valid.Required),
  267. valid.Field(&req.EndTime, valid.Required),
  268. valid.Field(&req.ApiType, valid.Required),
  269. ); err != nil {
  270. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  271. return
  272. }
  273. res, err := middleware.BackendOperation(c).OpsService.FeedChartStatistics(c, &req)
  274. if err != nil {
  275. apierr.ClassifiedAbort(c, err)
  276. return
  277. }
  278. c.JSON(http.StatusOK, res)
  279. }
  280. // SearchAccuracyAggStatistics 准确性分析-汇总统计
  281. func SearchAccuracyAggStatistics(c *gin.Context) {
  282. var req operationPb.AccuracyAggStatisticsRequest
  283. if err := ginutil.BindProto(c, &req); err != nil {
  284. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  285. return
  286. }
  287. if err := valid.ValidateStruct(&req,
  288. valid.Field(&req.PastureId, valid.Required),
  289. valid.Field(&req.StartTime, valid.Required),
  290. valid.Field(&req.EndTime, valid.Required),
  291. ); err != nil {
  292. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  293. return
  294. }
  295. res, err := middleware.BackendOperation(c).OpsService.SearchAccuracyAggStatistics(c, &req)
  296. if err != nil {
  297. apierr.ClassifiedAbort(c, err)
  298. return
  299. }
  300. c.JSON(http.StatusOK, res)
  301. }
  302. // SearchMixFeedStatistics 准确性分析-混料统计
  303. func SearchMixFeedStatistics(c *gin.Context) {
  304. var req operationPb.MixFeedStatisticsRequest
  305. if err := ginutil.BindProto(c, &req); err != nil {
  306. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  307. return
  308. }
  309. if err := valid.ValidateStruct(&req,
  310. valid.Field(&req.ApiName, valid.Required),
  311. valid.Field(&req.PastureId, valid.Required),
  312. valid.Field(&req.StartTime, valid.Required),
  313. valid.Field(&req.EndTime, valid.Required),
  314. ); err != nil {
  315. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  316. return
  317. }
  318. req.Pagination = &operationPb.PaginationModel{
  319. Page: int32(c.GetInt(middleware.Page)),
  320. PageSize: int32(c.GetInt(middleware.PageSize)),
  321. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  322. }
  323. res, err := middleware.BackendOperation(c).OpsService.SearchMixFeedStatistics(c, &req)
  324. if err != nil {
  325. apierr.ClassifiedAbort(c, err)
  326. return
  327. }
  328. c.JSON(http.StatusOK, res)
  329. }
  330. // SearchSprinkleStatistics 准确性分析-撒料统计
  331. func SearchSprinkleStatistics(c *gin.Context) {
  332. var req operationPb.SprinkleStatisticsRequest
  333. if err := ginutil.BindProto(c, &req); err != nil {
  334. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  335. return
  336. }
  337. if err := valid.ValidateStruct(&req,
  338. valid.Field(&req.PastureId, valid.Required),
  339. valid.Field(&req.ApiName, valid.Required),
  340. valid.Field(&req.StartTime, valid.Required),
  341. valid.Field(&req.EndTime, valid.Required),
  342. ); err != nil {
  343. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  344. return
  345. }
  346. req.Pagination = &operationPb.PaginationModel{
  347. Page: int32(c.GetInt(middleware.Page)),
  348. PageSize: int32(c.GetInt(middleware.PageSize)),
  349. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  350. }
  351. res, err := middleware.BackendOperation(c).OpsService.SearchSprinkleStatistics(c, &req)
  352. if err != nil {
  353. apierr.ClassifiedAbort(c, err)
  354. return
  355. }
  356. c.JSON(http.StatusOK, res)
  357. }
  358. // GetDataByName 共同接口
  359. func GetDataByName(c *gin.Context) {
  360. var req operationPb.GetDataByNameRequest
  361. if err := ginutil.BindProto(c, &req); err != nil {
  362. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  363. return
  364. }
  365. if err := valid.ValidateStruct(&req,
  366. valid.Field(&req.PastureId, valid.Required),
  367. valid.Field(&req.ApiName, valid.Required),
  368. valid.Field(&req.StartTime, valid.Required),
  369. valid.Field(&req.EndTime, valid.Required),
  370. ); err != nil {
  371. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  372. return
  373. }
  374. res, err := middleware.BackendOperation(c).OpsService.GetDataByName(c, &req)
  375. if err != nil {
  376. apierr.ClassifiedAbort(c, err)
  377. return
  378. }
  379. c.JSON(http.StatusOK, res)
  380. }
  381. // SearchProcessAnalysis 过程分析
  382. func SearchProcessAnalysis(c *gin.Context) {
  383. var req operationPb.ProcessAnalysisRequest
  384. if err := ginutil.BindProto(c, &req); err != nil {
  385. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  386. return
  387. }
  388. if err := valid.ValidateStruct(&req,
  389. valid.Field(&req.PastureId, valid.Required),
  390. valid.Field(&req.ApiName, valid.Required),
  391. valid.Field(&req.StartTime, valid.Required),
  392. valid.Field(&req.EndTime, valid.Required),
  393. ); err != nil {
  394. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  395. return
  396. }
  397. req.Pagination = &operationPb.PaginationModel{
  398. Page: int32(c.GetInt(middleware.Page)),
  399. PageSize: int32(c.GetInt(middleware.PageSize)),
  400. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  401. }
  402. res, err := middleware.BackendOperation(c).OpsService.SearchProcessAnalysis(c, &req)
  403. if err != nil {
  404. apierr.ClassifiedAbort(c, err)
  405. return
  406. }
  407. c.JSON(http.StatusOK, res)
  408. }
  409. // TrainNumber 班次
  410. func TrainNumber(c *gin.Context) {
  411. var req operationPb.TrainNumberRequest
  412. if err := ginutil.BindProto(c, &req); err != nil {
  413. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  414. return
  415. }
  416. if err := valid.ValidateStruct(&req,
  417. valid.Field(&req.ApiName, valid.Required, valid.Length(1, 100)),
  418. valid.Field(&req.PastureId, valid.Required),
  419. valid.Field(&req.InfoName, valid.Required, valid.Length(1, 30)),
  420. ); err != nil {
  421. apierr.AbortBadRequest(c, http.StatusBadRequest, err)
  422. return
  423. }
  424. req.Pagination = &operationPb.PaginationModel{
  425. Page: int32(c.GetInt(middleware.Page)),
  426. PageSize: int32(c.GetInt(middleware.PageSize)),
  427. PageOffset: int32(c.GetInt(middleware.PageOffset)),
  428. }
  429. res, err := middleware.BackendOperation(c).OpsService.GetTrainNumber(c, &req)
  430. if err != nil {
  431. apierr.ClassifiedAbort(c, err)
  432. return
  433. }
  434. ginutil.JSONResp(c, res)
  435. }