ソースを参照

analysis: 产犊报告

Yi 5 ヶ月 前
コミット
77d962b22a

+ 3 - 3
go.mod

@@ -3,8 +3,8 @@ module kpt-pasture
 go 1.17
 
 require (
-	gitee.com/xuyiping_admin/go_proto v0.0.0-20241028071126-73c3c42b5159
-	gitee.com/xuyiping_admin/pkg v0.0.0-20241010101255-0c6bd229b939
+	gitee.com/xuyiping_admin/go_proto v0.0.0-20241028072205-d586542d9487
+	gitee.com/xuyiping_admin/pkg v0.0.0-20241028073848-407d15a8f011
 	github.com/dgrijalva/jwt-go v3.2.0+incompatible
 	github.com/eko/gocache v1.1.0
 	github.com/getsentry/sentry-go v0.23.0
@@ -72,7 +72,7 @@ require (
 	github.com/pkg/errors v0.9.1 // indirect
 	github.com/pmezard/go-difflib v1.0.0 // indirect
 	github.com/prometheus/client_model v0.3.0 // indirect
-	github.com/prometheus/common v0.42.0 // indirect
+	github.com/prometheus/common v0.42.0 // indirec
 	github.com/prometheus/procfs v0.10.1 // indirect
 	github.com/richardlehane/mscfb v1.0.4 // indirect
 	github.com/richardlehane/msoleps v1.0.3 // indirect

+ 4 - 98
go.sum

@@ -36,106 +36,12 @@ cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RX
 cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
 cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240923075344-12e649aee807 h1:lGwAI4/LbR+2mioOQeRoVAN2vPp5CmjxET4+nTFjmGg=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240923075344-12e649aee807/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240923085405-91f84f9d76ae h1:xLJpN8gNLW8MuuXJIZNIPkVCBwV6SQ0RsSJUyvMAQBk=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240923085405-91f84f9d76ae/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240923095155-018cf8ed2fc8 h1:8a85MdnwHBChtQJ7DQzd2AE6+FHPsEEFRwYHB6WKEco=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240923095155-018cf8ed2fc8/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924015834-ae0ff3b55739 h1:YbLRCw8NgDH96X6V+3EapQz/qVifr0bo+jmfW7CIuRc=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924015834-ae0ff3b55739/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924025247-8eb858531568 h1:Zpau5uItX1QCSFASCfvxOD2/hfo6NhpgS1nzHevXxDU=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924025247-8eb858531568/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924031103-30868d7c5151 h1:iHkZlH4bCZ6vuA95/9Z3hhvxKAO+7wP63QZcdGYB13M=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924031103-30868d7c5151/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924033646-0597ca2774a0 h1:38M7tkqZB23XoIGIoFJeY21Wnsjd51FK/fbfBfkoaPU=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924033646-0597ca2774a0/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924052617-be2ff50e18eb h1:ealcStYG4O0D6ok39EeEEy/2+vEolLyncFedmuhX9Z8=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924052617-be2ff50e18eb/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924054441-100cb4142f8f h1:QQCL4CvPRLl1QY9y3P4VrZS4HwxWrXX+65f/AHGu4YM=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924054441-100cb4142f8f/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924055824-5af0e461aca7 h1:X3n4Y1ucCBdZ7I8+iS88LqZwNtwSyvY1mWP7ajdPClg=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240924055824-5af0e461aca7/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926064559-37652d09b3c4 h1:11SeQqYU2kUiQBahGplMvgHzYgMEmkSPB/NYp3TBaKQ=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926064559-37652d09b3c4/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926070615-66351c94c78b h1:TQmLx5oTlLbFKUHTP2XP44s5lq/P9BQH8XCT/8EZfoE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926070615-66351c94c78b/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926071515-d412d36b2dbe h1:KTW/BuoqG+FhFEI0/JlcVmVaY7WakAGZREks5IIvy8U=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926071515-d412d36b2dbe/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926084154-d8abda6634eb h1:bQqUYGb5aS9hF9CR8A4FEJUo7jjjvQWnyAy6qblT3qg=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926084154-d8abda6634eb/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926090848-43fc51acb679 h1:7gzz8oN4BRuloIjYQh6UsDneiYNQAj6kQJI77bYLJ+0=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926090848-43fc51acb679/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926092955-f27b0fa96718 h1:QB8QkNqfnXB/ox8wsIitfW1IXGEkvDVbi4GkcRgXxD8=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20240926092955-f27b0fa96718/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241010014128-49b4c7bbdc67 h1:P9y7LRQu0PJrYBTlVD39lriGPwYiqPinXdklUqPKiMI=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241010014128-49b4c7bbdc67/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241010074707-9018744d83d1 h1:8djrve8OC4SKqeUled+rT5AUUg37eYR9JivmX15mqfU=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241010074707-9018744d83d1/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241011072822-c977a14e2254 h1:yH8qiJU8s8JpVfedf8BuoT/y2Vl9Z3ayqpfyVGdW1BQ=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241011072822-c977a14e2254/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241011085352-37867c4fa0d6 h1:FnfIC2wrku60IFnSLZz1WSiYOJrfQwpNeDMepp/h8hI=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241011085352-37867c4fa0d6/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241012025939-3e8d9977f9bb h1:o+7xGq/Z5nud9SUXwKasysVAQvc4VoLIPVzDNvE8okg=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241012025939-3e8d9977f9bb/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241012064018-55ade50d8afc h1:AAMP3tanWglQrrE+UITOsxyRi8W0SyEHvcqSK5MjBaQ=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241012064018-55ade50d8afc/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241015015352-8c7829c17318 h1:u07PUyPLqJ+2Bzf9KD6bfJxp1vvXRTQG4Nq7N/J+ni8=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241015015352-8c7829c17318/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241017014945-924b8364d224 h1:l4WMh/85PL5UxmGJG/0e4y5cs9FVq4HUhB3+kAU/xXE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241017014945-924b8364d224/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241017022959-48a2f1c177ac h1:P8dH2WtcZ3TnQdQHcKooG3IlDXH0XHPi33WPVB0xmKA=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241017022959-48a2f1c177ac/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241017053229-f6f500c7072c h1:etsV1/NXiWcXpgBr9juOLyNSfyxOsvi+e3/4E/B3/QE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241017053229-f6f500c7072c/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241017071700-cf080afaeec6 h1:ahpnQMqvJDQux/3MTFH2lVgJHyvQwdFVYko9oWc46vA=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241017071700-cf080afaeec6/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241018062323-e9d24b0e37b7 h1:ifjGzo+Kz+arWC0+MOuD7Cdd0Ph2cQ9Eg3eJyp8wEXY=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241018062323-e9d24b0e37b7/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241021094122-8c83f9d0bd28 h1:JW+Xqeeflr76HSGcC/JMs7v0KdjQAmtiMgK8nG+vpMg=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241021094122-8c83f9d0bd28/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241021095634-62b455bd33a1 h1:umkLXvBmP5RVv50FHhQo3Z0U50BdmLwtSAXEmDWpIoI=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241021095634-62b455bd33a1/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241022063225-d34353c88fd2 h1:oDKwxyg5gnNuHIcjSIJXFIGhPxEUcAXJTTevZShpL5g=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241022063225-d34353c88fd2/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241022072049-792c54387a3e h1:jzPQ7lMEWMKr1wqaxgs6TIyPdmmSexNA82WwSpcaRYE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241022072049-792c54387a3e/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023035107-bcad0081b029 h1:Q3Z4UOaHnR/KMpRlycfl6JifFK1VUHEe8VtzKOJMh0c=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023035107-bcad0081b029/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023053142-1182de347f3c h1:pRgoopd3kZUnIxKLcPagcVZ8cEeKxTlhyH2nzxpBtWc=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023053142-1182de347f3c/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023063806-2a544733ca7f h1:DpwlDgZ4in0gtX3SnAD/b8+i/xYj9HhDGuOS8RxHUwk=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023063806-2a544733ca7f/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023064328-b40bdd7fbde6 h1:0NflcKQrgC0lFBxDr/JtKMtA8n6Epi9sEEbBYt729dM=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023064328-b40bdd7fbde6/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023073355-19a0c4c38a5a h1:7GFvstT8R48anOv757i18W4H0EsbHwvh/+v1o5ZiycU=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023073355-19a0c4c38a5a/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023085318-8fa74469f8b9 h1:WRlynGQz0czTgLBRNUcxFa/h6ahvxn6XibXW/P19TQs=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241023085318-8fa74469f8b9/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241024075542-0db2fc7bfe0f h1:HinhCcyYTbNJ091e+1zZY1PxGNjPdKGO5P9vlymIfOE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241024075542-0db2fc7bfe0f/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241024082136-e206f3f7ead0 h1:ewJf5F8O3uHKKQX4lXy1KL/P9BCIbqRG7pjzyH5Rr9s=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241024082136-e206f3f7ead0/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241025075257-8a8f1cc7c720 h1:7xa/+kqFgclmxB6EYNpA33Ak430zaFPdFIcTMziuf+8=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241025075257-8a8f1cc7c720/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241025081249-c24e81100ed5 h1:FIMbHC1Wv/rhXjVDzYaIMgxhhiQsD7agTmNztgL5kKY=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241025081249-c24e81100ed5/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241025100516-892af77790ab h1:0k7CeNzABQf8kDylWaPgyZuzH0VgjNxZiACHAeD/spk=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241025100516-892af77790ab/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241028022226-4604cfcfddc1 h1:CHliD3igZp53pUQoSumrWBjV7NekEBDs8dnVrM/IYFM=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241028022226-4604cfcfddc1/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241028034651-d5e33b3f62fa h1:eEhuwsyIltNGtMngKsfp+rdKu5cpNw5Ywo9GpzcJsa4=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241028034651-d5e33b3f62fa/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241028064149-11634d513a92 h1:6pyhATMlI7iQKrYyQHrw5RQA0drZe6JVzYM2NHYcgIY=
-gitee.com/xuyiping_admin/go_proto v0.0.0-20241028064149-11634d513a92/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20241028071126-73c3c42b5159 h1:xcAqrT40ukQeDmRvmaY33iEkfg5zSYEB0cBsxJ6v1KU=
 gitee.com/xuyiping_admin/go_proto v0.0.0-20241028071126-73c3c42b5159/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
-gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015 h1:dfb5dRd57L2HKjdwLT93UFmPYFPOmEl56gtZmqcNnaE=
-gitee.com/xuyiping_admin/pkg v0.0.0-20231218082641-aac597b8a015/go.mod h1:Fk4GYI/v0IK3XFrm1Gn+VkgCz5Y7mfswD5hsTJYOG6A=
-gitee.com/xuyiping_admin/pkg v0.0.0-20241008063555-121a776fd331 h1:qJcpJ3o+O7uxDqR0I9LijQmi607IKvhf4mGum/ZUPT0=
-gitee.com/xuyiping_admin/pkg v0.0.0-20241008063555-121a776fd331/go.mod h1:Fk4GYI/v0IK3XFrm1Gn+VkgCz5Y7mfswD5hsTJYOG6A=
-gitee.com/xuyiping_admin/pkg v0.0.0-20241010101255-0c6bd229b939 h1:ubU0RZ/fiElF9NfDDaJh+czYryqKSoEiMd4ec1emtH8=
-gitee.com/xuyiping_admin/pkg v0.0.0-20241010101255-0c6bd229b939/go.mod h1:Fk4GYI/v0IK3XFrm1Gn+VkgCz5Y7mfswD5hsTJYOG6A=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241028072205-d586542d9487 h1:xeD7qGaA1HyRXc5VvzQmeIQj040NuZ5TfVRx4NUg16Q=
+gitee.com/xuyiping_admin/go_proto v0.0.0-20241028072205-d586542d9487/go.mod h1:BKrFW6YLDectlQcQk3FYKBeXvjEiodAKJ5rq7O/QiPE=
+gitee.com/xuyiping_admin/pkg v0.0.0-20241028073848-407d15a8f011 h1:jiabQDYcT5PjqyLh57xecf7FpADdWR88+JCrdvBpqfM=
+gitee.com/xuyiping_admin/pkg v0.0.0-20241028073848-407d15a8f011/go.mod h1:Fk4GYI/v0IK3XFrm1Gn+VkgCz5Y7mfswD5hsTJYOG6A=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=

+ 3 - 9
http/handler/analysis/analysis.go

@@ -97,7 +97,7 @@ func PenWeight(c *gin.Context) {
 	ginutil.JSONResp(c, res)
 }
 
-func TwentyonePregnantRate(c *gin.Context) {
+func TwentyOnePregnantRate(c *gin.Context) {
 	var req pasturePb.TwentyOnePregnantRateRequest
 	if err := ginutil.BindProto(c, &req); err != nil {
 		apierr.AbortBadRequest(c, http.StatusBadRequest, err)
@@ -113,7 +113,7 @@ func TwentyonePregnantRate(c *gin.Context) {
 		return
 	}
 
-	res, err := middleware.Dependency(c).StoreEventHub.OpsService.TwentyonePregnantRate(c, &req)
+	res, err := middleware.Dependency(c).StoreEventHub.OpsService.TwentyOnePregnantRate(c, &req)
 	if err != nil {
 		apierr.ClassifiedAbort(c, err)
 		return
@@ -193,13 +193,7 @@ func CalvingReport(c *gin.Context) {
 		return
 	}
 
-	pagination := &pasturePb.PaginationModel{
-		Page:       int32(c.GetInt(middleware.Page)),
-		PageSize:   int32(c.GetInt(middleware.PageSize)),
-		PageOffset: int32(c.GetInt(middleware.PageOffset)),
-	}
-
-	res, err := middleware.Dependency(c).StoreEventHub.OpsService.CalvingReport(c, &req, pagination)
+	res, err := middleware.Dependency(c).StoreEventHub.OpsService.CalvingReport(c, &req)
 	if err != nil {
 		apierr.ClassifiedAbort(c, err)
 		return

+ 1 - 1
http/route/analysis_api.go

@@ -18,9 +18,9 @@ func AnalysisAPI(opts ...func(engine *gin.Engine)) func(s *gin.Engine) {
 		pastureRoute.POST("/mating/timely", analysis.MatingTimeLy)
 		pastureRoute.POST("/pen/weight", analysis.PenWeight)
 		pastureRoute.POST("/abortion/rate", analysis.AbortionRate)
-		pastureRoute.POST("/twentyone/pregnant/rate", analysis.TwentyonePregnantRate)
 
 		pastureRoute.POST("/pregnancy/report", analysis.PregnancyReport)
 		pastureRoute.POST("/calving/report", analysis.CalvingReport)
+		pastureRoute.POST("/twenty/one/pregnant/rate", analysis.TwentyOnePregnantRate)
 	}
 }

+ 1 - 2
model/event_calving.go

@@ -115,8 +115,7 @@ func (e EventCalvingSlice) ToPB() []*pasturePb.CalvingReportTable {
 	res := make([]*pasturePb.CalvingReportTable, len(e))
 	for i, v := range e {
 		res[i] = &pasturePb.CalvingReportTable{
-			Id:                  int32(v.Id),
-			DataTimeFormat:      "",
+			StatisticMethod:     v.Remarks,
 			Twins:               0,
 			TwinsRate:           0,
 			Bulls:               0,

+ 3 - 6
module/backend/analysis.go

@@ -9,12 +9,10 @@ import (
 	"strings"
 	"time"
 
+	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
 	"gitee.com/xuyiping_admin/pkg/logger/zaplog"
-	"go.uber.org/zap"
-
 	"gitee.com/xuyiping_admin/pkg/xerr"
-
-	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+	"go.uber.org/zap"
 )
 
 // GrowthCurve 生长曲线 获取图表数据
@@ -382,7 +380,6 @@ func (s *StoreEntry) AbortionRate(ctx context.Context, req *pasturePb.AbortionRa
 		abortionRateMonth := float64(0)
 		if pregnantCountMonth > 0 && v2.CowCount > 0 {
 			abortionRateMonth = util.RoundToTwoDecimals(float64(v2.CowCount) / float64(pregnantCountMonth) * 100)
-
 		}
 
 		chart.Header = append(chart.Header, v2.Month)
@@ -408,7 +405,7 @@ func (s *StoreEntry) AbortionRate(ctx context.Context, req *pasturePb.AbortionRa
 	}, nil
 }
 
-func (s *StoreEntry) TwentyonePregnantRate(ctx context.Context, req *pasturePb.TwentyOnePregnantRateRequest) (*pasturePb.TwentyOnePregnantRateResponse, error) {
+func (s *StoreEntry) TwentyOnePregnantRate(ctx context.Context, req *pasturePb.TwentyOnePregnantRateRequest) (*pasturePb.TwentyOnePregnantRateResponse, error) {
 	startUnix := util.TimeParseLocalUnix(req.StartDate)
 	endUnix := util.TimeParseLocalUnix(req.EndDate)
 

+ 91 - 12
module/backend/analysis_other.go

@@ -7,9 +7,8 @@ import (
 	"kpt-pasture/util"
 	"net/http"
 
-	"gitee.com/xuyiping_admin/pkg/xerr"
-
 	pasturePb "gitee.com/xuyiping_admin/go_proto/proto/go/backend/cow"
+	"gitee.com/xuyiping_admin/pkg/xerr"
 )
 
 // PregnancyReport 孕检报告
@@ -55,7 +54,7 @@ func (s *StoreEntry) PregnancyReport(ctx context.Context, req *pasturePb.Pregnan
 }
 
 // CalvingReport 产犊报告
-func (s *StoreEntry) CalvingReport(ctx context.Context, req *pasturePb.CalvingReportRequest, pagination *pasturePb.PaginationModel) (*pasturePb.CalvingReportResponse, error) {
+func (s *StoreEntry) CalvingReport(ctx context.Context, req *pasturePb.CalvingReportRequest) (*pasturePb.CalvingReportResponse, error) {
 	lastDayOfMonth, err := util.GetLastDayOfMonth(req.EndDayTime)
 	if err != nil {
 		return nil, xerr.WithStack(err)
@@ -67,21 +66,101 @@ func (s *StoreEntry) CalvingReport(ctx context.Context, req *pasturePb.CalvingRe
 		return nil, xerr.Custom("开始时间不能大于结束时间")
 	}
 
-	var count int64 = 0
-	eventCalvingList := make([]*model.EventCalving, 0)
-	pref := s.DB.Model(new(model.EventCalving)).
-		Where("reality_day BETWEEN  ? AND ? ", startDayTimeUnix, endDayTimeUnix)
+	eventCalving1 := make([]*pasturePb.CalvingReportTable, 0)
+	pref1 := s.DB.Model(new(model.EventCalving)).
+		Select(fmt.Sprint(`DATE_FORMAT(FROM_UNIXTIME(reality_day), '%Y-%m') AS statistic_method,cow_kind,`)+fmt.Sprintf(
+			`SUM(child_number) AS totalCount,
+			SUM(CASE WHEN child_number > 1 THEN child_number ELSE 0 END) AS twins,
+			SUM(CASE WHEN pregnancy_age <= %d THEN 1 ELSE 0 END) AS premature_labor_count,
+			SUM(CASE WHEN pregnancy_age >= %d THEN 1 ELSE 0 END) AS late_labor_count,
+			count(*) as total_count`, req.PrematureLabor, req.LateLabor),
+		).Where("reality_day BETWEEN  ? AND ? ", startDayTimeUnix, endDayTimeUnix)
+
+	if req.AnalysisMethod > 0 {
+		switch req.AnalysisMethod {
+		case pasturePb.CalvingAnalysisMethod_months:
+			pref1.Group("statistic_method").Order("statistic_method")
+		case pasturePb.CalvingAnalysisMethod_cowKind:
+			pref1.Group("cow_kind").Order("cow_kind")
+		}
+	}
 
-	fmt.Println(pref)
+	if err = pref1.Find(&eventCalving1).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	eventCalving2 := make([]*pasturePb.CalvingReportTable, 0)
+	pref2 := s.DB.Model(new(model.CalvingCalf)).
+		Select(fmt.Sprint(`DATE_FORMAT(FROM_UNIXTIME(birth_at), '%Y-%m') AS statistic_method, cow_kind,
+			SUM(CASE WHEN sex = 1 THEN 1 ELSE 0 END) AS bulls,
+    		SUM(CASE WHEN sex = 2 THEN 1 ELSE 0 END) AS cows,
+    		SUM(CASE WHEN is_live = 1 THEN 1 ELSE 0 END) AS survive_count,
+    		SUM(CASE WHEN is_live = 2 THEN 1 ELSE 0 END) AS die_count,
+    		SUM(CASE WHEN is_live = 2 AND sex = 1 THEN 1 ELSE 0 END) AS bulls_die_count,
+			SUM(CASE WHEN is_live = 2 AND sex = 2 THEN 1 ELSE 0 END) AS cows_die_count,
+    		SUM(CASE WHEN is_adoption = 1 THEN 1 ELSE 0 END) AS adopt_count`)).
+		Where("birth_at BETWEEN ? AND ?", startDayTimeUnix, endDayTimeUnix)
+
+	if req.AnalysisMethod > 0 {
+		switch req.AnalysisMethod {
+		case pasturePb.CalvingAnalysisMethod_months:
+			pref2.Group("statistic_method").Order("statistic_method")
+		case pasturePb.CalvingAnalysisMethod_cowKind:
+			pref2.Group("cow_kind").Order("cow_kind")
+		}
+	}
+
+	if err = pref2.Find(&eventCalving2).Error; err != nil {
+		return nil, xerr.WithStack(err)
+	}
+
+	// 合并数据集
+	for _, v1 := range eventCalving1 {
+		for _, v2 := range eventCalving2 {
+			if v1.StatisticMethod != v2.StatisticMethod && v1.CowKind != v2.CowKind {
+				continue
+			}
+			v1.Bulls = v2.Bulls
+			v1.Cows = v2.Cows
+			v1.SurviveCount = v2.SurviveCount
+			v1.DieCount = v2.DieCount
+			v1.BullsDieCount = v2.BullsDieCount
+			v1.CowsDieCount = v2.CowsDieCount
+			v1.AdoptCount = v2.AdoptCount
+		}
+	}
+
+	cowKindMap := s.CowKindMap()
+	for _, v := range eventCalving1 {
+		if req.AnalysisMethod == pasturePb.CalvingAnalysisMethod_cowKind {
+			v.StatisticMethod = cowKindMap[v.CowKind]
+		}
+		if v.TotalCount > 0 {
+			v.TwinsRate = float32(util.RoundToTwoDecimals(float64(v.Twins) / float64(v.TotalCount) * 100))
+			v.BullsDieRate = float32(util.RoundToTwoDecimals(float64(v.Bulls) / float64(v.TotalCount) * 100))
+			v.CowsRate = float32(util.RoundToTwoDecimals(float64(v.Cows) / float64(v.TotalCount) * 100))
+			v.DieRate = float32(util.RoundToTwoDecimals(float64(v.DieCount) / float64(v.TotalCount) * 100))
+		}
+
+		if v.Bulls > 0 {
+			v.BullsDieRate = float32(util.RoundToTwoDecimals(float64(v.BullsDieCount) / float64(v.Bulls) * 100))
+		}
+
+		if v.Cows > 0 {
+			v.CowsDieRate = float32(util.RoundToTwoDecimals(float64(v.CowsDieCount) / float64(v.Cows) * 100))
+		}
+		v.NormalLaborCount = v.TotalCount - (v.PrematureLaborCount + v.LateLaborCount)
+		if v.NormalLaborCount <= 0 {
+			v.NormalLaborCount = 0
+		}
+	}
 
 	return &pasturePb.CalvingReportResponse{
 		Code:    http.StatusOK,
 		Message: "ok",
 		Data: &pasturePb.CalvingReportData{
-			List:     model.EventCalvingSlice(eventCalvingList).ToPB(),
-			Total:    int32(count),
-			PageSize: pagination.PageSize,
-			Page:     pagination.Page,
+			List:  eventCalving1,
+			Total: int32(len(eventCalving1)),
 		},
 	}, nil
 }

+ 1 - 1
module/backend/enum_options.go

@@ -184,7 +184,7 @@ func (s *StoreEntry) SystemBaseConfigOptions(ctx context.Context, optionsName, i
 		"healthStatus":           s.HealthStatusEnumList,
 		"calendarType":           CalendarTypeEnumList,
 		"calvingAnalysisMethod":  s.CalvingAnalysisMethodEnumList,
-		"lact":                   s.CalvingAnalysisMethodEnumList,
+		"lact":                   s.LactEnumList,
 	}
 
 	getConfigFunc, ok := getConfigFuncMap[optionsName]

+ 2 - 2
module/backend/interface.go

@@ -212,9 +212,9 @@ type AnalyseService interface {
 	MatingTimely(ctx context.Context, req *pasturePb.MatingTimelyRequest) (*model.MatingTimelyResponse, error)
 	PenWeight(ctx context.Context, req *pasturePb.PenWeightRequest, pagination *pasturePb.PaginationModel) (*pasturePb.PenWeightResponse, error)
 	AbortionRate(ctx context.Context, req *pasturePb.AbortionRateRequest) (*pasturePb.AbortionRateResponse, error)
-	TwentyonePregnantRate(ctx context.Context, req *pasturePb.TwentyOnePregnantRateRequest) (*pasturePb.TwentyOnePregnantRateResponse, error)
+	TwentyOnePregnantRate(ctx context.Context, req *pasturePb.TwentyOnePregnantRateRequest) (*pasturePb.TwentyOnePregnantRateResponse, error)
 	PregnancyReport(ctx context.Context, req *pasturePb.PregnancyReportRequest, pagination *pasturePb.PaginationModel) (*pasturePb.PregnancyReportResponse, error)
-	CalvingReport(ctx context.Context, req *pasturePb.CalvingReportRequest, pagination *pasturePb.PaginationModel) (*pasturePb.CalvingReportResponse, error)
+	CalvingReport(ctx context.Context, req *pasturePb.CalvingReportRequest) (*pasturePb.CalvingReportResponse, error)
 }
 
 //go:generate mockgen -destination mock/DashboardService.go -package kptservicemock kpt-pasture/module/backend DashboardService