init
This commit is contained in:
parent
86658d3a3f
commit
7f9822e81f
.drone.yml.gitmodules
.idea
DockerfileTestREADME.mdbuild
clear.shcmd
conf
config
deploy/k8s/test
go.modgo.suminternal
controller
handler
logic
model
serializer
pb
pkg
amqp
ant
app
bccr
cache
db
err
init
logger
msg
service
snowf
tracing
utils
runtime
93
.drone.yml
Normal file
93
.drone.yml
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: chain-dci【K8s-测试服】
|
||||||
|
volumes:
|
||||||
|
- name: pkgdeps
|
||||||
|
host:
|
||||||
|
path: /mnt/storage/data/drone/define_cache/chain-dci
|
||||||
|
- name: docker
|
||||||
|
host:
|
||||||
|
path: /var/run/docker.sock
|
||||||
|
- name: docker-daemon
|
||||||
|
host:
|
||||||
|
path: /etc/docker/daemon.json
|
||||||
|
steps:
|
||||||
|
- name: fetch submodules
|
||||||
|
image: testhub.szjixun.cn:9043/public/plugins/git
|
||||||
|
pull: if-not-exists
|
||||||
|
commands:
|
||||||
|
- git submodule update --init --force --recursive --remote
|
||||||
|
- name: build
|
||||||
|
image: testhub.szjixun.cn:9043/public/golang:1.20-alpine
|
||||||
|
pull: if-not-exists
|
||||||
|
environment:
|
||||||
|
GOPROXY: "https://goproxy.cn,direct"
|
||||||
|
GOPATH: /go
|
||||||
|
GOCACHE: /go/pkg/mod/cache
|
||||||
|
volumes:
|
||||||
|
- name: pkgdeps
|
||||||
|
path: /go/pkg
|
||||||
|
commands:
|
||||||
|
- cp DockerfileTest Dockerfile
|
||||||
|
- CGO_ENABLED=0 go build -ldflags "-s -w" -o oa-meeting-server ./cmd
|
||||||
|
- name: publish
|
||||||
|
image: testhub.szjixun.cn:9043/public/plugins/docker
|
||||||
|
pull: if-not-exists
|
||||||
|
volumes:
|
||||||
|
- name: docker
|
||||||
|
path: /var/run/docker.sock
|
||||||
|
- name: pkgdeps
|
||||||
|
path: /cache
|
||||||
|
settings:
|
||||||
|
purge: false
|
||||||
|
username:
|
||||||
|
from_secret: harbor22-name
|
||||||
|
password:
|
||||||
|
from_secret: harbor22-password
|
||||||
|
registry:
|
||||||
|
from_secret: harbor22-host
|
||||||
|
repo: testhub.szjixun.cn:9043/k8stest/chain-dci-server
|
||||||
|
tags:
|
||||||
|
- latest
|
||||||
|
- ${DRONE_BUILD_NUMBER}
|
||||||
|
- name: Deploy app
|
||||||
|
image: testhub.szjixun.cn:9043/public/drone-k8s:latest
|
||||||
|
settings:
|
||||||
|
debug: true
|
||||||
|
build_number: ${DRONE_BUILD_NUMBER}
|
||||||
|
kuboard_accessKey: i685rr3fr6dy.4zt5jbh6t4kxyxj8zt6dih6cdc4zbjwz
|
||||||
|
namespace: "chain-server"
|
||||||
|
deployment_name: "chain-dci-server"
|
||||||
|
dashboard: kuboard
|
||||||
|
build_repo:
|
||||||
|
from_secret: build_repo
|
||||||
|
|
||||||
|
- name: 钉钉通知
|
||||||
|
image: testhub.szjixun.cn:9043/public/drone-ding
|
||||||
|
settings:
|
||||||
|
token:
|
||||||
|
from_secret: ding-token
|
||||||
|
secret:
|
||||||
|
from_secret: ding-secret
|
||||||
|
type: markdown
|
||||||
|
message_color: true
|
||||||
|
message_pic: true
|
||||||
|
sha_link: true
|
||||||
|
db_log: true
|
||||||
|
db_type: mysql
|
||||||
|
db_name: notelog
|
||||||
|
db_host: "172.16.100.99"
|
||||||
|
db_port: 9007
|
||||||
|
db_username: artuser # 后期需要修改
|
||||||
|
db_password: "C250PflXIWv2SQm8" # 后期需要修改
|
||||||
|
when:
|
||||||
|
status: [ failure, success ]
|
||||||
|
branch: dev
|
||||||
|
network:
|
||||||
|
subnet: dnmp_default
|
||||||
|
trigger:
|
||||||
|
branch:
|
||||||
|
- dev
|
||||||
|
event:
|
||||||
|
- push
|
||||||
|
- custom
|
4
.gitmodules
vendored
Normal file
4
.gitmodules
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
[submodule "oa-proto"]
|
||||||
|
path = oa-proto
|
||||||
|
url = http://192.168.12.3:3000/fonchain/oa-proto.git
|
||||||
|
branch = main
|
8
.idea/.gitignore
vendored
Normal file
8
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# 默认忽略的文件
|
||||||
|
/shelf/
|
||||||
|
/workspace.xml
|
||||||
|
# 基于编辑器的 HTTP 客户端请求
|
||||||
|
/httpRequests/
|
||||||
|
# Datasource local storage ignored files
|
||||||
|
/dataSources/
|
||||||
|
/dataSources.local.xml
|
13
.idea/chain-dci.iml
Normal file
13
.idea/chain-dci.iml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module type="WEB_MODULE" version="4">
|
||||||
|
<component name="Go" enabled="true">
|
||||||
|
<buildTags>
|
||||||
|
<option name="goVersion" value="go1.9" />
|
||||||
|
</buildTags>
|
||||||
|
</component>
|
||||||
|
<component name="NewModuleRootManager">
|
||||||
|
<content url="file://$MODULE_DIR$" />
|
||||||
|
<orderEntry type="inheritedJdk" />
|
||||||
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
</component>
|
||||||
|
</module>
|
8
.idea/misc.xml
Normal file
8
.idea/misc.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="SwUserDefinedSpecifications">
|
||||||
|
<option name="specTypeByUrl">
|
||||||
|
<map />
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="ProjectModuleManager">
|
||||||
|
<modules>
|
||||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/chain-dci.iml" filepath="$PROJECT_DIR$/.idea/chain-dci.iml" />
|
||||||
|
</modules>
|
||||||
|
</component>
|
||||||
|
</project>
|
6
.idea/vcs.xml
Normal file
6
.idea/vcs.xml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
22
DockerfileTest
Normal file
22
DockerfileTest
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
FROM testhub.szjixun.cn:9043/public/golang:1.20-alpine AS builder
|
||||||
|
|
||||||
|
LABEL stage=gobuilder
|
||||||
|
ENV CGO_ENABLED 0
|
||||||
|
ENV GOPROXY https://goproxy.cn,direct
|
||||||
|
WORKDIR /build
|
||||||
|
COPY chain-dci-server /app/chain-dci-server
|
||||||
|
|
||||||
|
#FROM 172.16.100.99:9006/alpine
|
||||||
|
#RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||||
|
#RUN apk update --no-cache
|
||||||
|
#RUN apk add --no-cache ca-certificates
|
||||||
|
#RUN apk add --no-cache tzdata
|
||||||
|
FROM testhub.szjixun.cn:9043/public/self-alpine
|
||||||
|
COPY ./conf /app/conf
|
||||||
|
|
||||||
|
ENV TZ Asia/Shanghai
|
||||||
|
ENV MODE_ENV k8stest
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --from=builder /app/chain-dci-server .
|
||||||
|
EXPOSE 20117
|
||||||
|
CMD ["/app/chain-dci-server"]
|
16
README.md
16
README.md
@ -1,3 +1,17 @@
|
|||||||
# chain-dci
|
# chain-dci
|
||||||
|
|
||||||
数登
|
蚂蚁链版权保护接入指南:https://antdigital.com/docs/11/305591#900136f865aiw
|
||||||
|
账号:18051299227
|
||||||
|
|
||||||
|
测试环境调用入口:EndPoint:https://openapi-sit.antchain.antgroup.com/gateway.do
|
||||||
|
|
||||||
|
线上环境调用入口:EndPoint:https://openapi.antchain.antgroup.com/gateway.do
|
||||||
|
|
||||||
|
```text
|
||||||
|
#DCI申领流程
|
||||||
|
https://cdns.fontree.cn/fonchain-main/test/image/0/chain-dci/file/24bfa6de-cf39-4bb5-83bf-6a64d2b0d534.png
|
||||||
|
```
|
||||||
|
```text
|
||||||
|
#数字版权登记流程
|
||||||
|
https://cdns.fontree.cn/fonchain-main/test/image/0/chain-dci/file/b2b9ebf8-5e8a-4697-af11-c07f788a6f77.png
|
||||||
|
```
|
3
build/.gitignore
vendored
Normal file
3
build/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
*
|
||||||
|
!.gitignore
|
||||||
|
!.gitkeep
|
0
build/.gitkeep
Normal file
0
build/.gitkeep
Normal file
2
clear.sh
Normal file
2
clear.sh
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
ls pb/dci/*.pb.go | xargs -n1 -IX bash -c 'sed s/,omitempty// X > X.tmp && mv X{.tmp,}';
|
45
cmd/app.go
Normal file
45
cmd/app.go
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
dciConfig "chain-dci/config"
|
||||||
|
"chain-dci/internal/controller"
|
||||||
|
_ "chain-dci/internal/handler"
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
common "chain-dci/pkg/init"
|
||||||
|
"chain-dci/pkg/tracing"
|
||||||
|
"dubbo.apache.org/dubbo-go/v3/config"
|
||||||
|
_ "dubbo.apache.org/dubbo-go/v3/filter/tps/strategy"
|
||||||
|
_ "dubbo.apache.org/dubbo-go/v3/imports"
|
||||||
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
||||||
|
"github.com/bwmarrin/snowflake"
|
||||||
|
antCloud "github.com/huyi-cn/antcloud-golang-sdk"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewApp(Lg *zap.Logger, JaegerTracer *tracing.JaegerProvider, AntClient *antCloud.Client, BccrClient *bccrClient.Client, SfNode *snowflake.Node) *app.App {
|
||||||
|
return &app.App{
|
||||||
|
Lg: Lg,
|
||||||
|
//RedisClient: RedisClient,
|
||||||
|
JaegerTracer: JaegerTracer,
|
||||||
|
AntClient: AntClient,
|
||||||
|
BccrClient: BccrClient,
|
||||||
|
SfNode: SfNode,
|
||||||
|
//RtcClient: RtcClient,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
var err error
|
||||||
|
dciConfig.GetOptions()
|
||||||
|
app.ModuleClients, err = InitApp()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
//注册服务
|
||||||
|
config.SetProviderService(&controller.DciProvider{})
|
||||||
|
common.Init()
|
||||||
|
if err = config.Load(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
select {}
|
||||||
|
}
|
20
cmd/wire.go
Normal file
20
cmd/wire.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
// go:build wireinject
|
||||||
|
//go:build wireinject
|
||||||
|
// +build wireinject
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pkg/ant"
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
"chain-dci/pkg/bccr"
|
||||||
|
"chain-dci/pkg/logger"
|
||||||
|
"chain-dci/pkg/snowf"
|
||||||
|
"chain-dci/pkg/tracing"
|
||||||
|
"github.com/google/wire"
|
||||||
|
)
|
||||||
|
|
||||||
|
func InitApp() (*app.App, error) {
|
||||||
|
wire.Build(logger.Provider, tracing.Provider, ant.Provider, bccr.Provider, snowf.Provider, NewApp)
|
||||||
|
return &app.App{}, nil
|
||||||
|
}
|
33
cmd/wire_gen.go
Normal file
33
cmd/wire_gen.go
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
// Code generated by Wire. DO NOT EDIT.
|
||||||
|
|
||||||
|
//go:generate go run github.com/google/wire/cmd/wire
|
||||||
|
//go:build !wireinject
|
||||||
|
// +build !wireinject
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pkg/ant"
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
"chain-dci/pkg/bccr"
|
||||||
|
"chain-dci/pkg/logger"
|
||||||
|
"chain-dci/pkg/snowf"
|
||||||
|
"chain-dci/pkg/tracing"
|
||||||
|
)
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "dubbo.apache.org/dubbo-go/v3/filter/tps/strategy"
|
||||||
|
_ "dubbo.apache.org/dubbo-go/v3/imports"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Injectors from wire.go:
|
||||||
|
|
||||||
|
func InitApp() (*app.App, error) {
|
||||||
|
zapLogger := logger.ZapInit()
|
||||||
|
jaegerProvider := tracing.NewTracing()
|
||||||
|
client := ant.NewAntClient()
|
||||||
|
clientClient := bccr.NewBccrClient()
|
||||||
|
node := snowf.NewSf()
|
||||||
|
appApp := NewApp(zapLogger, jaegerProvider, client, clientClient, node)
|
||||||
|
return appApp, nil
|
||||||
|
}
|
42
conf/dev/config.yaml
Normal file
42
conf/dev/config.yaml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
system:
|
||||||
|
mode: dev #正式 prod #测试 test #开发 dev
|
||||||
|
config_source: config
|
||||||
|
#oaMeeting:
|
||||||
|
# host: 127.0.0.1
|
||||||
|
# port: 3306
|
||||||
|
# user: dyb
|
||||||
|
# password: rootdyb
|
||||||
|
# db_name: "oa-meeting"
|
||||||
|
antCloud:
|
||||||
|
access_key: "ACsK4CQqzj5rGSKf"
|
||||||
|
access_key_secret: "SJmH5eATWY26tJrVg8QyHaBGbLNCbj7y"
|
||||||
|
end_point: "https://openapi-sit.antchain.antgroup.com/gateway.do"
|
||||||
|
Bccr:
|
||||||
|
access_key_id: "ACsK4CQqzj5rGSKf"
|
||||||
|
access_key_secret: "SJmH5eATWY26tJrVg8QyHaBGbLNCbj7y"
|
||||||
|
end_point: "https://openapi-sit.antchain.antgroup.com/gateway.do"
|
||||||
|
#aliYunRtc:
|
||||||
|
# appid: "aeztom27"
|
||||||
|
# app_key: "76c62466cbd77d7a3606660a15861d1e"
|
||||||
|
#redis:
|
||||||
|
# db: 1
|
||||||
|
# addr: 127.0.0.1:6379
|
||||||
|
# password: "7532T6R"
|
||||||
|
zapLog:
|
||||||
|
level: "info"
|
||||||
|
filename: "logs/chain-dci.log"
|
||||||
|
max_size: 5
|
||||||
|
max_age: 30
|
||||||
|
max_backups: 30
|
||||||
|
snowflake:
|
||||||
|
node_num: 4
|
||||||
|
start_time: "2023-05-31"
|
||||||
|
jaeger:
|
||||||
|
addr: "127.0.0.1:6831"
|
||||||
|
open: false
|
||||||
|
#rabbitmq:
|
||||||
|
# user: "myuser"
|
||||||
|
# password: "mypass"
|
||||||
|
# host: "localhost"
|
||||||
|
# port: 5672
|
||||||
|
# vhost: "oa"
|
68
conf/dev/dubbogo.yaml
Normal file
68
conf/dev/dubbogo.yaml
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
dubbo:
|
||||||
|
metrics:
|
||||||
|
enable: true # default is true
|
||||||
|
path: /metrics # default is /metrics
|
||||||
|
port: 9092 # default is 9090
|
||||||
|
namespace: dubboDci # default is dubbo 作为数据上报 metrics 的前缀
|
||||||
|
registries:
|
||||||
|
demoZK:
|
||||||
|
protocol: zookeeper
|
||||||
|
timeout: 10s
|
||||||
|
address: 127.0.0.1:2181
|
||||||
|
protocols:
|
||||||
|
triple: #triple
|
||||||
|
name: tri
|
||||||
|
port: 20201
|
||||||
|
provider:
|
||||||
|
filter: tracing
|
||||||
|
services:
|
||||||
|
MeetingProvider:
|
||||||
|
interface: com.fontree.microservices.chain.dci
|
||||||
|
retries: 0
|
||||||
|
filter: tps,tracing
|
||||||
|
tps.limiter: method-service
|
||||||
|
tps.limit.strategy: fixedWindow
|
||||||
|
tps.limit.rejected.handler: DefaultValueHandler
|
||||||
|
tps.limit.interval: 1000 # 间隔时间
|
||||||
|
tps.limit.rate: 30 # 间隔时间内次数
|
||||||
|
warmup: 100 #预热时间
|
||||||
|
logger:
|
||||||
|
zap-config:
|
||||||
|
level: info # 日志级别
|
||||||
|
development: false
|
||||||
|
disableCaller: false
|
||||||
|
disableStacktrace: false
|
||||||
|
encoding: "json"
|
||||||
|
# zap encoder 配置
|
||||||
|
encoderConfig:
|
||||||
|
messageKey: "message"
|
||||||
|
levelKey: "level"
|
||||||
|
timeKey: "time"
|
||||||
|
nameKey: "logger"
|
||||||
|
callerKey: "caller"
|
||||||
|
stacktraceKey: "stacktrace"
|
||||||
|
lineEnding: ""
|
||||||
|
levelEncoder: "capitalColor"
|
||||||
|
timeEncoder: "iso8601"
|
||||||
|
durationEncoder: "seconds"
|
||||||
|
callerEncoder: "short"
|
||||||
|
nameEncoder: ""
|
||||||
|
EncodeTime: zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05.000"),
|
||||||
|
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||||
|
outputPaths:
|
||||||
|
- "stderr"
|
||||||
|
errorOutputPaths:
|
||||||
|
- "stderr"
|
||||||
|
lumberjack-config:
|
||||||
|
# 写日志的文件名称
|
||||||
|
filename: "runtime/logs/chain-dci.log"
|
||||||
|
# 每个日志文件长度的最大大小,单位是 MiB。默认 100MiB
|
||||||
|
maxSize: 5
|
||||||
|
# 日志保留的最大天数(只保留最近多少天的日志)
|
||||||
|
maxAge: 30
|
||||||
|
# 只保留最近多少个日志文件,用于控制程序总日志的大小
|
||||||
|
maxBackups: 30
|
||||||
|
# 是否使用本地时间,默认使用 UTC 时间
|
||||||
|
localTime: true
|
||||||
|
# 是否压缩日志文件,压缩方法 gzip
|
||||||
|
compress: false
|
34
conf/k8stest/config.yaml
Normal file
34
conf/k8stest/config.yaml
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
system:
|
||||||
|
mode: dev #正式 prod #测试 test #开发 dev
|
||||||
|
config_source: configmap
|
||||||
|
#oaMeeting:
|
||||||
|
# host: ${mysql.host|localhost}
|
||||||
|
# port: ${mysql.port|3306}
|
||||||
|
# user: ${mysql.user}
|
||||||
|
# password: ${mysql.password}
|
||||||
|
# db_name: ${oa-meeting.mysql.db_name}
|
||||||
|
#aliYunRtc:
|
||||||
|
# appid: ${aliyun-rtc.appid}
|
||||||
|
# app_key: ${aliyun-rtc.app_key}
|
||||||
|
#redis:
|
||||||
|
# db: ${oa-meeting.redis.db}
|
||||||
|
# addr: ${redis.addr}
|
||||||
|
# password: ${redis.password}
|
||||||
|
zapLog:
|
||||||
|
level: "info"
|
||||||
|
filename: "logs/oa-meeting.log"
|
||||||
|
max_size: ${zap.max_size}
|
||||||
|
max_age: ${zap.max_age}
|
||||||
|
max_backups: ${zap.max_backups}
|
||||||
|
snowflake:
|
||||||
|
node_num: ${oa-meeting.snowflake.node_num}
|
||||||
|
start_time: "2023-05-31"
|
||||||
|
jaeger:
|
||||||
|
addr: ${jaeger.host}
|
||||||
|
open: ${oa-meeting.jaeger_open}
|
||||||
|
#rabbitmq:
|
||||||
|
# user: ${rabbitmq.user}
|
||||||
|
# password: ${rabbitmq.password}
|
||||||
|
# host: ${rabbitmq.host}
|
||||||
|
# port: ${rabbitmq.port}
|
||||||
|
# vhost: ${oa-meeting.rabbitmq.vhost}
|
68
conf/k8stest/dubbogo.yaml
Normal file
68
conf/k8stest/dubbogo.yaml
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
dubbo:
|
||||||
|
metrics:
|
||||||
|
enable: true # default is true
|
||||||
|
path: /metrics # default is /metrics
|
||||||
|
port: 9092 # default is 9090
|
||||||
|
namespace: dubboDci # default is dubbo 作为数据上报 metrics 的前缀
|
||||||
|
registries:
|
||||||
|
demoZK:
|
||||||
|
protocol: zookeeper
|
||||||
|
timeout: 10s
|
||||||
|
address: 172.16.100.93:2181
|
||||||
|
protocols:
|
||||||
|
triple: #triple
|
||||||
|
name: tri
|
||||||
|
port: 20117
|
||||||
|
provider:
|
||||||
|
filter: tracing
|
||||||
|
services:
|
||||||
|
MeetingProvider:
|
||||||
|
interface: com.fontree.microservices.chain.dci
|
||||||
|
retries: 0
|
||||||
|
filter: tps,tracing
|
||||||
|
tps.limiter: method-service
|
||||||
|
tps.limit.strategy: fixedWindow
|
||||||
|
tps.limit.rejected.handler: DefaultValueHandler
|
||||||
|
tps.limit.interval: 1000 # 间隔时间
|
||||||
|
tps.limit.rate: 30 # 间隔时间内次数
|
||||||
|
warmup: 100 #预热时间
|
||||||
|
logger:
|
||||||
|
zap-config:
|
||||||
|
level: info # 日志级别
|
||||||
|
development: false
|
||||||
|
disableCaller: false
|
||||||
|
disableStacktrace: false
|
||||||
|
encoding: "json"
|
||||||
|
# zap encoder 配置
|
||||||
|
encoderConfig:
|
||||||
|
messageKey: "message"
|
||||||
|
levelKey: "level"
|
||||||
|
timeKey: "time"
|
||||||
|
nameKey: "logger"
|
||||||
|
callerKey: "caller"
|
||||||
|
stacktraceKey: "stacktrace"
|
||||||
|
lineEnding: ""
|
||||||
|
levelEncoder: "capitalColor"
|
||||||
|
timeEncoder: "iso8601"
|
||||||
|
durationEncoder: "seconds"
|
||||||
|
callerEncoder: "short"
|
||||||
|
nameEncoder: ""
|
||||||
|
EncodeTime: zapcore.TimeEncoderOfLayout("2006-01-02 15:04:05.000"),
|
||||||
|
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||||
|
outputPaths:
|
||||||
|
- "stderr"
|
||||||
|
errorOutputPaths:
|
||||||
|
- "stderr"
|
||||||
|
lumberjack-config:
|
||||||
|
# 写日志的文件名称
|
||||||
|
filename: "runtime/logs/chain-dci.log"
|
||||||
|
# 每个日志文件长度的最大大小,单位是 MiB。默认 100MiB
|
||||||
|
maxSize: 5
|
||||||
|
# 日志保留的最大天数(只保留最近多少天的日志)
|
||||||
|
maxAge: 30
|
||||||
|
# 只保留最近多少个日志文件,用于控制程序总日志的大小
|
||||||
|
maxBackups: 30
|
||||||
|
# 是否使用本地时间,默认使用 UTC 时间
|
||||||
|
localTime: true
|
||||||
|
# 是否压缩日志文件,压缩方法 gzip
|
||||||
|
compress: false
|
162
config/config.go
Normal file
162
config/config.go
Normal file
@ -0,0 +1,162 @@
|
|||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pkg/msg"
|
||||||
|
"dubbo.apache.org/dubbo-go/v3/common/constant"
|
||||||
|
"fmt"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
"os"
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Data = new(AppConfig)
|
||||||
|
|
||||||
|
type AppConfig struct {
|
||||||
|
System struct {
|
||||||
|
Mode string
|
||||||
|
ConfigSource string `mapstructure:"config_source"`
|
||||||
|
}
|
||||||
|
ChainDci struct {
|
||||||
|
Host string
|
||||||
|
Port string
|
||||||
|
User string
|
||||||
|
Password string
|
||||||
|
DbName string `mapstructure:"db_name"`
|
||||||
|
}
|
||||||
|
AntCloud struct {
|
||||||
|
AccessKey string `mapstructure:"access_key"`
|
||||||
|
AccessKeySecret string `mapstructure:"access_key_secret"`
|
||||||
|
EndPoint string `mapstructure:"end_point"`
|
||||||
|
}
|
||||||
|
Bccr struct {
|
||||||
|
AccessKeyID string `mapstructure:"access_key_id"`
|
||||||
|
AccessKeySecret string `mapstructure:"access_key_secret"`
|
||||||
|
EndPoint string `mapstructure:"end_point"`
|
||||||
|
}
|
||||||
|
Redis struct {
|
||||||
|
DB string
|
||||||
|
Addr string
|
||||||
|
Password string
|
||||||
|
}
|
||||||
|
ZapLog struct {
|
||||||
|
Level string `mapstructure:"level"`
|
||||||
|
Filename string `mapstructure:"filename"`
|
||||||
|
MaxSize string `mapstructure:"max_size"`
|
||||||
|
MaxAge string `mapstructure:"max_age"`
|
||||||
|
MaxBackups string `mapstructure:"max_backups"`
|
||||||
|
}
|
||||||
|
SnowFlake struct {
|
||||||
|
NodeNum string `mapstructure:"node_num"`
|
||||||
|
StartTime string `mapstructure:"start_time"`
|
||||||
|
}
|
||||||
|
Jaeger struct {
|
||||||
|
Addr string `mapstructure:"host"`
|
||||||
|
Open string `mapstructure:"open"`
|
||||||
|
}
|
||||||
|
RabbitMq struct {
|
||||||
|
User string `mapstructure:"user"`
|
||||||
|
Password string `mapstructure:"password"`
|
||||||
|
Host string `mapstructure:"host"`
|
||||||
|
Port string `mapstructure:"port"`
|
||||||
|
Vhost string `mapstructure:"vhost"`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetConf() (iniConf string, err error) {
|
||||||
|
if os.Getenv(msg.MODE_ENV) != "" {
|
||||||
|
if err = os.Setenv(constant.ConfigFileEnvKey, fmt.Sprintf("./conf/%s/%s", os.Getenv(msg.MODE_ENV), msg.SERVER_DUBBOGO_CONFIG)); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if os.Getenv(msg.MODE_ENV) == "" {
|
||||||
|
iniConf = fmt.Sprintf("../conf/%s", msg.SERVER_CONFIG)
|
||||||
|
} else {
|
||||||
|
iniConf = fmt.Sprintf("./conf/%s/%s", os.Getenv(msg.MODE_ENV), msg.SERVER_CONFIG)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetOptions() {
|
||||||
|
iniConf, err := GetConf()
|
||||||
|
if err != nil {
|
||||||
|
panic("GetOptions err" + err.Error())
|
||||||
|
}
|
||||||
|
if err = Viper(iniConf); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Viper(iniConf string) (err error) {
|
||||||
|
viper.SetConfigFile(iniConf)
|
||||||
|
err = viper.ReadInConfig()
|
||||||
|
if err != nil {
|
||||||
|
panic("viper.ReadInConfig failed" + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = viper.Unmarshal(Data); err != nil {
|
||||||
|
panic("viper.Unmarshal failed" + err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// 如果是configmap模式再修改
|
||||||
|
fmt.Println(Data.System)
|
||||||
|
if Data.System.ConfigSource == "configmap" {
|
||||||
|
traverseFields(reflect.ValueOf(*Data), "", Data)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func traverseFields(value reflect.Value, prefix string, configPtr interface{}) {
|
||||||
|
valueType := value.Type()
|
||||||
|
prefixEnv := "${"
|
||||||
|
suffixEnv := "}"
|
||||||
|
// 遍历结构体的字段
|
||||||
|
for i := 0; i < valueType.NumField(); i++ {
|
||||||
|
field := valueType.Field(i)
|
||||||
|
fieldValue := value.Field(i)
|
||||||
|
// 拼接字段名(带有前缀)
|
||||||
|
fieldName := prefix + field.Name
|
||||||
|
// 判断字段的类型
|
||||||
|
if fieldValue.Kind() == reflect.Struct {
|
||||||
|
// 递归遍历嵌套结构体字段
|
||||||
|
traverseFields(fieldValue, fieldName+".", configPtr)
|
||||||
|
} else {
|
||||||
|
// 获取字段的值
|
||||||
|
fieldValueStr := fmt.Sprintf("%v", fieldValue.Interface())
|
||||||
|
// 判断是不是需要通过环境变量获取
|
||||||
|
if len(fieldValueStr) > 3 && strings.HasPrefix(fieldValueStr, prefixEnv) && strings.HasSuffix(fieldValueStr, suffixEnv) {
|
||||||
|
end := len(fieldValueStr) - len(suffixEnv)
|
||||||
|
var hasDefault bool
|
||||||
|
if strings.Index(fieldValueStr, "|") > 0 {
|
||||||
|
hasDefault = true
|
||||||
|
end = strings.Index(fieldValueStr, "|")
|
||||||
|
}
|
||||||
|
envStr := fieldValueStr[len(prefixEnv):end]
|
||||||
|
getValue := os.Getenv(envStr)
|
||||||
|
if getValue == "" && hasDefault {
|
||||||
|
getValue = fieldValueStr[end+1 : len(fieldValueStr)-len(suffixEnv)]
|
||||||
|
}
|
||||||
|
setSubFieldValue(configPtr, fieldName, getValue)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func setSubFieldValue(configPtr interface{}, fieldPath string, newValue interface{}) {
|
||||||
|
value := reflect.ValueOf(configPtr).Elem()
|
||||||
|
fields := strings.Split(fieldPath, ".")
|
||||||
|
for _, field := range fields {
|
||||||
|
value = value.FieldByName(field)
|
||||||
|
if !value.IsValid() {
|
||||||
|
return // 字段不存在,直接返回
|
||||||
|
}
|
||||||
|
if value.Kind() == reflect.Ptr {
|
||||||
|
value = value.Elem() // 解引用指针类型的字段
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 检查字段是否可设置
|
||||||
|
if value.CanSet() {
|
||||||
|
// 根据字段类型,将新值转换为对应类型并设置字段的值
|
||||||
|
newValue := reflect.ValueOf(newValue).Convert(value.Type())
|
||||||
|
value.Set(newValue)
|
||||||
|
}
|
||||||
|
}
|
58
deploy/k8s/test/deployment-dci.yaml
Normal file
58
deploy/k8s/test/deployment-dci.yaml
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: oa-meeting-server
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: oa-meeting-server
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: oa-meeting-server
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: oa-meeting-server
|
||||||
|
image: testhub.szjixun.cn:9043/k8stest/oa-meeting-server:latest
|
||||||
|
ports:
|
||||||
|
- containerPort: 20006
|
||||||
|
volumeMounts:
|
||||||
|
- name: logs
|
||||||
|
mountPath: /app/logs
|
||||||
|
- name: runtime
|
||||||
|
mountPath: /app/runtime
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: "erp-configmap"
|
||||||
|
- secretRef:
|
||||||
|
name: erp-secret
|
||||||
|
# nodeSelector:
|
||||||
|
# node: node1
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: docker-login-secret
|
||||||
|
volumes:
|
||||||
|
- name: logs
|
||||||
|
nfs:
|
||||||
|
server: node0
|
||||||
|
path: /mnt/storage/erp/oa-meeting-server/logs
|
||||||
|
- name: runtime
|
||||||
|
nfs:
|
||||||
|
server: node0
|
||||||
|
path: /mnt/storage/erp/oa-meeting-server/runtime
|
||||||
|
---
|
||||||
|
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: oa-meeting-server
|
||||||
|
spec:
|
||||||
|
type: NodePort
|
||||||
|
selector:
|
||||||
|
app: oa-meeting-server
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
protocol: TCP
|
||||||
|
nodePort: 20117
|
||||||
|
targetPort: 20117
|
||||||
|
port: 20117
|
169
go.mod
Normal file
169
go.mod
Normal file
@ -0,0 +1,169 @@
|
|||||||
|
module chain-dci
|
||||||
|
|
||||||
|
go 1.20
|
||||||
|
|
||||||
|
require (
|
||||||
|
dubbo.apache.org/dubbo-go/v3 v3.0.2
|
||||||
|
github.com/alibabacloud-go/tea v1.2.1
|
||||||
|
github.com/antchain-openapi-sdk-go/bccr v1.17.65
|
||||||
|
github.com/bwmarrin/snowflake v0.3.0
|
||||||
|
github.com/dubbogo/gost v1.13.2
|
||||||
|
github.com/dubbogo/grpc-go v1.42.10
|
||||||
|
github.com/dubbogo/triple v1.2.2-rc3
|
||||||
|
github.com/gin-gonic/gin v1.9.1
|
||||||
|
github.com/go-redis/redis v6.15.9+incompatible
|
||||||
|
github.com/golang/protobuf v1.5.3
|
||||||
|
github.com/google/wire v0.5.0
|
||||||
|
github.com/huyi-cn/antcloud-golang-sdk v1.0.2
|
||||||
|
github.com/natefinch/lumberjack v2.0.0+incompatible
|
||||||
|
github.com/opentracing/opentracing-go v1.2.0
|
||||||
|
github.com/spf13/viper v1.17.0
|
||||||
|
github.com/streadway/amqp v1.1.0
|
||||||
|
github.com/uber/jaeger-client-go v2.30.0+incompatible
|
||||||
|
go.uber.org/zap v1.26.0
|
||||||
|
google.golang.org/protobuf v1.31.0
|
||||||
|
gorm.io/driver/mysql v1.5.2
|
||||||
|
gorm.io/gorm v1.25.5
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
cloud.google.com/go/compute v1.23.0 // indirect
|
||||||
|
cloud.google.com/go/compute/metadata v0.2.3 // indirect
|
||||||
|
contrib.go.opencensus.io/exporter/prometheus v0.4.1 // indirect
|
||||||
|
github.com/RoaringBitmap/roaring v1.2.3 // indirect
|
||||||
|
github.com/Workiva/go-datastructures v1.0.52 // indirect
|
||||||
|
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 // indirect
|
||||||
|
github.com/alibaba/sentinel-golang v1.0.4 // indirect
|
||||||
|
github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect
|
||||||
|
github.com/alibabacloud-go/tea-oss-utils v1.1.0 // indirect
|
||||||
|
github.com/alibabacloud-go/tea-rpc-utils v1.1.2 // indirect
|
||||||
|
github.com/alibabacloud-go/tea-utils v1.3.8 // indirect
|
||||||
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.4 // indirect
|
||||||
|
github.com/aliyun/alibaba-cloud-sdk-go v1.61.1704 // indirect
|
||||||
|
github.com/antchain-openapi-sdk-go/antchain-util v0.0.7 // indirect
|
||||||
|
github.com/apache/dubbo-getty v1.4.9 // indirect
|
||||||
|
github.com/apache/dubbo-go-hessian2 v1.12.2 // indirect
|
||||||
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
github.com/bits-and-blooms/bitset v1.2.0 // indirect
|
||||||
|
github.com/buger/jsonparser v1.1.1 // indirect
|
||||||
|
github.com/bytedance/sonic v1.9.1 // indirect
|
||||||
|
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
|
||||||
|
github.com/cespare/xxhash/v2 v2.2.0 // indirect
|
||||||
|
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
|
||||||
|
github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe // indirect
|
||||||
|
github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 // indirect
|
||||||
|
github.com/coreos/go-semver v0.3.0 // indirect
|
||||||
|
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
|
||||||
|
github.com/creasty/defaults v1.5.2 // indirect
|
||||||
|
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
|
||||||
|
github.com/dlclark/regexp2 v1.7.0 // indirect
|
||||||
|
github.com/dubbogo/go-zookeeper v1.0.4-0.20211212162352-f9d2183d89d5 // indirect
|
||||||
|
github.com/dustin/go-humanize v1.0.1 // indirect
|
||||||
|
github.com/emicklei/go-restful/v3 v3.10.1 // indirect
|
||||||
|
github.com/envoyproxy/go-control-plane v0.11.1 // indirect
|
||||||
|
github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect
|
||||||
|
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||||
|
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
|
||||||
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
|
github.com/go-co-op/gocron v1.9.0 // indirect
|
||||||
|
github.com/go-errors/errors v1.0.1 // indirect
|
||||||
|
github.com/go-kit/log v0.2.0 // indirect
|
||||||
|
github.com/go-logfmt/logfmt v0.5.1 // indirect
|
||||||
|
github.com/go-logr/logr v1.2.3 // indirect
|
||||||
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
|
github.com/go-ole/go-ole v1.2.6 // indirect
|
||||||
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
|
github.com/go-playground/universal-translator v0.18.1 // indirect
|
||||||
|
github.com/go-playground/validator/v10 v10.14.0 // indirect
|
||||||
|
github.com/go-resty/resty/v2 v2.7.0 // indirect
|
||||||
|
github.com/go-sql-driver/mysql v1.7.0 // indirect
|
||||||
|
github.com/goccy/go-json v0.10.2 // indirect
|
||||||
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
|
github.com/golang/mock v1.6.0 // indirect
|
||||||
|
github.com/golang/snappy v0.0.4 // indirect
|
||||||
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
|
github.com/gorilla/websocket v1.4.2 // indirect
|
||||||
|
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
|
||||||
|
github.com/hashicorp/errwrap v1.1.0 // indirect
|
||||||
|
github.com/hashicorp/go-multierror v1.1.1 // indirect
|
||||||
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
|
github.com/hashicorp/vault/sdk v0.7.0 // indirect
|
||||||
|
github.com/jinzhu/copier v0.3.5 // indirect
|
||||||
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
|
github.com/jmespath/go-jmespath v0.4.0 // indirect
|
||||||
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
github.com/k0kubun/pp v3.0.1+incompatible // indirect
|
||||||
|
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
|
||||||
|
github.com/knadh/koanf v1.5.0 // indirect
|
||||||
|
github.com/leodido/go-urn v1.2.4 // indirect
|
||||||
|
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
|
||||||
|
github.com/magiconair/properties v1.8.7 // indirect
|
||||||
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
|
github.com/mattn/go-isatty v0.0.19 // indirect
|
||||||
|
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
|
||||||
|
github.com/mitchellh/copystructure v1.2.0 // indirect
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
|
github.com/mitchellh/reflectwalk v1.0.2 // indirect
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
|
github.com/mschoch/smat v0.2.0 // indirect
|
||||||
|
github.com/nacos-group/nacos-sdk-go v1.1.4 // indirect
|
||||||
|
github.com/pelletier/go-toml v1.9.3 // indirect
|
||||||
|
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
|
||||||
|
github.com/pierrec/lz4 v2.5.2+incompatible // indirect
|
||||||
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
|
github.com/polarismesh/polaris-go v1.3.0 // indirect
|
||||||
|
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
|
||||||
|
github.com/prometheus/client_golang v1.13.0 // indirect
|
||||||
|
github.com/prometheus/client_model v0.4.0 // indirect
|
||||||
|
github.com/prometheus/common v0.37.0 // indirect
|
||||||
|
github.com/prometheus/procfs v0.8.0 // indirect
|
||||||
|
github.com/prometheus/statsd_exporter v0.21.0 // indirect
|
||||||
|
github.com/robfig/cron/v3 v3.0.1 // indirect
|
||||||
|
github.com/sagikazarmark/locafero v0.3.0 // indirect
|
||||||
|
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
|
||||||
|
github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b // indirect
|
||||||
|
github.com/shirou/gopsutil/v3 v3.22.2 // indirect
|
||||||
|
github.com/sourcegraph/conc v0.3.0 // indirect
|
||||||
|
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
||||||
|
github.com/spf13/afero v1.10.0 // indirect
|
||||||
|
github.com/spf13/cast v1.5.1 // indirect
|
||||||
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
|
github.com/subosito/gotenv v1.6.0 // indirect
|
||||||
|
github.com/tklauser/go-sysconf v0.3.10 // indirect
|
||||||
|
github.com/tklauser/numcpus v0.4.0 // indirect
|
||||||
|
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
|
||||||
|
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
|
||||||
|
github.com/ugorji/go/codec v1.2.11 // indirect
|
||||||
|
github.com/yusufpapurcu/wmi v1.2.2 // indirect
|
||||||
|
github.com/zouyx/agollo/v3 v3.4.5 // indirect
|
||||||
|
go.etcd.io/etcd/api/v3 v3.5.9 // indirect
|
||||||
|
go.etcd.io/etcd/client/pkg/v3 v3.5.9 // indirect
|
||||||
|
go.etcd.io/etcd/client/v3 v3.5.9 // indirect
|
||||||
|
go.opencensus.io v0.24.0 // indirect
|
||||||
|
go.opentelemetry.io/otel v1.11.0 // indirect
|
||||||
|
go.opentelemetry.io/otel/trace v1.11.0 // indirect
|
||||||
|
go.uber.org/atomic v1.10.0 // indirect
|
||||||
|
go.uber.org/multierr v1.10.0 // indirect
|
||||||
|
golang.org/x/arch v0.3.0 // indirect
|
||||||
|
golang.org/x/crypto v0.13.0 // indirect
|
||||||
|
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
|
||||||
|
golang.org/x/net v0.15.0 // indirect
|
||||||
|
golang.org/x/oauth2 v0.12.0 // indirect
|
||||||
|
golang.org/x/sync v0.3.0 // indirect
|
||||||
|
golang.org/x/sys v0.12.0 // indirect
|
||||||
|
golang.org/x/text v0.13.0 // indirect
|
||||||
|
golang.org/x/time v0.3.0 // indirect
|
||||||
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
|
google.golang.org/genproto v0.0.0-20230913181813-007df8e322eb // indirect
|
||||||
|
google.golang.org/genproto/googleapis/api v0.0.0-20230913181813-007df8e322eb // indirect
|
||||||
|
google.golang.org/genproto/googleapis/rpc v0.0.0-20230920204549-e6e6cdab5c13 // indirect
|
||||||
|
google.golang.org/grpc v1.58.2 // indirect
|
||||||
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
|
)
|
100
internal/controller/dci.go
Normal file
100
internal/controller/dci.go
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
package controller
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/internal/logic"
|
||||||
|
"chain-dci/pb/dci"
|
||||||
|
errCommon "chain-dci/pkg/err"
|
||||||
|
"chain-dci/pkg/msg"
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DciProvider struct {
|
||||||
|
dci.UnimplementedDciServer
|
||||||
|
file *logic.File
|
||||||
|
dciUser *logic.DciUser
|
||||||
|
dciWork *logic.DciWork
|
||||||
|
dciReg *logic.DciRegistration
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) GetUploadUrl(_ context.Context, req *dci.GetUploadUrlRequest) (res *dci.GetUploadUrlResponse, err error) {
|
||||||
|
res = new(dci.GetUploadUrlResponse)
|
||||||
|
if req.FileName == "" {
|
||||||
|
return res, errCommon.ReturnError(errors.New(msg.ErrrFileIsEmpty), msg.ErrrFileIsEmpty, "未获取到相关文件 :")
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err = d.file.Upload(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) AddDciUser(_ context.Context, req *dci.AddDciUserRequest) (res *dci.AddDciUserResponse, err error) {
|
||||||
|
res = new(dci.AddDciUserResponse)
|
||||||
|
res, err = d.dciUser.AddDciUser(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) UpdateDciUser(_ context.Context, req *dci.UpdateDciUserRequest) (res *dci.UpdateDciUserResponse, err error) {
|
||||||
|
res = new(dci.UpdateDciUserResponse)
|
||||||
|
res, err = d.dciUser.UpdateDciUser(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) QueryDciUser(_ context.Context, req *dci.QueryDciUserRequest) (res *dci.QueryDciUserResponse, err error) {
|
||||||
|
res = new(dci.QueryDciUserResponse)
|
||||||
|
res, err = d.dciUser.QueryDciUser(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) CreateDciPreregistration(_ context.Context, req *dci.CreateDciPreregistrationRequest) (res *dci.CreateDciPreregistrationResponse, err error) {
|
||||||
|
res = new(dci.CreateDciPreregistrationResponse)
|
||||||
|
res, err = d.dciWork.CreateDciPreregistration(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) QueryDciPreregistration(_ context.Context, req *dci.QueryDciPreregistrationRequest) (res *dci.QueryDciPreregistrationResponse, err error) {
|
||||||
|
res = new(dci.QueryDciPreregistrationResponse)
|
||||||
|
res, err = d.dciWork.QueryDciPreregistration(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) CreateDciRegistration(_ context.Context, req *dci.CreateDciRegistrationRequest) (res *dci.CreateDciRegistrationResponse, err error) {
|
||||||
|
res = new(dci.CreateDciRegistrationResponse)
|
||||||
|
res, err = d.dciReg.CreateDciRegistration(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) QueryDciRegistration(_ context.Context, req *dci.QueryDciRegistrationRequest) (res *dci.QueryDciRegistrationResponse, err error) {
|
||||||
|
res = new(dci.QueryDciRegistrationResponse)
|
||||||
|
res, err = d.dciReg.QueryDciRegistration(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) GetDciPayUrl(_ context.Context, req *dci.GetDciPayUrlRequest) (res *dci.GetDciPayUrlResponse, err error) {
|
||||||
|
res = new(dci.GetDciPayUrlResponse)
|
||||||
|
res, err = d.dciReg.GetDciPayUrl(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) QueryDciPay(_ context.Context, req *dci.QueryDciPayRequest) (res *dci.QueryDciPayResponse, err error) {
|
||||||
|
res = new(dci.QueryDciPayResponse)
|
||||||
|
res, err = d.dciReg.QueryDciPay(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) GetDciRegistrationcert(_ context.Context, req *dci.GetDciRegistrationcertRequest) (res *dci.GetDciRegistrationcertResponse, err error) {
|
||||||
|
res = new(dci.GetDciRegistrationcertResponse)
|
||||||
|
res, err = d.dciReg.GetDciRegistrationcert(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) RetryDciRegistration(_ context.Context, req *dci.RetryDciRegistrationRequest) (res *dci.RetryDciRegistrationResponse, err error) {
|
||||||
|
res = new(dci.RetryDciRegistrationResponse)
|
||||||
|
res, err = d.dciReg.RetryDciRegistration(req)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *DciProvider) CloseDciRegistration(_ context.Context, req *dci.CloseDciRegistrationRequest) (res *dci.CloseDciRegistrationResponse, err error) {
|
||||||
|
res = new(dci.CloseDciRegistrationResponse)
|
||||||
|
res, err = d.dciReg.CloseDciRegistration(req)
|
||||||
|
return
|
||||||
|
}
|
57
internal/handler/default_handler.go
Normal file
57
internal/handler/default_handler.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package handler
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"sync"
|
||||||
|
|
||||||
|
"dubbo.apache.org/dubbo-go/v3/common"
|
||||||
|
"dubbo.apache.org/dubbo-go/v3/common/extension"
|
||||||
|
"dubbo.apache.org/dubbo-go/v3/filter"
|
||||||
|
"dubbo.apache.org/dubbo-go/v3/protocol"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
extension.SetRejectedExecutionHandler("DefaultValueHandler", GetDefaultValueRejectedExecutionHandlerSingleton)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DefaultValueRejectedExecutionHandler struct {
|
||||||
|
defaultResult sync.Map
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mh *DefaultValueRejectedExecutionHandler) RejectedExecution(url *common.URL, invocation protocol.Invocation) protocol.Result {
|
||||||
|
key := url.ServiceKey() + "#" + invocation.MethodName()
|
||||||
|
result, loaded := mh.defaultResult.Load(key)
|
||||||
|
if !loaded {
|
||||||
|
// we didn't configure any default value for this invocation
|
||||||
|
return &protocol.RPCResult{
|
||||||
|
Err: errors.New("请求太频繁"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result.(*protocol.RPCResult)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetCustomRejectedExecutionHandler() filter.RejectedExecutionHandler {
|
||||||
|
return &DefaultValueRejectedExecutionHandler{}
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
customHandlerOnce sync.Once
|
||||||
|
customHandlerInstance *DefaultValueRejectedExecutionHandler
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the better way is designing the RejectedExecutionHandler as singleton.
|
||||||
|
*/
|
||||||
|
func GetDefaultValueRejectedExecutionHandlerSingleton() filter.RejectedExecutionHandler {
|
||||||
|
customHandlerOnce.Do(func() {
|
||||||
|
customHandlerInstance = &DefaultValueRejectedExecutionHandler{}
|
||||||
|
})
|
||||||
|
|
||||||
|
initDefaultValue()
|
||||||
|
|
||||||
|
return customHandlerInstance
|
||||||
|
}
|
||||||
|
|
||||||
|
func initDefaultValue() {
|
||||||
|
// setting your default value
|
||||||
|
}
|
52
internal/logic/dci.go
Normal file
52
internal/logic/dci.go
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
package logic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"chain-dci/pkg/msg"
|
||||||
|
"crypto/sha256"
|
||||||
|
"encoding/hex"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IDci interface {
|
||||||
|
// DciAddUser 注册DCI账号 每位著作权人 都需要注册此账号
|
||||||
|
// DciUpdateUser 更新DCI用户信息 著作权人 证件信息更新
|
||||||
|
// DciQueryUser 查询DCI用户信息 著作权人 信息查询
|
||||||
|
|
||||||
|
// DciPreregistration DCI申领 申请版权的作品 需要 先进行 DCI申领 获取到 DCI作品ID
|
||||||
|
// DciQueryPreregistration 查询dci申领信息 通过 DCI作品ID 获取到 DCI申领的详细信息
|
||||||
|
// DciQueryPreregPublication 查询dci申领公示地址
|
||||||
|
|
||||||
|
// DciRegistration 发起数登申请 在发起数字版权登记(简称:数登)申请前,请先进行DCI申领,只有申领完成的DCI才能发起数登申请
|
||||||
|
// DciQueryRegistration 查询数登申请 用户可通过主动查询的方式获取数登结果,支持按数登id或发起数登的DCI申领id来查询
|
||||||
|
// DciGetPayUrl 获取数登支付链接 初审通过后,用户通过主动查询的方式获取数登支付链接,该接口在北京时间每日06:00-23:00可用,支付链接有效期15分钟,若支付链接过期可再次调用接口刷新支付链接
|
||||||
|
// DciQueryPay 数登支付查询 用户完成支付后,通过数登支付查询接口获取支付结果
|
||||||
|
// DciGetRegistrationCert 获取数登证书下载链接 对于申请成功的数登,可通过该接口获取数登证书下载链接,数登证书下载次数限制为10次/个/月,下载链接有效期为15天
|
||||||
|
// RetryDigitalRegister 补正申请 对于初审不通过、待补证和待补证审核不通过的数登,请按照反馈原因调整数登申请信息,完成调整后通过补正申请接口对数登进行修改
|
||||||
|
// CloseDigitalRegister 数登停止申请 对于待补证和待补证审核不通过的数登,如不想进行补正,请调用数登申请停止接口,告知系统申请停止
|
||||||
|
}
|
||||||
|
|
||||||
|
type Dci struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func createToken(appID, appKey, channelId, userID, nonce string, timestamp int64) (token string, err error) {
|
||||||
|
var b bytes.Buffer
|
||||||
|
b.WriteString(appID)
|
||||||
|
b.WriteString(appKey)
|
||||||
|
b.WriteString(channelId)
|
||||||
|
b.WriteString(userID)
|
||||||
|
b.WriteString(nonce)
|
||||||
|
b.WriteString(fmt.Sprint(timestamp))
|
||||||
|
h := sha256.New()
|
||||||
|
|
||||||
|
if _, err = h.Write([]byte(b.String())); err != nil {
|
||||||
|
zap.L().Error("createToken sha256 err", zap.Error(err))
|
||||||
|
err = errors.New(msg.ErrorSha256Write)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
s := h.Sum(nil)
|
||||||
|
token = hex.EncodeToString(s)
|
||||||
|
return
|
||||||
|
}
|
140
internal/logic/dci_registration.go
Normal file
140
internal/logic/dci_registration.go
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
package logic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pb/dci"
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
||||||
|
"github.com/jinzhu/copier"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IDciRegistration interface {
|
||||||
|
CreateDciRegistration(req *dci.CreateDciRegistrationRequest) (res *dci.CreateDciRegistrationResponse, err error)
|
||||||
|
QueryDciRegistration(req *dci.QueryDciRegistrationRequest) (res *dci.QueryDciRegistrationResponse, err error)
|
||||||
|
GetDciPayUrl(req *dci.GetDciPayUrlRequest) (res *dci.GetDciPayUrlResponse, err error)
|
||||||
|
QueryDciPay(req *dci.QueryDciPayRequest) (res *dci.QueryDciPayResponse, err error)
|
||||||
|
GetDciRegistrationcert(req *dci.GetDciRegistrationcertRequest) (res *dci.GetDciRegistrationcertResponse, err error)
|
||||||
|
RetryDciRegistration(req *dci.RetryDciRegistrationRequest) (res *dci.RetryDciRegistrationResponse, err error)
|
||||||
|
CloseDciRegistration(req *dci.CloseDciRegistrationRequest) (res *dci.CloseDciRegistrationResponse, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DciRegistration struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateDciRegistration 发起数登申请
|
||||||
|
func (r *DciRegistration) CreateDciRegistration(req *dci.CreateDciRegistrationRequest) (res *dci.CreateDciRegistrationResponse, err error) {
|
||||||
|
res = new(dci.CreateDciRegistrationResponse)
|
||||||
|
|
||||||
|
createDciRegistrationRequest := new(bccrClient.CreateDciRegistrationRequest)
|
||||||
|
_ = copier.CopyWithOption(&createDciRegistrationRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
createDciPreregistrationResponse, err := app.ModuleClients.BccrClient.CreateDciRegistration(createDciRegistrationRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, createDciPreregistrationResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryDciRegistration 查询数登申请
|
||||||
|
func (r *DciRegistration) QueryDciRegistration(req *dci.QueryDciRegistrationRequest) (res *dci.QueryDciRegistrationResponse, err error) {
|
||||||
|
res = new(dci.QueryDciRegistrationResponse)
|
||||||
|
|
||||||
|
queryDciRegistrationRequest := new(bccrClient.QueryDciRegistrationRequest)
|
||||||
|
_ = copier.CopyWithOption(&queryDciRegistrationRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
queryDciRegistrationResponse, err := app.ModuleClients.BccrClient.QueryDciRegistration(queryDciRegistrationRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, queryDciRegistrationResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDciPayUrl 数登支付链接获取
|
||||||
|
func (r *DciRegistration) GetDciPayUrl(req *dci.GetDciPayUrlRequest) (res *dci.GetDciPayUrlResponse, err error) {
|
||||||
|
res = new(dci.GetDciPayUrlResponse)
|
||||||
|
|
||||||
|
getDciPayUrlRequest := new(bccrClient.GetDciPayurlRequest)
|
||||||
|
_ = copier.CopyWithOption(&getDciPayUrlRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
getDciPayUrlResponse, err := app.ModuleClients.BccrClient.GetDciPayurl(getDciPayUrlRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, getDciPayUrlResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryDciPay 数登支付查询
|
||||||
|
func (r *DciRegistration) QueryDciPay(req *dci.QueryDciPayRequest) (res *dci.QueryDciPayResponse, err error) {
|
||||||
|
res = new(dci.QueryDciPayResponse)
|
||||||
|
|
||||||
|
queryDciPayRequest := new(bccrClient.QueryDciPayRequest)
|
||||||
|
_ = copier.CopyWithOption(&queryDciPayRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
queryDciPayResponse, err := app.ModuleClients.BccrClient.QueryDciPay(queryDciPayRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, queryDciPayResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDciRegistrationcert 获取数登证书下载
|
||||||
|
func (r *DciRegistration) GetDciRegistrationcert(req *dci.GetDciRegistrationcertRequest) (res *dci.GetDciRegistrationcertResponse, err error) {
|
||||||
|
res = new(dci.GetDciRegistrationcertResponse)
|
||||||
|
|
||||||
|
getDciRegistrationcertRequest := new(bccrClient.GetDciRegistrationcertRequest)
|
||||||
|
_ = copier.CopyWithOption(&getDciRegistrationcertRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
getDciRegistrationcertResponse, err := app.ModuleClients.BccrClient.GetDciRegistrationcert(getDciRegistrationcertRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, getDciRegistrationcertResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// RetryDciRegistration 补正申请
|
||||||
|
func (r *DciRegistration) RetryDciRegistration(req *dci.RetryDciRegistrationRequest) (res *dci.RetryDciRegistrationResponse, err error) {
|
||||||
|
res = new(dci.RetryDciRegistrationResponse)
|
||||||
|
|
||||||
|
retryDciRegistrationRequest := new(bccrClient.RetryDciRegistrationRequest)
|
||||||
|
_ = copier.CopyWithOption(&retryDciRegistrationRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
retryDciRegistrationResponse, err := app.ModuleClients.BccrClient.RetryDciRegistration(retryDciRegistrationRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, retryDciRegistrationResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// CloseDciRegistration 数登停止申请
|
||||||
|
func (r *DciRegistration) CloseDciRegistration(req *dci.CloseDciRegistrationRequest) (res *dci.CloseDciRegistrationResponse, err error) {
|
||||||
|
res = new(dci.CloseDciRegistrationResponse)
|
||||||
|
|
||||||
|
closeDciRegistrationRequest := new(bccrClient.CloseDciRegistrationRequest)
|
||||||
|
_ = copier.CopyWithOption(&closeDciRegistrationRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
closeDciRegistrationResponse, err := app.ModuleClients.BccrClient.CloseDciRegistration(closeDciRegistrationRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, closeDciRegistrationResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
68
internal/logic/dci_user.go
Normal file
68
internal/logic/dci_user.go
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
package logic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pb/dci"
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
||||||
|
"github.com/jinzhu/copier"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IDciUser interface {
|
||||||
|
AddDciUser(req *dci.AddDciUserRequest) (res *dci.AddDciUserResponse, err error)
|
||||||
|
UpdateDciUser(req *dci.UpdateDciUserRequest) (res *dci.UpdateDciUserResponse, err error)
|
||||||
|
QueryDciUser(req *dci.QueryDciUserRequest) (res *dci.QueryDciUserResponse, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DciUser struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// AddDciUser 著作权人 申领 DCI信息
|
||||||
|
func (u *DciUser) AddDciUser(req *dci.AddDciUserRequest) (res *dci.AddDciUserResponse, err error) {
|
||||||
|
res = new(dci.AddDciUserResponse)
|
||||||
|
|
||||||
|
addDciUserRequest := new(bccrClient.AddDciUserRequest)
|
||||||
|
_ = copier.CopyWithOption(&addDciUserRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
addDciUserResponse, err := app.ModuleClients.BccrClient.AddDciUser(addDciUserRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, addDciUserResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateDciUser 著作权人 更新 DCI信息
|
||||||
|
func (u *DciUser) UpdateDciUser(req *dci.UpdateDciUserRequest) (res *dci.UpdateDciUserResponse, err error) {
|
||||||
|
res = new(dci.UpdateDciUserResponse)
|
||||||
|
|
||||||
|
updateDciUserRequest := new(bccrClient.UpdateDciUserRequest)
|
||||||
|
_ = copier.CopyWithOption(&updateDciUserRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
updateDciUserResponse, err := app.ModuleClients.BccrClient.UpdateDciUser(updateDciUserRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, updateDciUserResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryDciUser 著作权人 查询 DCI信息
|
||||||
|
func (u *DciUser) QueryDciUser(req *dci.QueryDciUserRequest) (res *dci.QueryDciUserResponse, err error) {
|
||||||
|
res = new(dci.QueryDciUserResponse)
|
||||||
|
|
||||||
|
queryDciUserRequest := new(bccrClient.QueryDciUserRequest)
|
||||||
|
_ = copier.CopyWithOption(&queryDciUserRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
queryDciUserResponse, err := app.ModuleClients.BccrClient.QueryDciUser(queryDciUserRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, queryDciUserResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
50
internal/logic/dci_work.go
Normal file
50
internal/logic/dci_work.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package logic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pb/dci"
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
||||||
|
"github.com/jinzhu/copier"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IDciWork interface {
|
||||||
|
CreateDciPreregistration(req *dci.CreateDciPreregistrationRequest) (res *dci.CreateDciPreregistrationResponse, err error)
|
||||||
|
QueryDciPreregistration(req *dci.QueryDciPreregistrationRequest) (res *dci.QueryDciPreregistrationResponse, err error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type DciWork struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateDciPreregistration 作品 申领 DCI
|
||||||
|
func (w *DciWork) CreateDciPreregistration(req *dci.CreateDciPreregistrationRequest) (res *dci.CreateDciPreregistrationResponse, err error) {
|
||||||
|
res = new(dci.CreateDciPreregistrationResponse)
|
||||||
|
|
||||||
|
createDciPreregistrationRequest := new(bccrClient.CreateDciPreregistrationRequest)
|
||||||
|
_ = copier.CopyWithOption(&createDciPreregistrationRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
createDciPreregistrationResponse, err := app.ModuleClients.BccrClient.CreateDciPreregistration(createDciPreregistrationRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, createDciPreregistrationResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryDciPreregistration 作品 查询 DCI
|
||||||
|
func (w *DciWork) QueryDciPreregistration(req *dci.QueryDciPreregistrationRequest) (res *dci.QueryDciPreregistrationResponse, err error) {
|
||||||
|
res = new(dci.QueryDciPreregistrationResponse)
|
||||||
|
|
||||||
|
queryDciPreregistrationRequest := new(bccrClient.QueryDciPreregistrationRequest)
|
||||||
|
_ = copier.CopyWithOption(&queryDciPreregistrationRequest, req, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
queryDciPreregistrationResponse, err := app.ModuleClients.BccrClient.QueryDciPreregistration(queryDciPreregistrationRequest)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
_ = copier.CopyWithOption(&res, queryDciPreregistrationResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
85
internal/logic/file.go
Normal file
85
internal/logic/file.go
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
package logic
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pb/dci"
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
errCommon "chain-dci/pkg/err"
|
||||||
|
"chain-dci/pkg/utils"
|
||||||
|
"encoding/base64"
|
||||||
|
"github.com/alibabacloud-go/tea/tea"
|
||||||
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
||||||
|
"github.com/jinzhu/copier"
|
||||||
|
"strings"
|
||||||
|
"unicode"
|
||||||
|
)
|
||||||
|
|
||||||
|
type IFile interface {
|
||||||
|
Upload(request *dci.GetUploadUrlRequest) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type File struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
存证API
|
||||||
|
GetUploadUrl
|
||||||
|
获取 访问 oss的链接, 注意 如果文件名为中文 则需要 对文件名使用 utf-8 字符集进行 URL编码上传
|
||||||
|
*/
|
||||||
|
func GetUploadUrl(req *bccrClient.GetUploadurlRequest) (result *bccrClient.GetUploadurlResponse) {
|
||||||
|
|
||||||
|
result, err := app.ModuleClients.BccrClient.GetUploadurl(req)
|
||||||
|
if err != nil {
|
||||||
|
errCommon.NoReturnError(err, "调用 蚂蚁链获取 oss url 错误:")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
存证API
|
||||||
|
Upload
|
||||||
|
上传 实际文件
|
||||||
|
*/
|
||||||
|
func (f *File) Upload(req *dci.GetUploadUrlRequest) (res *dci.GetUploadUrlResponse, err error) {
|
||||||
|
|
||||||
|
isChinese := false
|
||||||
|
|
||||||
|
getUploadUrlRequest := new(bccrClient.GetUploadurlRequest)
|
||||||
|
|
||||||
|
var fileName string
|
||||||
|
// 拆分 文件名 和 文件链接
|
||||||
|
fileArr := strings.Split(req.FileName, "/")
|
||||||
|
fileNameWithSuffix := strings.Split(fileArr[len(fileArr)-1], ".")
|
||||||
|
fileName = fileNameWithSuffix[0]
|
||||||
|
|
||||||
|
// 如果文件名包含 中文 则需要对 fileName 进行 utf-8 字符集进行 URL编码
|
||||||
|
for _, c := range fileName {
|
||||||
|
if unicode.Is(unicode.Scripts["Han"], c) {
|
||||||
|
isChinese = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if isChinese {
|
||||||
|
getUploadUrlRequest.SetFileName(base64.URLEncoding.EncodeToString([]byte(fileName)))
|
||||||
|
} else {
|
||||||
|
getUploadUrlRequest.SetFileName(fileName)
|
||||||
|
}
|
||||||
|
|
||||||
|
getUploadUrlResponse := GetUploadUrl(getUploadUrlRequest)
|
||||||
|
//res = serializer.UploadUrlResponseToRpc(getUploadUrlResponse)
|
||||||
|
res = new(dci.GetUploadUrlResponse)
|
||||||
|
_ = copier.CopyWithOption(&res, getUploadUrlResponse, copier.Option{DeepCopy: true})
|
||||||
|
|
||||||
|
if tea.ToString(getUploadUrlResponse.ResultCode) != "OK" {
|
||||||
|
return res, errCommon.ReturnError(err, err.Error(), "获取授权访问OSS链接 错误:")
|
||||||
|
}
|
||||||
|
if tea.ToString(getUploadUrlResponse.Url) == "" || tea.ToString(getUploadUrlResponse.FileId) == "" {
|
||||||
|
return res, errCommon.ReturnError(err, err.Error(), "获取授权访问OSS链接 错误:")
|
||||||
|
}
|
||||||
|
|
||||||
|
code, result := utils.PutFromFileUrlWithStream(tea.ToString(res.Url), fileName, req.FileName)
|
||||||
|
if code != 200 {
|
||||||
|
return res, errCommon.ReturnError(err, result, "上传文件 错误:")
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
1
internal/model/upload.go
Normal file
1
internal/model/upload.go
Normal file
@ -0,0 +1 @@
|
|||||||
|
package model
|
1
internal/serializer/dicUser.go
Normal file
1
internal/serializer/dicUser.go
Normal file
@ -0,0 +1 @@
|
|||||||
|
package serializer
|
17
internal/serializer/file.go
Normal file
17
internal/serializer/file.go
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package serializer
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pb/dci"
|
||||||
|
"github.com/alibabacloud-go/tea/tea"
|
||||||
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
func UploadUrlResponseToRpc(in *bccrClient.GetUploadurlResponse) (out *dci.GetUploadUrlResponse) {
|
||||||
|
out = new(dci.GetUploadUrlResponse)
|
||||||
|
out.ReqMsgId = tea.ToString(in.ReqMsgId)
|
||||||
|
out.ResultMsg = tea.ToString(in.ResultMsg)
|
||||||
|
out.ResultCode = tea.ToString(in.ResultCode)
|
||||||
|
out.Url = tea.ToString(in.Url)
|
||||||
|
out.FileId = tea.ToString(in.FileId)
|
||||||
|
return
|
||||||
|
}
|
321
pb/dci.proto
Normal file
321
pb/dci.proto
Normal file
@ -0,0 +1,321 @@
|
|||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
package dci;
|
||||||
|
option go_package = "./dci";
|
||||||
|
|
||||||
|
import "pb/descriptor.proto";
|
||||||
|
import "pb/validator.proto";
|
||||||
|
|
||||||
|
service Dci {
|
||||||
|
// 通用接口 用于文件上传
|
||||||
|
rpc GetUploadUrl(GetUploadUrlRequest) returns (GetUploadUrlResponse);
|
||||||
|
|
||||||
|
// dci user
|
||||||
|
rpc AddDciUser(AddDciUserRequest) returns (AddDciUserResponse);
|
||||||
|
rpc UpdateDciUser(UpdateDciUserRequest) returns (UpdateDciUserResponse);
|
||||||
|
rpc QueryDciUser(QueryDciUserRequest) returns (QueryDciUserResponse);
|
||||||
|
|
||||||
|
// dci work
|
||||||
|
rpc CreateDciPreregistration(CreateDciPreregistrationRequest) returns (CreateDciPreregistrationResponse);
|
||||||
|
rpc QueryDciPreregistration(QueryDciPreregistrationRequest) returns (QueryDciPreregistrationResponse);
|
||||||
|
// rpc RetryDciPreregistration(RetryDciPreregistrationRequest) returns ();
|
||||||
|
|
||||||
|
// 数登
|
||||||
|
rpc CreateDciRegistration(CreateDciRegistrationRequest) returns (CreateDciRegistrationResponse); // 发起数登申请
|
||||||
|
rpc QueryDciRegistration(QueryDciRegistrationRequest) returns (QueryDciRegistrationResponse); // 查询数登申请
|
||||||
|
rpc GetDciPayUrl(GetDciPayUrlRequest) returns (GetDciPayUrlResponse); // 数登支付链接获取
|
||||||
|
rpc QueryDciPay(QueryDciPayRequest) returns (QueryDciPayResponse); // 数登支付查询
|
||||||
|
rpc GetDciRegistrationcert(GetDciRegistrationcertRequest) returns (GetDciRegistrationcertResponse); // 获取数登证书下载
|
||||||
|
rpc RetryDciRegistration(RetryDciRegistrationRequest) returns (RetryDciRegistrationResponse); // 补正申请
|
||||||
|
rpc CloseDciRegistration(CloseDciRegistrationRequest) returns (CloseDciRegistrationResponse); // 数登停止申请
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取 文件上传的 oss链接
|
||||||
|
message GetUploadUrlRequest {
|
||||||
|
string authToken = 1 [json_name = "authToken"];
|
||||||
|
string productInstanceId = 2 [json_name = "productInstanceId"];
|
||||||
|
string fileName = 3 [json_name = "fileName",(validator.field) = {string_not_empty: true,human_error:"文件不能为空"}]; // 此处传递的是文件的额链接,文件名如果是中文需要
|
||||||
|
string clientToken = 4 [json_name = "clientToken"];
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetUploadUrlResponse {
|
||||||
|
string reqMsgId = 1 [json_name = "reqMsgId"];
|
||||||
|
string resultCode = 2 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 3 [json_name = "resultMsg"];
|
||||||
|
string url = 4 [json_name = "url"];
|
||||||
|
string fileId = 5 [json_name = "fileId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dci user 注册
|
||||||
|
message AddDciUserRequest {
|
||||||
|
string certName = 1 [json_name = "certName",(validator.field) = {string_not_empty: true,human_error:"证件名称不能为空"}];
|
||||||
|
string certificateNumber = 2 [json_name = "certificateNumber",(validator.field) = {string_not_empty: true,human_error:"证件号码不能为空"}];
|
||||||
|
string certificateType = 3 [json_name = "certificateType",(validator.field) = {string_not_empty: true,human_error:"证件类型不能为空"}];
|
||||||
|
string certificateFrontFileId = 4 [json_name = "certificateFrontFileId",(validator.field) = {string_not_empty: true,human_error:"证件正面文件路径不能为空"}];
|
||||||
|
string certificateBackFileId = 5 [json_name = "certificateBackFileId"];
|
||||||
|
string legalPersonCertName = 6 [json_name = "legalPersonCertName"];
|
||||||
|
string legalPersonCertType = 7 [json_name = "legalPersonCertType"];
|
||||||
|
string legalPersonCertNo = 8 [json_name = "legalPersonCertNo"];
|
||||||
|
string phone = 9 [json_name = "phone",(validator.field) = {string_not_empty: true,human_error:"手机号不能为空"}];
|
||||||
|
string areaType = 10 [json_name = "areaType",(validator.field) = {string_not_empty: true,human_error:"所属地区不能为空"}];
|
||||||
|
string clientToken = 11 [json_name = "clientToken",(validator.field) = {string_not_empty: true,human_error:"客户端token不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message AddDciUserResponse {
|
||||||
|
string dciUserId = 1 [json_name = "dciUserId"];
|
||||||
|
string dciUserStatus = 2 [json_name = "dciUserStatus"];
|
||||||
|
string resultCode = 3 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 4 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 5 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dci user 更新
|
||||||
|
message UpdateDciUserRequest {
|
||||||
|
string dciUserId = 1 [json_name = "dciUserId",(validator.field) = {string_not_empty: true,human_error:"dci用户ID不能为空"}];
|
||||||
|
string certFrontFileId = 2 [json_name = "certFrontFileId",(validator.field) = {string_not_empty: true,human_error:"证件正面文件路径不能为空"}];
|
||||||
|
string certBackFileId = 3 [json_name = "certBackFileId"];
|
||||||
|
string phone = 4 [json_name = "phone"];
|
||||||
|
string clientToken = 5 [json_name = "clientToken",(validator.field) = {string_not_empty: true,human_error:"客户端token不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateDciUserResponse {
|
||||||
|
string resultCode = 1 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 2 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 3 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dci user 查询
|
||||||
|
message QueryDciUserRequest {
|
||||||
|
string certificateType = 1 [json_name = "certificateType",(validator.field) = {string_not_empty: true,human_error:"证件类型不能为空"}];
|
||||||
|
string certificateNumber = 2 [json_name = "certificateNumber",(validator.field) = {string_not_empty: true,human_error:"证件号码不能为空"}];
|
||||||
|
string phone = 3 [json_name = "phone",(validator.field) = {string_not_empty: true,human_error:"手机号不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message QueryDciUserResponse {
|
||||||
|
string dciUserId = 1 [json_name = "dciUserId"];
|
||||||
|
string dciUserStatus = 2 [json_name = "dciUserStatus"];
|
||||||
|
string name = 3 [json_name = "name"];
|
||||||
|
string certificateType = 4 [json_name = "certificateType"];
|
||||||
|
string certificateNumber = 5 [json_name = "certificateNumber"];
|
||||||
|
string address = 6 [json_name = "address"];
|
||||||
|
string certStartTime = 7 [json_name = "certStartTime"];
|
||||||
|
string certEndTime = 8 [json_name = "certEndTime"];
|
||||||
|
string legalPerson = 9 [json_name = "legalPerson"];
|
||||||
|
string resultCode = 10 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 11 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 12 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dci work 申领
|
||||||
|
message CreateDciPreregistrationRequest {
|
||||||
|
string workName = 1 [json_name = "workName",(validator.field) = {string_not_empty: true,length_lt: 51,human_error:"作品名称不能为空"}];
|
||||||
|
string dciUserId = 2 [json_name = "dciUserId",(validator.field) = {string_not_empty: true,human_error:"DCI用户ID不能为空"}];
|
||||||
|
string workCategory = 3 [json_name = "workCategory",(validator.field) = {string_not_empty: true,human_error:"作品类型不能为空"}];
|
||||||
|
string workFileId = 4 [json_name = "workFileId",(validator.field) = {string_not_empty: true,human_error:"作品文件路径不能为空"}];
|
||||||
|
string fileType = 5 [json_name = "fileType",(validator.field) = {string_not_empty: true,human_error:"文件类型不能为空"}];
|
||||||
|
DciCreationInfo creationInfo = 6 [json_name = "creationInfo",(validator.field) = {string_not_empty: true,human_error:"创作信息不能为空"}];
|
||||||
|
DciPublicationInfo publicationInfo = 7 [json_name = "publicationInfo",(validator.field) = {string_not_empty: true,human_error:"发表信息不能为空"}];
|
||||||
|
string authorName = 8 [json_name = "authorName",(validator.field) = {string_not_empty: true,human_error:"作者姓名不能为空"}];
|
||||||
|
string authorSignature = 9 [json_name = "authorSignature",(validator.field) = {string_not_empty: true,human_error:"作者署名不能为空"}];
|
||||||
|
string originalStatement = 10 [json_name = "originalStatement"];
|
||||||
|
DciRightInfo rightInfo = 11 [json_name = "rightInfo",(validator.field) = {string_not_empty: true,human_error:"权利信息不能为空"}];
|
||||||
|
string preRegistrationTrueWill = 12 [json_name = "preRegistrationTrueWill",(validator.field) = {string_not_empty: true,human_error:"真实意愿表达信息不能为空"}];
|
||||||
|
repeated string copyrightOwnerIds = 13 [json_name = "copyrightOwnerIds",(validator.field) = {string_not_empty: true,human_error:"著作权人用户id列表不能为空"}];
|
||||||
|
string clientToken = 14 [json_name = "clientToken",(validator.field) = {string_not_empty: true,human_error:"客户端token不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message DciCreationInfo {
|
||||||
|
string creationNature = 1 [json_name = "creationNature",(validator.field) = {string_not_empty: true,human_error:"作品创作性质不能为空"}];
|
||||||
|
string creationCompletionDate = 2 [json_name = "creationCompletionDate",(validator.field) = {string_not_empty: true,human_error:"创作完成日期不能为空"}];
|
||||||
|
string creationCompletionCode = 3 [json_name = "creationCompletionCode",(validator.field) = {string_not_empty: true,human_error:"作品创作地点地区编码不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message DciPublicationInfo {
|
||||||
|
string creationNature = 1 [json_name = "creationNature",(validator.field) = {string_not_empty: true,human_error:"作品发表状态不能为空"}];
|
||||||
|
string creationCompletionDate = 2 [json_name = "creationCompletionDate",(validator.field) = {string_not_empty: true,human_error:"首次发表日期不能为空"}];
|
||||||
|
string creationCompletionCode = 3 [json_name = "creationCompletionCode",(validator.field) = {string_not_empty: true,human_error:"首次发表地点地区编码不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message DciRightInfo {
|
||||||
|
string rightScope = 1 [json_name = "rightScope",(validator.field) = {string_not_empty: true,human_error:"作品权利范围不能为空"}];
|
||||||
|
string rightObtainWay = 2 [json_name = "rightObtainWay",(validator.field) = {string_not_empty: true,human_error:"权利取得方式不能为空"}];
|
||||||
|
string ownershipWay = 3 [json_name = "ownershipWay",(validator.field) = {string_not_empty: true,human_error:"权利归属方式不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message CreateDciPreregistrationResponse {
|
||||||
|
string dciContentId = 1 [json_name = "dciContentId"];
|
||||||
|
string resultCode = 2 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 3 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 4 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dci work 查询申领信息
|
||||||
|
message QueryDciPreregistrationRequest {
|
||||||
|
string dciContentId = 1 [json_name = "dciContentId",(validator.field) = {string_not_empty: true,human_error:"DCI内容ID不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message QueryDciPreregistrationResponse {
|
||||||
|
string status = 1 [json_name = "status"];
|
||||||
|
string fileHash = 2 [json_name = "fileHash"];
|
||||||
|
string fileHashTxHash = 3 [json_name = "fileHashTxHash"];
|
||||||
|
string fileHashBlockHeight = 4 [json_name = "fileHashBlockHeight"];
|
||||||
|
string dciCode = 5 [json_name = "dciCode"];
|
||||||
|
string dciCodeTxHash = 6 [json_name = "dciCodeTxHash"];
|
||||||
|
string dciCodeBlockHeight = 7 [json_name = "dciCodeBlockHeight"];
|
||||||
|
string dciCodeFileTxHash = 8 [json_name = "dciCodeFileTxHash"];
|
||||||
|
string dciCodeFileBlockHeight = 9 [json_name = "dciCodeFileBlockHeight"];
|
||||||
|
string preRegCertTxHash = 10 [json_name = "preRegCertTxHash"];
|
||||||
|
string preRegCertBlockHeight = 11 [json_name = "preRegCertBlockHeight"];
|
||||||
|
string dciCodeTsr = 12 [json_name = "dciCodeTsr"];
|
||||||
|
string dciCodeFileTsr = 13 [json_name = "dciCodeFileTsr"];
|
||||||
|
string preRegCertTsr = 14 [json_name = "preRegCertTsr"];
|
||||||
|
string preRegCertFileHash = 15 [json_name = "preRegCertFileHash"];
|
||||||
|
string preRegCertUrl = 16 [json_name = "preRegCertUrl"];
|
||||||
|
string applyObtainDate = 17 [json_name = "applyObtainDate"];
|
||||||
|
string dciCodeObtainDate = 18 [json_name = "dciCodeObtainDate"];
|
||||||
|
string errorReason = 19 [json_name = "errorReason"];
|
||||||
|
string errorReasonCn = 20 [json_name = "errorReasonCn"];
|
||||||
|
string resultCode = 21 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 22 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 23 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dci work 撤销
|
||||||
|
|
||||||
|
|
||||||
|
// 数登 发起申请
|
||||||
|
message CreateDciRegistrationRequest {
|
||||||
|
string dciContentId = 1 [json_name = "dciContentId",(validator.field) = {string_not_empty: true,human_error:"DCI申领ID不能为空"}];
|
||||||
|
DciExplanationInfo explanationInfo = 2 [json_name = "explanationInfo",(validator.field) = {string_not_empty: true,human_error:"作品创作说明不能为空"}];
|
||||||
|
InvoiceInfo invoiceInfo = 3 [json_name = "invoiceInfo",(validator.field) = {string_not_empty: true,human_error:"发票信息不能为空"}];
|
||||||
|
AdditionalFileInfo additionalFileInfo = 4 [json_name = "additionalFileInfo"];
|
||||||
|
string clientToken = 5 [json_name = "clientToken",(validator.field) = {string_not_empty: true,human_error:"客户端token不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message DciExplanationInfo {
|
||||||
|
string creationPurpose = 1 [json_name = "creationPurpose",(validator.field) = {string_not_empty: true,length_lt: 51,human_error:"创作目的不能为空"}];
|
||||||
|
string creationProcess = 2 [json_name = "creationProcess",(validator.field) = {string_not_empty: true,length_lt: 86,human_error:"创作过程不能为空"}];
|
||||||
|
string originality = 3 [json_name = "originality",(validator.field) = {string_not_empty: true,length_lt: 141,human_error:"独创性说明不能为空"}];
|
||||||
|
string fontCopyright = 4 [json_name = "fontCopyright",(validator.field) = {string_not_empty: true,human_error:"字体声明不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message InvoiceInfo {
|
||||||
|
string invoiceType = 1 [json_name = "invoiceType",(validator.field) = {string_not_empty: true,human_error:"发票类型不能为空"}];
|
||||||
|
string invoiceHeader = 2 [json_name = "invoiceHeader",(validator.field) = {string_not_empty: true,human_error:"发票抬头不能为空"}];
|
||||||
|
string taxpayerNumber = 3 [json_name = "taxpayerNumber"];
|
||||||
|
string registeredAddress = 4 [json_name = "registeredAddress"];
|
||||||
|
string registeredTel = 5 [json_name = "registeredTel"];
|
||||||
|
string openAccountTel = 6 [json_name = "openAccountTel"];
|
||||||
|
string openAccountBank = 7 [json_name = "openAccountBank"];
|
||||||
|
string bankAccount = 8 [json_name = "bankAccount"];
|
||||||
|
}
|
||||||
|
|
||||||
|
message AdditionalFileInfo {
|
||||||
|
string contentSummaryFileId = 1 [json_name = "contentSummaryFileId"];
|
||||||
|
repeated string ownershipFileIds = 2 [json_name = "ownershipFileIds"];
|
||||||
|
string portraitAuthFileId = 3 [json_name = "portraitAuthFileId"];
|
||||||
|
string othersWorkAuthFileId = 4 [json_name = "othersWorkAuthFileId"];
|
||||||
|
repeated string otherFileIdList = 5 [json_name = "otherFileIdList"];
|
||||||
|
}
|
||||||
|
|
||||||
|
message CreateDciRegistrationResponse {
|
||||||
|
string digitalRegisterId = 1 [json_name = "digitalRegisterId"];
|
||||||
|
string resultCode = 2 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 3 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 4 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数登 查询申请
|
||||||
|
message QueryDciRegistrationRequest {
|
||||||
|
string digitalRegisterId = 1 [json_name = "digitalRegisterId"];
|
||||||
|
string dciContentId = 2 [json_name = "dciContentId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
message QueryDciRegistrationResponse {
|
||||||
|
string regNumber = 1 [json_name = "regNumber"];
|
||||||
|
string digitalRegisterId = 2 [json_name = "digitalRegisterId"];
|
||||||
|
string dciContentId = 3 [json_name = "dciContentId"];
|
||||||
|
string digitalRegisterStatus = 4 [json_name = "digitalRegisterStatus"];
|
||||||
|
string digitalRegisterApplyTime = 5 [json_name = "digitalRegisterApplyTime"];
|
||||||
|
string digitalRegisterCompletionTime = 6 [json_name = "digitalRegisterCompletionTime"];
|
||||||
|
int64 downloadTimesLeft = 7 [json_name = "downloadTimesLeft"];
|
||||||
|
repeated string invoiceUrlList = 8 [json_name = "invoiceUrlList"];
|
||||||
|
string failDetail = 9 [json_name = "failDetail"];
|
||||||
|
string amendType = 10 [json_name = "amendType"];
|
||||||
|
string applyFormUrl = 11 [json_name = "applyFormUrl"];
|
||||||
|
string flowNumber = 12 [json_name = "flowNumber"];
|
||||||
|
string resultCode = 13 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 14 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 15 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数登 数登支付链接获取
|
||||||
|
message GetDciPayUrlRequest {
|
||||||
|
string digitalRegisterId = 1 [json_name = "digitalRegisterId",(validator.field) = {string_not_empty: true,human_error:"数登申请ID不能为空"}];
|
||||||
|
string clientToken = 2 [json_name = "clientToken",(validator.field) = {string_not_empty: true,human_error:"客户端token不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetDciPayUrlResponse {
|
||||||
|
string payUrl = 12 [json_name = "payUrl"];
|
||||||
|
string resultCode = 13 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 14 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 15 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数登 数登支付查询
|
||||||
|
message QueryDciPayRequest {
|
||||||
|
string digitalRegisterId = 1 [json_name = "digitalRegisterId",(validator.field) = {string_not_empty: true,human_error:"数登申请ID不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message QueryDciPayResponse {
|
||||||
|
string payStatus = 12 [json_name = "payStatus"];
|
||||||
|
string resultCode = 13 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 14 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 15 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数登 获取数登证书下载
|
||||||
|
message GetDciRegistrationcertRequest {
|
||||||
|
string digitalRegisterId = 1 [json_name = "digitalRegisterId",(validator.field) = {string_not_empty: true,human_error:"数登申请ID不能为空"}];
|
||||||
|
string clientToken = 2 [json_name = "clientToken",(validator.field) = {string_not_empty: true,human_error:"客户端token不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetDciRegistrationcertResponse {
|
||||||
|
string digitalRegisterStatus = 1 [json_name = "digitalRegisterStatus"];
|
||||||
|
string downloadUrl = 2 [json_name = "downloadUrl"];
|
||||||
|
int64 downloadTimesLeft = 3 [json_name = "downloadTimesLeft"];
|
||||||
|
string failDetail = 4 [json_name = "failDetail"];
|
||||||
|
string resultCode = 5 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 6 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 7 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数登 补正申请
|
||||||
|
message RetryDciRegistrationRequest {
|
||||||
|
string digitalRegisterId = 1 [json_name = "digitalRegisterId",(validator.field) = {string_not_empty: true,human_error:"数登申请ID不能为空"}];
|
||||||
|
string dciContentId = 2 [json_name = "dciContentId"];
|
||||||
|
DciExplanationInfo explanationInfo = 3 [json_name = "explanationInfo"];
|
||||||
|
AdditionalFileInfo additionalFileInfo = 4 [json_name = "additionalFileInfo"];
|
||||||
|
string clientToken = 5 [json_name = "clientToken",(validator.field) = {string_not_empty: true,human_error:"客户端token不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
message RetryDciRegistrationResponse {
|
||||||
|
string resultCode = 1 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 2 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 3 [json_name = "reqMsgId"];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数登 停止申请
|
||||||
|
message CloseDciRegistrationRequest {
|
||||||
|
string digitalRegisterId = 1 [json_name = "digitalRegisterId",(validator.field) = {string_not_empty: true,human_error:"数登申请ID不能为空"}];
|
||||||
|
string name = 2 [json_name = "name",(validator.field) = {string_not_empty: true,length_lt: 41,human_error:"退费人名称不能为空"}];
|
||||||
|
string mobileNo = 3 [json_name = "mobileNo",(validator.field) = {string_not_empty: true,human_error:"联系手机号不能为空"}];
|
||||||
|
string clientToken = 5 [json_name = "clientToken",(validator.field) = {string_not_empty: true,human_error:"客户端token不能为空"}];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
message CloseDciRegistrationResponse {
|
||||||
|
string resultCode = 1 [json_name = "resultCode"];
|
||||||
|
string resultMsg = 2 [json_name = "resultMsg"];
|
||||||
|
string reqMsgId = 3 [json_name = "reqMsgId"];
|
||||||
|
}
|
3890
pb/dci/dci.pb.go
Normal file
3890
pb/dci/dci.pb.go
Normal file
File diff suppressed because it is too large
Load Diff
331
pb/dci/dci.validator.pb.go
Normal file
331
pb/dci/dci.validator.pb.go
Normal file
@ -0,0 +1,331 @@
|
|||||||
|
// Code generated by protoc-gen-gogo. DO NOT EDIT.
|
||||||
|
// source: pb/dci.proto
|
||||||
|
|
||||||
|
package dci
|
||||||
|
|
||||||
|
import (
|
||||||
|
fmt "fmt"
|
||||||
|
math "math"
|
||||||
|
proto "github.com/golang/protobuf/proto"
|
||||||
|
_ "google.golang.org/protobuf/types/descriptorpb"
|
||||||
|
_ "github.com/mwitkow/go-proto-validators"
|
||||||
|
github_com_mwitkow_go_proto_validators "github.com/mwitkow/go-proto-validators"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
|
var _ = proto.Marshal
|
||||||
|
var _ = fmt.Errorf
|
||||||
|
var _ = math.Inf
|
||||||
|
|
||||||
|
func (this *GetUploadUrlRequest) Validate() error {
|
||||||
|
if this.FileName == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("FileName", fmt.Errorf(`文件不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *GetUploadUrlResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *AddDciUserRequest) Validate() error {
|
||||||
|
if this.CertName == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CertName", fmt.Errorf(`证件名称不能为空`))
|
||||||
|
}
|
||||||
|
if this.CertificateNumber == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CertificateNumber", fmt.Errorf(`证件号码不能为空`))
|
||||||
|
}
|
||||||
|
if this.CertificateType == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CertificateType", fmt.Errorf(`证件类型不能为空`))
|
||||||
|
}
|
||||||
|
if this.CertificateFrontFileId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CertificateFrontFileId", fmt.Errorf(`证件正面文件路径不能为空`))
|
||||||
|
}
|
||||||
|
if this.Phone == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("Phone", fmt.Errorf(`手机号不能为空`))
|
||||||
|
}
|
||||||
|
if this.AreaType == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("AreaType", fmt.Errorf(`所属地区不能为空`))
|
||||||
|
}
|
||||||
|
if this.ClientToken == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ClientToken", fmt.Errorf(`客户端token不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *AddDciUserResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *UpdateDciUserRequest) Validate() error {
|
||||||
|
if this.DciUserId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DciUserId", fmt.Errorf(`dci用户ID不能为空`))
|
||||||
|
}
|
||||||
|
if this.CertFrontFileId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CertFrontFileId", fmt.Errorf(`证件正面文件路径不能为空`))
|
||||||
|
}
|
||||||
|
if this.ClientToken == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ClientToken", fmt.Errorf(`客户端token不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *UpdateDciUserResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *QueryDciUserRequest) Validate() error {
|
||||||
|
if this.CertificateType == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CertificateType", fmt.Errorf(`证件类型不能为空`))
|
||||||
|
}
|
||||||
|
if this.CertificateNumber == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CertificateNumber", fmt.Errorf(`证件号码不能为空`))
|
||||||
|
}
|
||||||
|
if this.Phone == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("Phone", fmt.Errorf(`手机号不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *QueryDciUserResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *CreateDciPreregistrationRequest) Validate() error {
|
||||||
|
if this.WorkName == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("WorkName", fmt.Errorf(`作品名称不能为空`))
|
||||||
|
}
|
||||||
|
if !(len(this.WorkName) < 51) {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("WorkName", fmt.Errorf(`作品名称不能为空`))
|
||||||
|
}
|
||||||
|
if this.DciUserId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DciUserId", fmt.Errorf(`DCI用户ID不能为空`))
|
||||||
|
}
|
||||||
|
if this.WorkCategory == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("WorkCategory", fmt.Errorf(`作品类型不能为空`))
|
||||||
|
}
|
||||||
|
if this.WorkFileId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("WorkFileId", fmt.Errorf(`作品文件路径不能为空`))
|
||||||
|
}
|
||||||
|
if this.FileType == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("FileType", fmt.Errorf(`文件类型不能为空`))
|
||||||
|
}
|
||||||
|
if this.CreationInfo != nil {
|
||||||
|
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.CreationInfo); err != nil {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationInfo", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.PublicationInfo != nil {
|
||||||
|
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.PublicationInfo); err != nil {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("PublicationInfo", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.AuthorName == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("AuthorName", fmt.Errorf(`作者姓名不能为空`))
|
||||||
|
}
|
||||||
|
if this.AuthorSignature == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("AuthorSignature", fmt.Errorf(`作者署名不能为空`))
|
||||||
|
}
|
||||||
|
if this.RightInfo != nil {
|
||||||
|
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.RightInfo); err != nil {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("RightInfo", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.PreRegistrationTrueWill == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("PreRegistrationTrueWill", fmt.Errorf(`真实意愿表达信息不能为空`))
|
||||||
|
}
|
||||||
|
for _, item := range this.CopyrightOwnerIds {
|
||||||
|
if item == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CopyrightOwnerIds", fmt.Errorf(`著作权人用户id列表不能为空`))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.ClientToken == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ClientToken", fmt.Errorf(`客户端token不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *DciCreationInfo) Validate() error {
|
||||||
|
if this.CreationNature == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationNature", fmt.Errorf(`作品创作性质不能为空`))
|
||||||
|
}
|
||||||
|
if this.CreationCompletionDate == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationCompletionDate", fmt.Errorf(`创作完成日期不能为空`))
|
||||||
|
}
|
||||||
|
if this.CreationCompletionCode == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationCompletionCode", fmt.Errorf(`作品创作地点地区编码不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *DciPublicationInfo) Validate() error {
|
||||||
|
if this.CreationNature == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationNature", fmt.Errorf(`作品发表状态不能为空`))
|
||||||
|
}
|
||||||
|
if this.CreationCompletionDate == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationCompletionDate", fmt.Errorf(`首次发表日期不能为空`))
|
||||||
|
}
|
||||||
|
if this.CreationCompletionCode == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationCompletionCode", fmt.Errorf(`首次发表地点地区编码不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *DciRightInfo) Validate() error {
|
||||||
|
if this.RightScope == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("RightScope", fmt.Errorf(`作品权利范围不能为空`))
|
||||||
|
}
|
||||||
|
if this.RightObtainWay == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("RightObtainWay", fmt.Errorf(`权利取得方式不能为空`))
|
||||||
|
}
|
||||||
|
if this.OwnershipWay == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("OwnershipWay", fmt.Errorf(`权利归属方式不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *CreateDciPreregistrationResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *QueryDciPreregistrationRequest) Validate() error {
|
||||||
|
if this.DciContentId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DciContentId", fmt.Errorf(`DCI内容ID不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *QueryDciPreregistrationResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *CreateDciRegistrationRequest) Validate() error {
|
||||||
|
if this.DciContentId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DciContentId", fmt.Errorf(`DCI申领ID不能为空`))
|
||||||
|
}
|
||||||
|
if this.ExplanationInfo != nil {
|
||||||
|
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.ExplanationInfo); err != nil {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ExplanationInfo", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.InvoiceInfo != nil {
|
||||||
|
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.InvoiceInfo); err != nil {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("InvoiceInfo", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.AdditionalFileInfo != nil {
|
||||||
|
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.AdditionalFileInfo); err != nil {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("AdditionalFileInfo", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.ClientToken == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ClientToken", fmt.Errorf(`客户端token不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *DciExplanationInfo) Validate() error {
|
||||||
|
if this.CreationPurpose == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationPurpose", fmt.Errorf(`创作目的不能为空`))
|
||||||
|
}
|
||||||
|
if !(len(this.CreationPurpose) < 51) {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationPurpose", fmt.Errorf(`创作目的不能为空`))
|
||||||
|
}
|
||||||
|
if this.CreationProcess == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationProcess", fmt.Errorf(`创作过程不能为空`))
|
||||||
|
}
|
||||||
|
if !(len(this.CreationProcess) < 86) {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("CreationProcess", fmt.Errorf(`创作过程不能为空`))
|
||||||
|
}
|
||||||
|
if this.Originality == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("Originality", fmt.Errorf(`独创性说明不能为空`))
|
||||||
|
}
|
||||||
|
if !(len(this.Originality) < 141) {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("Originality", fmt.Errorf(`独创性说明不能为空`))
|
||||||
|
}
|
||||||
|
if this.FontCopyright == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("FontCopyright", fmt.Errorf(`字体声明不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *InvoiceInfo) Validate() error {
|
||||||
|
if this.InvoiceType == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("InvoiceType", fmt.Errorf(`发票类型不能为空`))
|
||||||
|
}
|
||||||
|
if this.InvoiceHeader == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("InvoiceHeader", fmt.Errorf(`发票抬头不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *AdditionalFileInfo) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *CreateDciRegistrationResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *QueryDciRegistrationRequest) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *QueryDciRegistrationResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *GetDciPayUrlRequest) Validate() error {
|
||||||
|
if this.DigitalRegisterId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DigitalRegisterId", fmt.Errorf(`数登申请ID不能为空`))
|
||||||
|
}
|
||||||
|
if this.ClientToken == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ClientToken", fmt.Errorf(`客户端token不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *GetDciPayUrlResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *QueryDciPayRequest) Validate() error {
|
||||||
|
if this.DigitalRegisterId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DigitalRegisterId", fmt.Errorf(`数登申请ID不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *QueryDciPayResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *GetDciRegistrationcertRequest) Validate() error {
|
||||||
|
if this.DigitalRegisterId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DigitalRegisterId", fmt.Errorf(`数登申请ID不能为空`))
|
||||||
|
}
|
||||||
|
if this.ClientToken == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ClientToken", fmt.Errorf(`客户端token不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *GetDciRegistrationcertResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *RetryDciRegistrationRequest) Validate() error {
|
||||||
|
if this.DigitalRegisterId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DigitalRegisterId", fmt.Errorf(`数登申请ID不能为空`))
|
||||||
|
}
|
||||||
|
if this.ExplanationInfo != nil {
|
||||||
|
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.ExplanationInfo); err != nil {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ExplanationInfo", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.AdditionalFileInfo != nil {
|
||||||
|
if err := github_com_mwitkow_go_proto_validators.CallValidatorIfExists(this.AdditionalFileInfo); err != nil {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("AdditionalFileInfo", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if this.ClientToken == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ClientToken", fmt.Errorf(`客户端token不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *RetryDciRegistrationResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *CloseDciRegistrationRequest) Validate() error {
|
||||||
|
if this.DigitalRegisterId == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("DigitalRegisterId", fmt.Errorf(`数登申请ID不能为空`))
|
||||||
|
}
|
||||||
|
if this.Name == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("Name", fmt.Errorf(`退费人名称不能为空`))
|
||||||
|
}
|
||||||
|
if !(len(this.Name) < 41) {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("Name", fmt.Errorf(`退费人名称不能为空`))
|
||||||
|
}
|
||||||
|
if this.MobileNo == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("MobileNo", fmt.Errorf(`联系手机号不能为空`))
|
||||||
|
}
|
||||||
|
if this.ClientToken == "" {
|
||||||
|
return github_com_mwitkow_go_proto_validators.FieldError("ClientToken", fmt.Errorf(`客户端token不能为空`))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (this *CloseDciRegistrationResponse) Validate() error {
|
||||||
|
return nil
|
||||||
|
}
|
695
pb/dci/dci_triple.pb.go
Normal file
695
pb/dci/dci_triple.pb.go
Normal file
@ -0,0 +1,695 @@
|
|||||||
|
// Code generated by protoc-gen-go-triple. DO NOT EDIT.
|
||||||
|
// versions:
|
||||||
|
// - protoc-gen-go-triple v1.0.5
|
||||||
|
// - protoc v3.21.4
|
||||||
|
// source: pb/dci.proto
|
||||||
|
|
||||||
|
package dci
|
||||||
|
|
||||||
|
import (
|
||||||
|
context "context"
|
||||||
|
protocol "dubbo.apache.org/dubbo-go/v3/protocol"
|
||||||
|
dubbo3 "dubbo.apache.org/dubbo-go/v3/protocol/dubbo3"
|
||||||
|
invocation "dubbo.apache.org/dubbo-go/v3/protocol/invocation"
|
||||||
|
grpc_go "github.com/dubbogo/grpc-go"
|
||||||
|
codes "github.com/dubbogo/grpc-go/codes"
|
||||||
|
metadata "github.com/dubbogo/grpc-go/metadata"
|
||||||
|
status "github.com/dubbogo/grpc-go/status"
|
||||||
|
common "github.com/dubbogo/triple/pkg/common"
|
||||||
|
constant "github.com/dubbogo/triple/pkg/common/constant"
|
||||||
|
triple "github.com/dubbogo/triple/pkg/triple"
|
||||||
|
)
|
||||||
|
|
||||||
|
// This is a compile-time assertion to ensure that this generated file
|
||||||
|
// is compatible with the grpc package it is being compiled against.
|
||||||
|
const _ = grpc_go.SupportPackageIsVersion7
|
||||||
|
|
||||||
|
// DciClient is the client API for Dci service.
|
||||||
|
//
|
||||||
|
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
|
||||||
|
type DciClient interface {
|
||||||
|
// 通用接口 用于文件上传
|
||||||
|
GetUploadUrl(ctx context.Context, in *GetUploadUrlRequest, opts ...grpc_go.CallOption) (*GetUploadUrlResponse, common.ErrorWithAttachment)
|
||||||
|
// dci user
|
||||||
|
AddDciUser(ctx context.Context, in *AddDciUserRequest, opts ...grpc_go.CallOption) (*AddDciUserResponse, common.ErrorWithAttachment)
|
||||||
|
UpdateDciUser(ctx context.Context, in *UpdateDciUserRequest, opts ...grpc_go.CallOption) (*UpdateDciUserResponse, common.ErrorWithAttachment)
|
||||||
|
QueryDciUser(ctx context.Context, in *QueryDciUserRequest, opts ...grpc_go.CallOption) (*QueryDciUserResponse, common.ErrorWithAttachment)
|
||||||
|
// dci work
|
||||||
|
CreateDciPreregistration(ctx context.Context, in *CreateDciPreregistrationRequest, opts ...grpc_go.CallOption) (*CreateDciPreregistrationResponse, common.ErrorWithAttachment)
|
||||||
|
QueryDciPreregistration(ctx context.Context, in *QueryDciPreregistrationRequest, opts ...grpc_go.CallOption) (*QueryDciPreregistrationResponse, common.ErrorWithAttachment)
|
||||||
|
// 数登
|
||||||
|
CreateDciRegistration(ctx context.Context, in *CreateDciRegistrationRequest, opts ...grpc_go.CallOption) (*CreateDciRegistrationResponse, common.ErrorWithAttachment)
|
||||||
|
QueryDciRegistration(ctx context.Context, in *QueryDciRegistrationRequest, opts ...grpc_go.CallOption) (*QueryDciRegistrationResponse, common.ErrorWithAttachment)
|
||||||
|
GetDciPayUrl(ctx context.Context, in *GetDciPayUrlRequest, opts ...grpc_go.CallOption) (*GetDciPayUrlResponse, common.ErrorWithAttachment)
|
||||||
|
QueryDciPay(ctx context.Context, in *QueryDciPayRequest, opts ...grpc_go.CallOption) (*QueryDciPayResponse, common.ErrorWithAttachment)
|
||||||
|
GetDciRegistrationcert(ctx context.Context, in *GetDciRegistrationcertRequest, opts ...grpc_go.CallOption) (*GetDciRegistrationcertResponse, common.ErrorWithAttachment)
|
||||||
|
RetryDciRegistration(ctx context.Context, in *RetryDciRegistrationRequest, opts ...grpc_go.CallOption) (*RetryDciRegistrationResponse, common.ErrorWithAttachment)
|
||||||
|
CloseDciRegistration(ctx context.Context, in *CloseDciRegistrationRequest, opts ...grpc_go.CallOption) (*CloseDciRegistrationResponse, common.ErrorWithAttachment)
|
||||||
|
}
|
||||||
|
|
||||||
|
type dciClient struct {
|
||||||
|
cc *triple.TripleConn
|
||||||
|
}
|
||||||
|
|
||||||
|
type DciClientImpl struct {
|
||||||
|
GetUploadUrl func(ctx context.Context, in *GetUploadUrlRequest) (*GetUploadUrlResponse, error)
|
||||||
|
AddDciUser func(ctx context.Context, in *AddDciUserRequest) (*AddDciUserResponse, error)
|
||||||
|
UpdateDciUser func(ctx context.Context, in *UpdateDciUserRequest) (*UpdateDciUserResponse, error)
|
||||||
|
QueryDciUser func(ctx context.Context, in *QueryDciUserRequest) (*QueryDciUserResponse, error)
|
||||||
|
CreateDciPreregistration func(ctx context.Context, in *CreateDciPreregistrationRequest) (*CreateDciPreregistrationResponse, error)
|
||||||
|
QueryDciPreregistration func(ctx context.Context, in *QueryDciPreregistrationRequest) (*QueryDciPreregistrationResponse, error)
|
||||||
|
CreateDciRegistration func(ctx context.Context, in *CreateDciRegistrationRequest) (*CreateDciRegistrationResponse, error)
|
||||||
|
QueryDciRegistration func(ctx context.Context, in *QueryDciRegistrationRequest) (*QueryDciRegistrationResponse, error)
|
||||||
|
GetDciPayUrl func(ctx context.Context, in *GetDciPayUrlRequest) (*GetDciPayUrlResponse, error)
|
||||||
|
QueryDciPay func(ctx context.Context, in *QueryDciPayRequest) (*QueryDciPayResponse, error)
|
||||||
|
GetDciRegistrationcert func(ctx context.Context, in *GetDciRegistrationcertRequest) (*GetDciRegistrationcertResponse, error)
|
||||||
|
RetryDciRegistration func(ctx context.Context, in *RetryDciRegistrationRequest) (*RetryDciRegistrationResponse, error)
|
||||||
|
CloseDciRegistration func(ctx context.Context, in *CloseDciRegistrationRequest) (*CloseDciRegistrationResponse, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *DciClientImpl) GetDubboStub(cc *triple.TripleConn) DciClient {
|
||||||
|
return NewDciClient(cc)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *DciClientImpl) XXX_InterfaceName() string {
|
||||||
|
return "dci.Dci"
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDciClient(cc *triple.TripleConn) DciClient {
|
||||||
|
return &dciClient{cc}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) GetUploadUrl(ctx context.Context, in *GetUploadUrlRequest, opts ...grpc_go.CallOption) (*GetUploadUrlResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(GetUploadUrlResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetUploadUrl", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) AddDciUser(ctx context.Context, in *AddDciUserRequest, opts ...grpc_go.CallOption) (*AddDciUserResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(AddDciUserResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/AddDciUser", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) UpdateDciUser(ctx context.Context, in *UpdateDciUserRequest, opts ...grpc_go.CallOption) (*UpdateDciUserResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(UpdateDciUserResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/UpdateDciUser", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) QueryDciUser(ctx context.Context, in *QueryDciUserRequest, opts ...grpc_go.CallOption) (*QueryDciUserResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(QueryDciUserResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/QueryDciUser", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) CreateDciPreregistration(ctx context.Context, in *CreateDciPreregistrationRequest, opts ...grpc_go.CallOption) (*CreateDciPreregistrationResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(CreateDciPreregistrationResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateDciPreregistration", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) QueryDciPreregistration(ctx context.Context, in *QueryDciPreregistrationRequest, opts ...grpc_go.CallOption) (*QueryDciPreregistrationResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(QueryDciPreregistrationResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/QueryDciPreregistration", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) CreateDciRegistration(ctx context.Context, in *CreateDciRegistrationRequest, opts ...grpc_go.CallOption) (*CreateDciRegistrationResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(CreateDciRegistrationResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CreateDciRegistration", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) QueryDciRegistration(ctx context.Context, in *QueryDciRegistrationRequest, opts ...grpc_go.CallOption) (*QueryDciRegistrationResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(QueryDciRegistrationResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/QueryDciRegistration", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) GetDciPayUrl(ctx context.Context, in *GetDciPayUrlRequest, opts ...grpc_go.CallOption) (*GetDciPayUrlResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(GetDciPayUrlResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetDciPayUrl", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) QueryDciPay(ctx context.Context, in *QueryDciPayRequest, opts ...grpc_go.CallOption) (*QueryDciPayResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(QueryDciPayResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/QueryDciPay", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) GetDciRegistrationcert(ctx context.Context, in *GetDciRegistrationcertRequest, opts ...grpc_go.CallOption) (*GetDciRegistrationcertResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(GetDciRegistrationcertResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/GetDciRegistrationcert", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) RetryDciRegistration(ctx context.Context, in *RetryDciRegistrationRequest, opts ...grpc_go.CallOption) (*RetryDciRegistrationResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(RetryDciRegistrationResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/RetryDciRegistration", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *dciClient) CloseDciRegistration(ctx context.Context, in *CloseDciRegistrationRequest, opts ...grpc_go.CallOption) (*CloseDciRegistrationResponse, common.ErrorWithAttachment) {
|
||||||
|
out := new(CloseDciRegistrationResponse)
|
||||||
|
interfaceKey := ctx.Value(constant.InterfaceKey).(string)
|
||||||
|
return out, c.cc.Invoke(ctx, "/"+interfaceKey+"/CloseDciRegistration", in, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DciServer is the server API for Dci service.
|
||||||
|
// All implementations must embed UnimplementedDciServer
|
||||||
|
// for forward compatibility
|
||||||
|
type DciServer interface {
|
||||||
|
// 通用接口 用于文件上传
|
||||||
|
GetUploadUrl(context.Context, *GetUploadUrlRequest) (*GetUploadUrlResponse, error)
|
||||||
|
// dci user
|
||||||
|
AddDciUser(context.Context, *AddDciUserRequest) (*AddDciUserResponse, error)
|
||||||
|
UpdateDciUser(context.Context, *UpdateDciUserRequest) (*UpdateDciUserResponse, error)
|
||||||
|
QueryDciUser(context.Context, *QueryDciUserRequest) (*QueryDciUserResponse, error)
|
||||||
|
// dci work
|
||||||
|
CreateDciPreregistration(context.Context, *CreateDciPreregistrationRequest) (*CreateDciPreregistrationResponse, error)
|
||||||
|
QueryDciPreregistration(context.Context, *QueryDciPreregistrationRequest) (*QueryDciPreregistrationResponse, error)
|
||||||
|
// 数登
|
||||||
|
CreateDciRegistration(context.Context, *CreateDciRegistrationRequest) (*CreateDciRegistrationResponse, error)
|
||||||
|
QueryDciRegistration(context.Context, *QueryDciRegistrationRequest) (*QueryDciRegistrationResponse, error)
|
||||||
|
GetDciPayUrl(context.Context, *GetDciPayUrlRequest) (*GetDciPayUrlResponse, error)
|
||||||
|
QueryDciPay(context.Context, *QueryDciPayRequest) (*QueryDciPayResponse, error)
|
||||||
|
GetDciRegistrationcert(context.Context, *GetDciRegistrationcertRequest) (*GetDciRegistrationcertResponse, error)
|
||||||
|
RetryDciRegistration(context.Context, *RetryDciRegistrationRequest) (*RetryDciRegistrationResponse, error)
|
||||||
|
CloseDciRegistration(context.Context, *CloseDciRegistrationRequest) (*CloseDciRegistrationResponse, error)
|
||||||
|
mustEmbedUnimplementedDciServer()
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnimplementedDciServer must be embedded to have forward compatible implementations.
|
||||||
|
type UnimplementedDciServer struct {
|
||||||
|
proxyImpl protocol.Invoker
|
||||||
|
}
|
||||||
|
|
||||||
|
func (UnimplementedDciServer) GetUploadUrl(context.Context, *GetUploadUrlRequest) (*GetUploadUrlResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method GetUploadUrl not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) AddDciUser(context.Context, *AddDciUserRequest) (*AddDciUserResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method AddDciUser not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) UpdateDciUser(context.Context, *UpdateDciUserRequest) (*UpdateDciUserResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method UpdateDciUser not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) QueryDciUser(context.Context, *QueryDciUserRequest) (*QueryDciUserResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method QueryDciUser not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) CreateDciPreregistration(context.Context, *CreateDciPreregistrationRequest) (*CreateDciPreregistrationResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method CreateDciPreregistration not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) QueryDciPreregistration(context.Context, *QueryDciPreregistrationRequest) (*QueryDciPreregistrationResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method QueryDciPreregistration not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) CreateDciRegistration(context.Context, *CreateDciRegistrationRequest) (*CreateDciRegistrationResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method CreateDciRegistration not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) QueryDciRegistration(context.Context, *QueryDciRegistrationRequest) (*QueryDciRegistrationResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method QueryDciRegistration not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) GetDciPayUrl(context.Context, *GetDciPayUrlRequest) (*GetDciPayUrlResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method GetDciPayUrl not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) QueryDciPay(context.Context, *QueryDciPayRequest) (*QueryDciPayResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method QueryDciPay not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) GetDciRegistrationcert(context.Context, *GetDciRegistrationcertRequest) (*GetDciRegistrationcertResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method GetDciRegistrationcert not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) RetryDciRegistration(context.Context, *RetryDciRegistrationRequest) (*RetryDciRegistrationResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method RetryDciRegistration not implemented")
|
||||||
|
}
|
||||||
|
func (UnimplementedDciServer) CloseDciRegistration(context.Context, *CloseDciRegistrationRequest) (*CloseDciRegistrationResponse, error) {
|
||||||
|
return nil, status.Errorf(codes.Unimplemented, "method CloseDciRegistration not implemented")
|
||||||
|
}
|
||||||
|
func (s *UnimplementedDciServer) XXX_SetProxyImpl(impl protocol.Invoker) {
|
||||||
|
s.proxyImpl = impl
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *UnimplementedDciServer) XXX_GetProxyImpl() protocol.Invoker {
|
||||||
|
return s.proxyImpl
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *UnimplementedDciServer) XXX_ServiceDesc() *grpc_go.ServiceDesc {
|
||||||
|
return &Dci_ServiceDesc
|
||||||
|
}
|
||||||
|
func (s *UnimplementedDciServer) XXX_InterfaceName() string {
|
||||||
|
return "dci.Dci"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (UnimplementedDciServer) mustEmbedUnimplementedDciServer() {}
|
||||||
|
|
||||||
|
// UnsafeDciServer may be embedded to opt out of forward compatibility for this service.
|
||||||
|
// Use of this interface is not recommended, as added methods to DciServer will
|
||||||
|
// result in compilation errors.
|
||||||
|
type UnsafeDciServer interface {
|
||||||
|
mustEmbedUnimplementedDciServer()
|
||||||
|
}
|
||||||
|
|
||||||
|
func RegisterDciServer(s grpc_go.ServiceRegistrar, srv DciServer) {
|
||||||
|
s.RegisterService(&Dci_ServiceDesc, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_GetUploadUrl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(GetUploadUrlRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("GetUploadUrl", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_AddDciUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(AddDciUserRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("AddDciUser", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_UpdateDciUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(UpdateDciUserRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("UpdateDciUser", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_QueryDciUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(QueryDciUserRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("QueryDciUser", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_CreateDciPreregistration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(CreateDciPreregistrationRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("CreateDciPreregistration", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_QueryDciPreregistration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(QueryDciPreregistrationRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("QueryDciPreregistration", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_CreateDciRegistration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(CreateDciRegistrationRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("CreateDciRegistration", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_QueryDciRegistration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(QueryDciRegistrationRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("QueryDciRegistration", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_GetDciPayUrl_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(GetDciPayUrlRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("GetDciPayUrl", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_QueryDciPay_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(QueryDciPayRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("QueryDciPay", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_GetDciRegistrationcert_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(GetDciRegistrationcertRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("GetDciRegistrationcert", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_RetryDciRegistration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(RetryDciRegistrationRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("RetryDciRegistration", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
func _Dci_CloseDciRegistration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc_go.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(CloseDciRegistrationRequest)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
base := srv.(dubbo3.Dubbo3GrpcService)
|
||||||
|
args := []interface{}{}
|
||||||
|
args = append(args, in)
|
||||||
|
md, _ := metadata.FromIncomingContext(ctx)
|
||||||
|
invAttachment := make(map[string]interface{}, len(md))
|
||||||
|
for k, v := range md {
|
||||||
|
invAttachment[k] = v
|
||||||
|
}
|
||||||
|
invo := invocation.NewRPCInvocation("CloseDciRegistration", args, invAttachment)
|
||||||
|
if interceptor == nil {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
info := &grpc_go.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: ctx.Value("XXX_TRIPLE_GO_INTERFACE_NAME").(string),
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
result := base.XXX_GetProxyImpl().Invoke(ctx, invo)
|
||||||
|
return result, result.Error()
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dci_ServiceDesc is the grpc_go.ServiceDesc for Dci service.
|
||||||
|
// It's only intended for direct use with grpc_go.RegisterService,
|
||||||
|
// and not to be introspected or modified (even as a copy)
|
||||||
|
var Dci_ServiceDesc = grpc_go.ServiceDesc{
|
||||||
|
ServiceName: "dci.Dci",
|
||||||
|
HandlerType: (*DciServer)(nil),
|
||||||
|
Methods: []grpc_go.MethodDesc{
|
||||||
|
{
|
||||||
|
MethodName: "GetUploadUrl",
|
||||||
|
Handler: _Dci_GetUploadUrl_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "AddDciUser",
|
||||||
|
Handler: _Dci_AddDciUser_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "UpdateDciUser",
|
||||||
|
Handler: _Dci_UpdateDciUser_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "QueryDciUser",
|
||||||
|
Handler: _Dci_QueryDciUser_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "CreateDciPreregistration",
|
||||||
|
Handler: _Dci_CreateDciPreregistration_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "QueryDciPreregistration",
|
||||||
|
Handler: _Dci_QueryDciPreregistration_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "CreateDciRegistration",
|
||||||
|
Handler: _Dci_CreateDciRegistration_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "QueryDciRegistration",
|
||||||
|
Handler: _Dci_QueryDciRegistration_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "GetDciPayUrl",
|
||||||
|
Handler: _Dci_GetDciPayUrl_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "QueryDciPay",
|
||||||
|
Handler: _Dci_QueryDciPay_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "GetDciRegistrationcert",
|
||||||
|
Handler: _Dci_GetDciRegistrationcert_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "RetryDciRegistration",
|
||||||
|
Handler: _Dci_RetryDciRegistration_Handler,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
MethodName: "CloseDciRegistration",
|
||||||
|
Handler: _Dci_CloseDciRegistration_Handler,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Streams: []grpc_go.StreamDesc{},
|
||||||
|
Metadata: "pb/dci.proto",
|
||||||
|
}
|
923
pb/descriptor.proto
Normal file
923
pb/descriptor.proto
Normal file
@ -0,0 +1,923 @@
|
|||||||
|
// Protocol Buffers - Google's data interchange format
|
||||||
|
// Copyright 2008 Google Inc. All rights reserved.
|
||||||
|
// https://developers.google.com/protocol-buffers/
|
||||||
|
//
|
||||||
|
// Redistribution and use in source and binary forms, with or without
|
||||||
|
// modification, are permitted provided that the following conditions are
|
||||||
|
// met:
|
||||||
|
//
|
||||||
|
// * Redistributions of source code must retain the above copyright
|
||||||
|
// notice, this list of conditions and the following disclaimer.
|
||||||
|
// * Redistributions in binary form must reproduce the above
|
||||||
|
// copyright notice, this list of conditions and the following disclaimer
|
||||||
|
// in the documentation and/or other materials provided with the
|
||||||
|
// distribution.
|
||||||
|
// * Neither the name of Google Inc. nor the names of its
|
||||||
|
// contributors may be used to endorse or promote products derived from
|
||||||
|
// this software without specific prior written permission.
|
||||||
|
//
|
||||||
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
// Author: kenton@google.com (Kenton Varda)
|
||||||
|
// Based on original Protocol Buffers design by
|
||||||
|
// Sanjay Ghemawat, Jeff Dean, and others.
|
||||||
|
//
|
||||||
|
// The messages in this file describe the definitions found in .proto files.
|
||||||
|
// A valid .proto file can be translated directly to a FileDescriptorProto
|
||||||
|
// without any other information (e.g. without reading its imports).
|
||||||
|
|
||||||
|
|
||||||
|
syntax = "proto2";
|
||||||
|
|
||||||
|
package google.protobuf;
|
||||||
|
|
||||||
|
option go_package = "google.golang.org/protobuf/types/descriptorpb";
|
||||||
|
option java_package = "com.google.protobuf";
|
||||||
|
option java_outer_classname = "DescriptorProtos";
|
||||||
|
option csharp_namespace = "Google.Protobuf.Reflection";
|
||||||
|
option objc_class_prefix = "GPB";
|
||||||
|
option cc_enable_arenas = true;
|
||||||
|
|
||||||
|
// descriptor.proto must be optimized for speed because reflection-based
|
||||||
|
// algorithms don't work during bootstrapping.
|
||||||
|
option optimize_for = SPEED;
|
||||||
|
|
||||||
|
// The protocol compiler can output a FileDescriptorSet containing the .proto
|
||||||
|
// files it parses.
|
||||||
|
message FileDescriptorSet {
|
||||||
|
repeated FileDescriptorProto file = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a complete .proto file.
|
||||||
|
message FileDescriptorProto {
|
||||||
|
optional string name = 1; // file name, relative to root of source tree
|
||||||
|
optional string package = 2; // e.g. "foo", "foo.bar", etc.
|
||||||
|
|
||||||
|
// Names of files imported by this file.
|
||||||
|
repeated string dependency = 3;
|
||||||
|
// Indexes of the public imported files in the dependency list above.
|
||||||
|
repeated int32 public_dependency = 10;
|
||||||
|
// Indexes of the weak imported files in the dependency list.
|
||||||
|
// For Google-internal migration only. Do not use.
|
||||||
|
repeated int32 weak_dependency = 11;
|
||||||
|
|
||||||
|
// All top-level definitions in this file.
|
||||||
|
repeated DescriptorProto message_type = 4;
|
||||||
|
repeated EnumDescriptorProto enum_type = 5;
|
||||||
|
repeated ServiceDescriptorProto service = 6;
|
||||||
|
repeated FieldDescriptorProto extension = 7;
|
||||||
|
|
||||||
|
optional FileOptions options = 8;
|
||||||
|
|
||||||
|
// This field contains optional information about the original source code.
|
||||||
|
// You may safely remove this entire field without harming runtime
|
||||||
|
// functionality of the descriptors -- the information is needed only by
|
||||||
|
// development tools.
|
||||||
|
optional SourceCodeInfo source_code_info = 9;
|
||||||
|
|
||||||
|
// The syntax of the proto file.
|
||||||
|
// The supported values are "proto2", "proto3", and "editions".
|
||||||
|
//
|
||||||
|
// If `edition` is present, this value must be "editions".
|
||||||
|
optional string syntax = 12;
|
||||||
|
|
||||||
|
// The edition of the proto file, which is an opaque string.
|
||||||
|
optional string edition = 13;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a message type.
|
||||||
|
message DescriptorProto {
|
||||||
|
optional string name = 1;
|
||||||
|
|
||||||
|
repeated FieldDescriptorProto field = 2;
|
||||||
|
repeated FieldDescriptorProto extension = 6;
|
||||||
|
|
||||||
|
repeated DescriptorProto nested_type = 3;
|
||||||
|
repeated EnumDescriptorProto enum_type = 4;
|
||||||
|
|
||||||
|
message ExtensionRange {
|
||||||
|
optional int32 start = 1; // Inclusive.
|
||||||
|
optional int32 end = 2; // Exclusive.
|
||||||
|
|
||||||
|
optional ExtensionRangeOptions options = 3;
|
||||||
|
}
|
||||||
|
repeated ExtensionRange extension_range = 5;
|
||||||
|
|
||||||
|
repeated OneofDescriptorProto oneof_decl = 8;
|
||||||
|
|
||||||
|
optional MessageOptions options = 7;
|
||||||
|
|
||||||
|
// Range of reserved tag numbers. Reserved tag numbers may not be used by
|
||||||
|
// fields or extension ranges in the same message. Reserved ranges may
|
||||||
|
// not overlap.
|
||||||
|
message ReservedRange {
|
||||||
|
optional int32 start = 1; // Inclusive.
|
||||||
|
optional int32 end = 2; // Exclusive.
|
||||||
|
}
|
||||||
|
repeated ReservedRange reserved_range = 9;
|
||||||
|
// Reserved field names, which may not be used by fields in the same message.
|
||||||
|
// A given name may only be reserved once.
|
||||||
|
repeated string reserved_name = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ExtensionRangeOptions {
|
||||||
|
// The parser stores options it doesn't recognize here. See above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message. See above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a field within a message.
|
||||||
|
message FieldDescriptorProto {
|
||||||
|
enum Type {
|
||||||
|
// 0 is reserved for errors.
|
||||||
|
// Order is weird for historical reasons.
|
||||||
|
TYPE_DOUBLE = 1;
|
||||||
|
TYPE_FLOAT = 2;
|
||||||
|
// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT64 if
|
||||||
|
// negative values are likely.
|
||||||
|
TYPE_INT64 = 3;
|
||||||
|
TYPE_UINT64 = 4;
|
||||||
|
// Not ZigZag encoded. Negative numbers take 10 bytes. Use TYPE_SINT32 if
|
||||||
|
// negative values are likely.
|
||||||
|
TYPE_INT32 = 5;
|
||||||
|
TYPE_FIXED64 = 6;
|
||||||
|
TYPE_FIXED32 = 7;
|
||||||
|
TYPE_BOOL = 8;
|
||||||
|
TYPE_STRING = 9;
|
||||||
|
// Tag-delimited aggregate.
|
||||||
|
// Group type is deprecated and not supported in proto3. However, Proto3
|
||||||
|
// implementations should still be able to parse the group wire format and
|
||||||
|
// treat group fields as unknown fields.
|
||||||
|
TYPE_GROUP = 10;
|
||||||
|
TYPE_MESSAGE = 11; // Length-delimited aggregate.
|
||||||
|
|
||||||
|
// New in version 2.
|
||||||
|
TYPE_BYTES = 12;
|
||||||
|
TYPE_UINT32 = 13;
|
||||||
|
TYPE_ENUM = 14;
|
||||||
|
TYPE_SFIXED32 = 15;
|
||||||
|
TYPE_SFIXED64 = 16;
|
||||||
|
TYPE_SINT32 = 17; // Uses ZigZag encoding.
|
||||||
|
TYPE_SINT64 = 18; // Uses ZigZag encoding.
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Label {
|
||||||
|
// 0 is reserved for errors
|
||||||
|
LABEL_OPTIONAL = 1;
|
||||||
|
LABEL_REQUIRED = 2;
|
||||||
|
LABEL_REPEATED = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
optional string name = 1;
|
||||||
|
optional int32 number = 3;
|
||||||
|
optional Label label = 4;
|
||||||
|
|
||||||
|
// If type_name is set, this need not be set. If both this and type_name
|
||||||
|
// are set, this must be one of TYPE_ENUM, TYPE_MESSAGE or TYPE_GROUP.
|
||||||
|
optional Type type = 5;
|
||||||
|
|
||||||
|
// For message and enum types, this is the name of the type. If the name
|
||||||
|
// starts with a '.', it is fully-qualified. Otherwise, C++-like scoping
|
||||||
|
// rules are used to find the type (i.e. first the nested types within this
|
||||||
|
// message are searched, then within the parent, on up to the root
|
||||||
|
// namespace).
|
||||||
|
optional string type_name = 6;
|
||||||
|
|
||||||
|
// For extensions, this is the name of the type being extended. It is
|
||||||
|
// resolved in the same manner as type_name.
|
||||||
|
optional string extendee = 2;
|
||||||
|
|
||||||
|
// For numeric types, contains the original text representation of the value.
|
||||||
|
// For booleans, "true" or "false".
|
||||||
|
// For strings, contains the default text contents (not escaped in any way).
|
||||||
|
// For bytes, contains the C escaped value. All bytes >= 128 are escaped.
|
||||||
|
optional string default_value = 7;
|
||||||
|
|
||||||
|
// If set, gives the index of a oneof in the containing type's oneof_decl
|
||||||
|
// list. This field is a member of that oneof.
|
||||||
|
optional int32 oneof_index = 9;
|
||||||
|
|
||||||
|
// JSON name of this field. The value is set by protocol compiler. If the
|
||||||
|
// user has set a "json_name" option on this field, that option's value
|
||||||
|
// will be used. Otherwise, it's deduced from the field's name by converting
|
||||||
|
// it to camelCase.
|
||||||
|
optional string json_name = 10;
|
||||||
|
|
||||||
|
optional FieldOptions options = 8;
|
||||||
|
|
||||||
|
// If true, this is a proto3 "optional". When a proto3 field is optional, it
|
||||||
|
// tracks presence regardless of field type.
|
||||||
|
//
|
||||||
|
// When proto3_optional is true, this field must be belong to a oneof to
|
||||||
|
// signal to old proto3 clients that presence is tracked for this field. This
|
||||||
|
// oneof is known as a "synthetic" oneof, and this field must be its sole
|
||||||
|
// member (each proto3 optional field gets its own synthetic oneof). Synthetic
|
||||||
|
// oneofs exist in the descriptor only, and do not generate any API. Synthetic
|
||||||
|
// oneofs must be ordered after all "real" oneofs.
|
||||||
|
//
|
||||||
|
// For message fields, proto3_optional doesn't create any semantic change,
|
||||||
|
// since non-repeated message fields always track presence. However it still
|
||||||
|
// indicates the semantic detail of whether the user wrote "optional" or not.
|
||||||
|
// This can be useful for round-tripping the .proto file. For consistency we
|
||||||
|
// give message fields a synthetic oneof also, even though it is not required
|
||||||
|
// to track presence. This is especially important because the parser can't
|
||||||
|
// tell if a field is a message or an enum, so it must always create a
|
||||||
|
// synthetic oneof.
|
||||||
|
//
|
||||||
|
// Proto2 optional fields do not set this flag, because they already indicate
|
||||||
|
// optional with `LABEL_OPTIONAL`.
|
||||||
|
optional bool proto3_optional = 17;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a oneof.
|
||||||
|
message OneofDescriptorProto {
|
||||||
|
optional string name = 1;
|
||||||
|
optional OneofOptions options = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes an enum type.
|
||||||
|
message EnumDescriptorProto {
|
||||||
|
optional string name = 1;
|
||||||
|
|
||||||
|
repeated EnumValueDescriptorProto value = 2;
|
||||||
|
|
||||||
|
optional EnumOptions options = 3;
|
||||||
|
|
||||||
|
// Range of reserved numeric values. Reserved values may not be used by
|
||||||
|
// entries in the same enum. Reserved ranges may not overlap.
|
||||||
|
//
|
||||||
|
// Note that this is distinct from DescriptorProto.ReservedRange in that it
|
||||||
|
// is inclusive such that it can appropriately represent the entire int32
|
||||||
|
// domain.
|
||||||
|
message EnumReservedRange {
|
||||||
|
optional int32 start = 1; // Inclusive.
|
||||||
|
optional int32 end = 2; // Inclusive.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Range of reserved numeric values. Reserved numeric values may not be used
|
||||||
|
// by enum values in the same enum declaration. Reserved ranges may not
|
||||||
|
// overlap.
|
||||||
|
repeated EnumReservedRange reserved_range = 4;
|
||||||
|
|
||||||
|
// Reserved enum value names, which may not be reused. A given name may only
|
||||||
|
// be reserved once.
|
||||||
|
repeated string reserved_name = 5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a value within an enum.
|
||||||
|
message EnumValueDescriptorProto {
|
||||||
|
optional string name = 1;
|
||||||
|
optional int32 number = 2;
|
||||||
|
|
||||||
|
optional EnumValueOptions options = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a service.
|
||||||
|
message ServiceDescriptorProto {
|
||||||
|
optional string name = 1;
|
||||||
|
repeated MethodDescriptorProto method = 2;
|
||||||
|
|
||||||
|
optional ServiceOptions options = 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes a method of a service.
|
||||||
|
message MethodDescriptorProto {
|
||||||
|
optional string name = 1;
|
||||||
|
|
||||||
|
// Input and output type names. These are resolved in the same way as
|
||||||
|
// FieldDescriptorProto.type_name, but must refer to a message type.
|
||||||
|
optional string input_type = 2;
|
||||||
|
optional string output_type = 3;
|
||||||
|
|
||||||
|
optional MethodOptions options = 4;
|
||||||
|
|
||||||
|
// Identifies if client streams multiple client messages
|
||||||
|
optional bool client_streaming = 5 [default = false];
|
||||||
|
// Identifies if server streams multiple server messages
|
||||||
|
optional bool server_streaming = 6 [default = false];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ===================================================================
|
||||||
|
// Options
|
||||||
|
|
||||||
|
// Each of the definitions above may have "options" attached. These are
|
||||||
|
// just annotations which may cause code to be generated slightly differently
|
||||||
|
// or may contain hints for code that manipulates protocol messages.
|
||||||
|
//
|
||||||
|
// Clients may define custom options as extensions of the *Options messages.
|
||||||
|
// These extensions may not yet be known at parsing time, so the parser cannot
|
||||||
|
// store the values in them. Instead it stores them in a field in the *Options
|
||||||
|
// message called uninterpreted_option. This field must have the same name
|
||||||
|
// across all *Options messages. We then use this field to populate the
|
||||||
|
// extensions when we build a descriptor, at which point all protos have been
|
||||||
|
// parsed and so all extensions are known.
|
||||||
|
//
|
||||||
|
// Extension numbers for custom options may be chosen as follows:
|
||||||
|
// * For options which will only be used within a single application or
|
||||||
|
// organization, or for experimental options, use field numbers 50000
|
||||||
|
// through 99999. It is up to you to ensure that you do not use the
|
||||||
|
// same number for multiple options.
|
||||||
|
// * For options which will be published and used publicly by multiple
|
||||||
|
// independent entities, e-mail protobuf-global-extension-registry@google.com
|
||||||
|
// to reserve extension numbers. Simply provide your project name (e.g.
|
||||||
|
// Objective-C plugin) and your project website (if available) -- there's no
|
||||||
|
// need to explain how you intend to use them. Usually you only need one
|
||||||
|
// extension number. You can declare multiple options with only one extension
|
||||||
|
// number by putting them in a sub-message. See the Custom Options section of
|
||||||
|
// the docs for examples:
|
||||||
|
// https://developers.google.com/protocol-buffers/docs/proto#options
|
||||||
|
// If this turns out to be popular, a web service will be set up
|
||||||
|
// to automatically assign option numbers.
|
||||||
|
|
||||||
|
message FileOptions {
|
||||||
|
|
||||||
|
// Sets the Java package where classes generated from this .proto will be
|
||||||
|
// placed. By default, the proto package is used, but this is often
|
||||||
|
// inappropriate because proto packages do not normally start with backwards
|
||||||
|
// domain names.
|
||||||
|
optional string java_package = 1;
|
||||||
|
|
||||||
|
|
||||||
|
// Controls the name of the wrapper Java class generated for the .proto file.
|
||||||
|
// That class will always contain the .proto file's getDescriptor() method as
|
||||||
|
// well as any top-level extensions defined in the .proto file.
|
||||||
|
// If java_multiple_files is disabled, then all the other classes from the
|
||||||
|
// .proto file will be nested inside the single wrapper outer class.
|
||||||
|
optional string java_outer_classname = 8;
|
||||||
|
|
||||||
|
// If enabled, then the Java code generator will generate a separate .java
|
||||||
|
// file for each top-level message, enum, and service defined in the .proto
|
||||||
|
// file. Thus, these types will *not* be nested inside the wrapper class
|
||||||
|
// named by java_outer_classname. However, the wrapper class will still be
|
||||||
|
// generated to contain the file's getDescriptor() method as well as any
|
||||||
|
// top-level extensions defined in the file.
|
||||||
|
optional bool java_multiple_files = 10 [default = false];
|
||||||
|
|
||||||
|
// This option does nothing.
|
||||||
|
optional bool java_generate_equals_and_hash = 20 [deprecated=true];
|
||||||
|
|
||||||
|
// If set true, then the Java2 code generator will generate code that
|
||||||
|
// throws an exception whenever an attempt is made to assign a non-UTF-8
|
||||||
|
// byte sequence to a string field.
|
||||||
|
// Message reflection will do the same.
|
||||||
|
// However, an extension field still accepts non-UTF-8 byte sequences.
|
||||||
|
// This option has no effect on when used with the lite runtime.
|
||||||
|
optional bool java_string_check_utf8 = 27 [default = false];
|
||||||
|
|
||||||
|
|
||||||
|
// Generated classes can be optimized for speed or code size.
|
||||||
|
enum OptimizeMode {
|
||||||
|
SPEED = 1; // Generate complete code for parsing, serialization,
|
||||||
|
// etc.
|
||||||
|
CODE_SIZE = 2; // Use ReflectionOps to implement these methods.
|
||||||
|
LITE_RUNTIME = 3; // Generate code using MessageLite and the lite runtime.
|
||||||
|
}
|
||||||
|
optional OptimizeMode optimize_for = 9 [default = SPEED];
|
||||||
|
|
||||||
|
// Sets the Go package where structs generated from this .proto will be
|
||||||
|
// placed. If omitted, the Go package will be derived from the following:
|
||||||
|
// - The basename of the package import path, if provided.
|
||||||
|
// - Otherwise, the package statement in the .proto file, if present.
|
||||||
|
// - Otherwise, the basename of the .proto file, without extension.
|
||||||
|
optional string go_package = 11;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Should generic services be generated in each language? "Generic" services
|
||||||
|
// are not specific to any particular RPC system. They are generated by the
|
||||||
|
// main code generators in each language (without additional plugins).
|
||||||
|
// Generic services were the only kind of service generation supported by
|
||||||
|
// early versions of google.protobuf.
|
||||||
|
//
|
||||||
|
// Generic services are now considered deprecated in favor of using plugins
|
||||||
|
// that generate code specific to your particular RPC system. Therefore,
|
||||||
|
// these default to false. Old code which depends on generic services should
|
||||||
|
// explicitly set them to true.
|
||||||
|
optional bool cc_generic_services = 16 [default = false];
|
||||||
|
optional bool java_generic_services = 17 [default = false];
|
||||||
|
optional bool py_generic_services = 18 [default = false];
|
||||||
|
optional bool php_generic_services = 42 [default = false];
|
||||||
|
|
||||||
|
// Is this file deprecated?
|
||||||
|
// Depending on the target platform, this can emit Deprecated annotations
|
||||||
|
// for everything in the file, or it will be completely ignored; in the very
|
||||||
|
// least, this is a formalization for deprecating files.
|
||||||
|
optional bool deprecated = 23 [default = false];
|
||||||
|
|
||||||
|
// Enables the use of arenas for the proto messages in this file. This applies
|
||||||
|
// only to generated classes for C++.
|
||||||
|
optional bool cc_enable_arenas = 31 [default = true];
|
||||||
|
|
||||||
|
|
||||||
|
// Sets the objective c class prefix which is prepended to all objective c
|
||||||
|
// generated classes from this .proto. There is no default.
|
||||||
|
optional string objc_class_prefix = 36;
|
||||||
|
|
||||||
|
// Namespace for generated classes; defaults to the package.
|
||||||
|
optional string csharp_namespace = 37;
|
||||||
|
|
||||||
|
// By default Swift generators will take the proto package and CamelCase it
|
||||||
|
// replacing '.' with underscore and use that to prefix the types/symbols
|
||||||
|
// defined. When this options is provided, they will use this value instead
|
||||||
|
// to prefix the types/symbols defined.
|
||||||
|
optional string swift_prefix = 39;
|
||||||
|
|
||||||
|
// Sets the php class prefix which is prepended to all php generated classes
|
||||||
|
// from this .proto. Default is empty.
|
||||||
|
optional string php_class_prefix = 40;
|
||||||
|
|
||||||
|
// Use this option to change the namespace of php generated classes. Default
|
||||||
|
// is empty. When this option is empty, the package name will be used for
|
||||||
|
// determining the namespace.
|
||||||
|
optional string php_namespace = 41;
|
||||||
|
|
||||||
|
// Use this option to change the namespace of php generated metadata classes.
|
||||||
|
// Default is empty. When this option is empty, the proto file name will be
|
||||||
|
// used for determining the namespace.
|
||||||
|
optional string php_metadata_namespace = 44;
|
||||||
|
|
||||||
|
// Use this option to change the package of ruby generated classes. Default
|
||||||
|
// is empty. When this option is not set, the package name will be used for
|
||||||
|
// determining the ruby package.
|
||||||
|
optional string ruby_package = 45;
|
||||||
|
|
||||||
|
|
||||||
|
// The parser stores options it doesn't recognize here.
|
||||||
|
// See the documentation for the "Options" section above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message.
|
||||||
|
// See the documentation for the "Options" section above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
|
||||||
|
reserved 38;
|
||||||
|
}
|
||||||
|
|
||||||
|
message MessageOptions {
|
||||||
|
// Set true to use the old proto1 MessageSet wire format for extensions.
|
||||||
|
// This is provided for backwards-compatibility with the MessageSet wire
|
||||||
|
// format. You should not use this for any other reason: It's less
|
||||||
|
// efficient, has fewer features, and is more complicated.
|
||||||
|
//
|
||||||
|
// The message must be defined exactly as follows:
|
||||||
|
// message Foo {
|
||||||
|
// option message_set_wire_format = true;
|
||||||
|
// extensions 4 to max;
|
||||||
|
// }
|
||||||
|
// Note that the message cannot have any defined fields; MessageSets only
|
||||||
|
// have extensions.
|
||||||
|
//
|
||||||
|
// All extensions of your type must be singular messages; e.g. they cannot
|
||||||
|
// be int32s, enums, or repeated messages.
|
||||||
|
//
|
||||||
|
// Because this is an option, the above two restrictions are not enforced by
|
||||||
|
// the protocol compiler.
|
||||||
|
optional bool message_set_wire_format = 1 [default = false];
|
||||||
|
|
||||||
|
// Disables the generation of the standard "descriptor()" accessor, which can
|
||||||
|
// conflict with a field of the same name. This is meant to make migration
|
||||||
|
// from proto1 easier; new code should avoid fields named "descriptor".
|
||||||
|
optional bool no_standard_descriptor_accessor = 2 [default = false];
|
||||||
|
|
||||||
|
// Is this message deprecated?
|
||||||
|
// Depending on the target platform, this can emit Deprecated annotations
|
||||||
|
// for the message, or it will be completely ignored; in the very least,
|
||||||
|
// this is a formalization for deprecating messages.
|
||||||
|
optional bool deprecated = 3 [default = false];
|
||||||
|
|
||||||
|
reserved 4, 5, 6;
|
||||||
|
|
||||||
|
// Whether the message is an automatically generated map entry type for the
|
||||||
|
// maps field.
|
||||||
|
//
|
||||||
|
// For maps fields:
|
||||||
|
// map<KeyType, ValueType> map_field = 1;
|
||||||
|
// The parsed descriptor looks like:
|
||||||
|
// message MapFieldEntry {
|
||||||
|
// option map_entry = true;
|
||||||
|
// optional KeyType key = 1;
|
||||||
|
// optional ValueType value = 2;
|
||||||
|
// }
|
||||||
|
// repeated MapFieldEntry map_field = 1;
|
||||||
|
//
|
||||||
|
// Implementations may choose not to generate the map_entry=true message, but
|
||||||
|
// use a native map in the target language to hold the keys and values.
|
||||||
|
// The reflection APIs in such implementations still need to work as
|
||||||
|
// if the field is a repeated message field.
|
||||||
|
//
|
||||||
|
// NOTE: Do not set the option in .proto files. Always use the maps syntax
|
||||||
|
// instead. The option should only be implicitly set by the proto compiler
|
||||||
|
// parser.
|
||||||
|
optional bool map_entry = 7;
|
||||||
|
|
||||||
|
reserved 8; // javalite_serializable
|
||||||
|
reserved 9; // javanano_as_lite
|
||||||
|
|
||||||
|
|
||||||
|
// The parser stores options it doesn't recognize here. See above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message. See above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FieldOptions {
|
||||||
|
// The ctype option instructs the C++ code generator to use a different
|
||||||
|
// representation of the field than it normally would. See the specific
|
||||||
|
// options below. This option is not yet implemented in the open source
|
||||||
|
// release -- sorry, we'll try to include it in a future version!
|
||||||
|
optional CType ctype = 1 [default = STRING];
|
||||||
|
enum CType {
|
||||||
|
// Default mode.
|
||||||
|
STRING = 0;
|
||||||
|
|
||||||
|
CORD = 1;
|
||||||
|
|
||||||
|
STRING_PIECE = 2;
|
||||||
|
}
|
||||||
|
// The packed option can be enabled for repeated primitive fields to enable
|
||||||
|
// a more efficient representation on the wire. Rather than repeatedly
|
||||||
|
// writing the tag and type for each element, the entire array is encoded as
|
||||||
|
// a single length-delimited blob. In proto3, only explicit setting it to
|
||||||
|
// false will avoid using packed encoding.
|
||||||
|
optional bool packed = 2;
|
||||||
|
|
||||||
|
// The jstype option determines the JavaScript type used for values of the
|
||||||
|
// field. The option is permitted only for 64 bit integral and fixed types
|
||||||
|
// (int64, uint64, sint64, fixed64, sfixed64). A field with jstype JS_STRING
|
||||||
|
// is represented as JavaScript string, which avoids loss of precision that
|
||||||
|
// can happen when a large value is converted to a floating point JavaScript.
|
||||||
|
// Specifying JS_NUMBER for the jstype causes the generated JavaScript code to
|
||||||
|
// use the JavaScript "number" type. The behavior of the default option
|
||||||
|
// JS_NORMAL is implementation dependent.
|
||||||
|
//
|
||||||
|
// This option is an enum to permit additional types to be added, e.g.
|
||||||
|
// goog.math.Integer.
|
||||||
|
optional JSType jstype = 6 [default = JS_NORMAL];
|
||||||
|
enum JSType {
|
||||||
|
// Use the default type.
|
||||||
|
JS_NORMAL = 0;
|
||||||
|
|
||||||
|
// Use JavaScript strings.
|
||||||
|
JS_STRING = 1;
|
||||||
|
|
||||||
|
// Use JavaScript numbers.
|
||||||
|
JS_NUMBER = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Should this field be parsed lazily? Lazy applies only to message-type
|
||||||
|
// fields. It means that when the outer message is initially parsed, the
|
||||||
|
// inner message's contents will not be parsed but instead stored in encoded
|
||||||
|
// form. The inner message will actually be parsed when it is first accessed.
|
||||||
|
//
|
||||||
|
// This is only a hint. Implementations are free to choose whether to use
|
||||||
|
// eager or lazy parsing regardless of the value of this option. However,
|
||||||
|
// setting this option true suggests that the protocol author believes that
|
||||||
|
// using lazy parsing on this field is worth the additional bookkeeping
|
||||||
|
// overhead typically needed to implement it.
|
||||||
|
//
|
||||||
|
// This option does not affect the public interface of any generated code;
|
||||||
|
// all method signatures remain the same. Furthermore, thread-safety of the
|
||||||
|
// interface is not affected by this option; const methods remain safe to
|
||||||
|
// call from multiple threads concurrently, while non-const methods continue
|
||||||
|
// to require exclusive access.
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// Note that implementations may choose not to check required fields within
|
||||||
|
// a lazy sub-message. That is, calling IsInitialized() on the outer message
|
||||||
|
// may return true even if the inner message has missing required fields.
|
||||||
|
// This is necessary because otherwise the inner message would have to be
|
||||||
|
// parsed in order to perform the check, defeating the purpose of lazy
|
||||||
|
// parsing. An implementation which chooses not to check required fields
|
||||||
|
// must be consistent about it. That is, for any particular sub-message, the
|
||||||
|
// implementation must either *always* check its required fields, or *never*
|
||||||
|
// check its required fields, regardless of whether or not the message has
|
||||||
|
// been parsed.
|
||||||
|
//
|
||||||
|
// As of May 2022, lazy verifies the contents of the byte stream during
|
||||||
|
// parsing. An invalid byte stream will cause the overall parsing to fail.
|
||||||
|
optional bool lazy = 5 [default = false];
|
||||||
|
|
||||||
|
// unverified_lazy does no correctness checks on the byte stream. This should
|
||||||
|
// only be used where lazy with verification is prohibitive for performance
|
||||||
|
// reasons.
|
||||||
|
optional bool unverified_lazy = 15 [default = false];
|
||||||
|
|
||||||
|
// Is this field deprecated?
|
||||||
|
// Depending on the target platform, this can emit Deprecated annotations
|
||||||
|
// for accessors, or it will be completely ignored; in the very least, this
|
||||||
|
// is a formalization for deprecating fields.
|
||||||
|
optional bool deprecated = 3 [default = false];
|
||||||
|
|
||||||
|
// For Google-internal migration only. Do not use.
|
||||||
|
optional bool weak = 10 [default = false];
|
||||||
|
|
||||||
|
|
||||||
|
// The parser stores options it doesn't recognize here. See above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message. See above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
|
||||||
|
reserved 4; // removed jtype
|
||||||
|
}
|
||||||
|
|
||||||
|
message OneofOptions {
|
||||||
|
// The parser stores options it doesn't recognize here. See above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message. See above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
}
|
||||||
|
|
||||||
|
message EnumOptions {
|
||||||
|
|
||||||
|
// Set this option to true to allow mapping different tag names to the same
|
||||||
|
// value.
|
||||||
|
optional bool allow_alias = 2;
|
||||||
|
|
||||||
|
// Is this enum deprecated?
|
||||||
|
// Depending on the target platform, this can emit Deprecated annotations
|
||||||
|
// for the enum, or it will be completely ignored; in the very least, this
|
||||||
|
// is a formalization for deprecating enums.
|
||||||
|
optional bool deprecated = 3 [default = false];
|
||||||
|
|
||||||
|
reserved 5; // javanano_as_lite
|
||||||
|
|
||||||
|
// The parser stores options it doesn't recognize here. See above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message. See above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
}
|
||||||
|
|
||||||
|
message EnumValueOptions {
|
||||||
|
// Is this enum value deprecated?
|
||||||
|
// Depending on the target platform, this can emit Deprecated annotations
|
||||||
|
// for the enum value, or it will be completely ignored; in the very least,
|
||||||
|
// this is a formalization for deprecating enum values.
|
||||||
|
optional bool deprecated = 1 [default = false];
|
||||||
|
|
||||||
|
// The parser stores options it doesn't recognize here. See above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message. See above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ServiceOptions {
|
||||||
|
|
||||||
|
// Note: Field numbers 1 through 32 are reserved for Google's internal RPC
|
||||||
|
// framework. We apologize for hoarding these numbers to ourselves, but
|
||||||
|
// we were already using them long before we decided to release Protocol
|
||||||
|
// Buffers.
|
||||||
|
|
||||||
|
// Is this service deprecated?
|
||||||
|
// Depending on the target platform, this can emit Deprecated annotations
|
||||||
|
// for the service, or it will be completely ignored; in the very least,
|
||||||
|
// this is a formalization for deprecating services.
|
||||||
|
optional bool deprecated = 33 [default = false];
|
||||||
|
|
||||||
|
// The parser stores options it doesn't recognize here. See above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message. See above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
}
|
||||||
|
|
||||||
|
message MethodOptions {
|
||||||
|
|
||||||
|
// Note: Field numbers 1 through 32 are reserved for Google's internal RPC
|
||||||
|
// framework. We apologize for hoarding these numbers to ourselves, but
|
||||||
|
// we were already using them long before we decided to release Protocol
|
||||||
|
// Buffers.
|
||||||
|
|
||||||
|
// Is this method deprecated?
|
||||||
|
// Depending on the target platform, this can emit Deprecated annotations
|
||||||
|
// for the method, or it will be completely ignored; in the very least,
|
||||||
|
// this is a formalization for deprecating methods.
|
||||||
|
optional bool deprecated = 33 [default = false];
|
||||||
|
|
||||||
|
// Is this method side-effect-free (or safe in HTTP parlance), or idempotent,
|
||||||
|
// or neither? HTTP based RPC implementation may choose GET verb for safe
|
||||||
|
// methods, and PUT verb for idempotent methods instead of the default POST.
|
||||||
|
enum IdempotencyLevel {
|
||||||
|
IDEMPOTENCY_UNKNOWN = 0;
|
||||||
|
NO_SIDE_EFFECTS = 1; // implies idempotent
|
||||||
|
IDEMPOTENT = 2; // idempotent, but may have side effects
|
||||||
|
}
|
||||||
|
optional IdempotencyLevel idempotency_level = 34
|
||||||
|
[default = IDEMPOTENCY_UNKNOWN];
|
||||||
|
|
||||||
|
// The parser stores options it doesn't recognize here. See above.
|
||||||
|
repeated UninterpretedOption uninterpreted_option = 999;
|
||||||
|
|
||||||
|
// Clients can define custom options in extensions of this message. See above.
|
||||||
|
extensions 1000 to max;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// A message representing a option the parser does not recognize. This only
|
||||||
|
// appears in options protos created by the compiler::Parser class.
|
||||||
|
// DescriptorPool resolves these when building Descriptor objects. Therefore,
|
||||||
|
// options protos in descriptor objects (e.g. returned by Descriptor::options(),
|
||||||
|
// or produced by Descriptor::CopyTo()) will never have UninterpretedOptions
|
||||||
|
// in them.
|
||||||
|
message UninterpretedOption {
|
||||||
|
// The name of the uninterpreted option. Each string represents a segment in
|
||||||
|
// a dot-separated name. is_extension is true iff a segment represents an
|
||||||
|
// extension (denoted with parentheses in options specs in .proto files).
|
||||||
|
// E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents
|
||||||
|
// "foo.(bar.baz).moo".
|
||||||
|
message NamePart {
|
||||||
|
required string name_part = 1;
|
||||||
|
required bool is_extension = 2;
|
||||||
|
}
|
||||||
|
repeated NamePart name = 2;
|
||||||
|
|
||||||
|
// The value of the uninterpreted option, in whatever type the tokenizer
|
||||||
|
// identified it as during parsing. Exactly one of these should be set.
|
||||||
|
optional string identifier_value = 3;
|
||||||
|
optional uint64 positive_int_value = 4;
|
||||||
|
optional int64 negative_int_value = 5;
|
||||||
|
optional double double_value = 6;
|
||||||
|
optional bytes string_value = 7;
|
||||||
|
optional string aggregate_value = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===================================================================
|
||||||
|
// Optional source code info
|
||||||
|
|
||||||
|
// Encapsulates information about the original source file from which a
|
||||||
|
// FileDescriptorProto was generated.
|
||||||
|
message SourceCodeInfo {
|
||||||
|
// A Location identifies a piece of source code in a .proto file which
|
||||||
|
// corresponds to a particular definition. This information is intended
|
||||||
|
// to be useful to IDEs, code indexers, documentation generators, and similar
|
||||||
|
// tools.
|
||||||
|
//
|
||||||
|
// For example, say we have a file like:
|
||||||
|
// message Foo {
|
||||||
|
// optional string foo = 1;
|
||||||
|
// }
|
||||||
|
// Let's look at just the field definition:
|
||||||
|
// optional string foo = 1;
|
||||||
|
// ^ ^^ ^^ ^ ^^^
|
||||||
|
// a bc de f ghi
|
||||||
|
// We have the following locations:
|
||||||
|
// span path represents
|
||||||
|
// [a,i) [ 4, 0, 2, 0 ] The whole field definition.
|
||||||
|
// [a,b) [ 4, 0, 2, 0, 4 ] The label (optional).
|
||||||
|
// [c,d) [ 4, 0, 2, 0, 5 ] The type (string).
|
||||||
|
// [e,f) [ 4, 0, 2, 0, 1 ] The name (foo).
|
||||||
|
// [g,h) [ 4, 0, 2, 0, 3 ] The number (1).
|
||||||
|
//
|
||||||
|
// Notes:
|
||||||
|
// - A location may refer to a repeated field itself (i.e. not to any
|
||||||
|
// particular index within it). This is used whenever a set of elements are
|
||||||
|
// logically enclosed in a single code segment. For example, an entire
|
||||||
|
// extend block (possibly containing multiple extension definitions) will
|
||||||
|
// have an outer location whose path refers to the "extensions" repeated
|
||||||
|
// field without an index.
|
||||||
|
// - Multiple locations may have the same path. This happens when a single
|
||||||
|
// logical declaration is spread out across multiple places. The most
|
||||||
|
// obvious example is the "extend" block again -- there may be multiple
|
||||||
|
// extend blocks in the same scope, each of which will have the same path.
|
||||||
|
// - A location's span is not always a subset of its parent's span. For
|
||||||
|
// example, the "extendee" of an extension declaration appears at the
|
||||||
|
// beginning of the "extend" block and is shared by all extensions within
|
||||||
|
// the block.
|
||||||
|
// - Just because a location's span is a subset of some other location's span
|
||||||
|
// does not mean that it is a descendant. For example, a "group" defines
|
||||||
|
// both a type and a field in a single declaration. Thus, the locations
|
||||||
|
// corresponding to the type and field and their components will overlap.
|
||||||
|
// - Code which tries to interpret locations should probably be designed to
|
||||||
|
// ignore those that it doesn't understand, as more types of locations could
|
||||||
|
// be recorded in the future.
|
||||||
|
repeated Location location = 1;
|
||||||
|
message Location {
|
||||||
|
// Identifies which part of the FileDescriptorProto was defined at this
|
||||||
|
// location.
|
||||||
|
//
|
||||||
|
// Each element is a field number or an index. They form a path from
|
||||||
|
// the root FileDescriptorProto to the place where the definition occurs.
|
||||||
|
// For example, this path:
|
||||||
|
// [ 4, 3, 2, 7, 1 ]
|
||||||
|
// refers to:
|
||||||
|
// file.message_type(3) // 4, 3
|
||||||
|
// .field(7) // 2, 7
|
||||||
|
// .name() // 1
|
||||||
|
// This is because FileDescriptorProto.message_type has field number 4:
|
||||||
|
// repeated DescriptorProto message_type = 4;
|
||||||
|
// and DescriptorProto.field has field number 2:
|
||||||
|
// repeated FieldDescriptorProto field = 2;
|
||||||
|
// and FieldDescriptorProto.name has field number 1:
|
||||||
|
// optional string name = 1;
|
||||||
|
//
|
||||||
|
// Thus, the above path gives the location of a field name. If we removed
|
||||||
|
// the last element:
|
||||||
|
// [ 4, 3, 2, 7 ]
|
||||||
|
// this path refers to the whole field declaration (from the beginning
|
||||||
|
// of the label to the terminating semicolon).
|
||||||
|
repeated int32 path = 1 [packed = true];
|
||||||
|
|
||||||
|
// Always has exactly three or four elements: start line, start column,
|
||||||
|
// end line (optional, otherwise assumed same as start line), end column.
|
||||||
|
// These are packed into a single field for efficiency. Note that line
|
||||||
|
// and column numbers are zero-based -- typically you will want to add
|
||||||
|
// 1 to each before displaying to a user.
|
||||||
|
repeated int32 span = 2 [packed = true];
|
||||||
|
|
||||||
|
// If this SourceCodeInfo represents a complete declaration, these are any
|
||||||
|
// comments appearing before and after the declaration which appear to be
|
||||||
|
// attached to the declaration.
|
||||||
|
//
|
||||||
|
// A series of line comments appearing on consecutive lines, with no other
|
||||||
|
// tokens appearing on those lines, will be treated as a single comment.
|
||||||
|
//
|
||||||
|
// leading_detached_comments will keep paragraphs of comments that appear
|
||||||
|
// before (but not connected to) the current element. Each paragraph,
|
||||||
|
// separated by empty lines, will be one comment element in the repeated
|
||||||
|
// field.
|
||||||
|
//
|
||||||
|
// Only the comment content is provided; comment markers (e.g. //) are
|
||||||
|
// stripped out. For block comments, leading whitespace and an asterisk
|
||||||
|
// will be stripped from the beginning of each line other than the first.
|
||||||
|
// Newlines are included in the output.
|
||||||
|
//
|
||||||
|
// Examples:
|
||||||
|
//
|
||||||
|
// optional int32 foo = 1; // Comment attached to foo.
|
||||||
|
// // Comment attached to bar.
|
||||||
|
// optional int32 bar = 2;
|
||||||
|
//
|
||||||
|
// optional string baz = 3;
|
||||||
|
// // Comment attached to baz.
|
||||||
|
// // Another line attached to baz.
|
||||||
|
//
|
||||||
|
// // Comment attached to moo.
|
||||||
|
// //
|
||||||
|
// // Another line attached to moo.
|
||||||
|
// optional double moo = 4;
|
||||||
|
//
|
||||||
|
// // Detached comment for corge. This is not leading or trailing comments
|
||||||
|
// // to moo or corge because there are blank lines separating it from
|
||||||
|
// // both.
|
||||||
|
//
|
||||||
|
// // Detached comment for corge paragraph 2.
|
||||||
|
//
|
||||||
|
// optional string corge = 5;
|
||||||
|
// /* Block comment attached
|
||||||
|
// * to corge. Leading asterisks
|
||||||
|
// * will be removed. */
|
||||||
|
// /* Block comment attached to
|
||||||
|
// * grault. */
|
||||||
|
// optional int32 grault = 6;
|
||||||
|
//
|
||||||
|
// // ignored detached comments.
|
||||||
|
optional string leading_comments = 3;
|
||||||
|
optional string trailing_comments = 4;
|
||||||
|
repeated string leading_detached_comments = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Describes the relationship between generated code and its original source
|
||||||
|
// file. A GeneratedCodeInfo message is associated with only one generated
|
||||||
|
// source file, but may contain references to different source .proto files.
|
||||||
|
message GeneratedCodeInfo {
|
||||||
|
// An Annotation connects some span of text in generated code to an element
|
||||||
|
// of its generating .proto file.
|
||||||
|
repeated Annotation annotation = 1;
|
||||||
|
message Annotation {
|
||||||
|
// Identifies the element in the original source .proto file. This field
|
||||||
|
// is formatted the same as SourceCodeInfo.Location.path.
|
||||||
|
repeated int32 path = 1 [packed = true];
|
||||||
|
|
||||||
|
// Identifies the filesystem path to the original source .proto.
|
||||||
|
optional string source_file = 2;
|
||||||
|
|
||||||
|
// Identifies the starting offset in bytes in the generated code
|
||||||
|
// that relates to the identified object.
|
||||||
|
optional int32 begin = 3;
|
||||||
|
|
||||||
|
// Identifies the ending offset in bytes in the generated code that
|
||||||
|
// relates to the identified offset. The end offset should be one past
|
||||||
|
// the last relevant byte (so the length of the text = end - begin).
|
||||||
|
optional int32 end = 4;
|
||||||
|
}
|
||||||
|
}
|
80
pb/validator.proto
Normal file
80
pb/validator.proto
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// Copyright 2016 Michal Witkowski. All Rights Reserved.
|
||||||
|
// See LICENSE for licensing terms.
|
||||||
|
|
||||||
|
// Protocol Buffers extensions for defining auto-generateable validators for messages.
|
||||||
|
|
||||||
|
// TODO(mwitkow): Add example.
|
||||||
|
|
||||||
|
|
||||||
|
syntax = "proto2";
|
||||||
|
package validator;
|
||||||
|
|
||||||
|
import "pb/descriptor.proto";
|
||||||
|
|
||||||
|
option go_package = "github.com/mwitkow/go-proto-validators;validator";
|
||||||
|
|
||||||
|
// TODO(mwitkow): Email protobuf-global-extension-registry@google.com to get an extension ID.
|
||||||
|
|
||||||
|
extend google.protobuf.FieldOptions {
|
||||||
|
optional FieldValidator field = 65020;
|
||||||
|
}
|
||||||
|
|
||||||
|
extend google.protobuf.OneofOptions {
|
||||||
|
optional OneofValidator oneof = 65021;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FieldValidator {
|
||||||
|
// Uses a Golang RE2-syntax regex to match the field contents.
|
||||||
|
optional string regex = 1;
|
||||||
|
// Field value of integer strictly greater than this value.
|
||||||
|
optional int64 int_gt = 2;
|
||||||
|
// Field value of integer strictly smaller than this value.
|
||||||
|
optional int64 int_lt = 3;
|
||||||
|
// Used for nested message types, requires that the message type exists.
|
||||||
|
optional bool msg_exists = 4;
|
||||||
|
// Human error specifies a user-customizable error that is visible to the user.
|
||||||
|
optional string human_error = 5;
|
||||||
|
// Field value of double strictly greater than this value.
|
||||||
|
// Note that this value can only take on a valid floating point
|
||||||
|
// value. Use together with float_epsilon if you need something more specific.
|
||||||
|
optional double float_gt = 6;
|
||||||
|
// Field value of double strictly smaller than this value.
|
||||||
|
// Note that this value can only take on a valid floating point
|
||||||
|
// value. Use together with float_epsilon if you need something more specific.
|
||||||
|
optional double float_lt = 7;
|
||||||
|
// Field value of double describing the epsilon within which
|
||||||
|
// any comparison should be considered to be true. For example,
|
||||||
|
// when using float_gt = 0.35, using a float_epsilon of 0.05
|
||||||
|
// would mean that any value above 0.30 is acceptable. It can be
|
||||||
|
// thought of as a {float_value_condition} +- {float_epsilon}.
|
||||||
|
// If unset, no correction for floating point inaccuracies in
|
||||||
|
// comparisons will be attempted.
|
||||||
|
optional double float_epsilon = 8;
|
||||||
|
// Floating-point value compared to which the field content should be greater or equal.
|
||||||
|
optional double float_gte = 9;
|
||||||
|
// Floating-point value compared to which the field content should be smaller or equal.
|
||||||
|
optional double float_lte = 10;
|
||||||
|
// Used for string fields, requires the string to be not empty (i.e different from "").
|
||||||
|
optional bool string_not_empty = 11;
|
||||||
|
// Repeated field with at least this number of elements.
|
||||||
|
optional int64 repeated_count_min = 12;
|
||||||
|
// Repeated field with at most this number of elements.
|
||||||
|
optional int64 repeated_count_max = 13;
|
||||||
|
// Field value of length greater than this value.
|
||||||
|
optional int64 length_gt = 14;
|
||||||
|
// Field value of length smaller than this value.
|
||||||
|
optional int64 length_lt = 15;
|
||||||
|
// Field value of length strictly equal to this value.
|
||||||
|
optional int64 length_eq = 16;
|
||||||
|
// Requires that the value is in the enum.
|
||||||
|
optional bool is_in_enum = 17;
|
||||||
|
// Ensures that a string value is in UUID format.
|
||||||
|
// uuid_ver specifies the valid UUID versions. Valid values are: 0-5.
|
||||||
|
// If uuid_ver is 0 all UUID versions are accepted.
|
||||||
|
optional int32 uuid_ver = 18;
|
||||||
|
}
|
||||||
|
|
||||||
|
message OneofValidator {
|
||||||
|
// Require that one of the oneof fields is set.
|
||||||
|
optional bool required = 1;
|
||||||
|
}
|
20
pkg/amqp/rabbitmq.go
Normal file
20
pkg/amqp/rabbitmq.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package amqp
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/google/wire"
|
||||||
|
"github.com/streadway/amqp"
|
||||||
|
)
|
||||||
|
|
||||||
|
var RabbitMqConn *amqp.Connection
|
||||||
|
|
||||||
|
var Provider = wire.NewSet(NewRabbitMq)
|
||||||
|
|
||||||
|
func NewRabbitMq() *amqp.Connection {
|
||||||
|
//var err error
|
||||||
|
// 创建连接
|
||||||
|
/*RabbitMqConn, err = amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s:%d/%s", appConfig.Data.RabbitMq.User, appConfig.Data.RabbitMq.Password, appConfig.Data.RabbitMq.Host, appConfig.Data.RabbitMq.Port, appConfig.Data.RabbitMq.Vhost))
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("failed to connect RabbitMQ: %v", err)
|
||||||
|
}*/
|
||||||
|
return RabbitMqConn
|
||||||
|
}
|
20
pkg/ant/ant.go
Normal file
20
pkg/ant/ant.go
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
package ant
|
||||||
|
|
||||||
|
import (
|
||||||
|
dciConfig "chain-dci/config"
|
||||||
|
"github.com/google/wire"
|
||||||
|
antCloud "github.com/huyi-cn/antcloud-golang-sdk"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Provider = wire.NewSet(NewAntClient)
|
||||||
|
|
||||||
|
func NewAntClient() *antCloud.Client {
|
||||||
|
// Endpoint 请参考 https://api.aliyun.com/product/rtc
|
||||||
|
//bccrConfig := new(bccrClient.Config)
|
||||||
|
//bccrConfig.SetEndpoint(dciConfig.Data.Dci.EndPoint)
|
||||||
|
//bccrConfig.SetAccessKeyId(dciConfig.Data.Dci.AccessKey)
|
||||||
|
//bccrConfig.SetAccessKeySecret(dciConfig.Data.Dci.AccessKeySecret)
|
||||||
|
|
||||||
|
client := antCloud.NewClient(dciConfig.Data.AntCloud.EndPoint, dciConfig.Data.AntCloud.AccessKey, dciConfig.Data.AntCloud.AccessKeySecret, nil)
|
||||||
|
return client
|
||||||
|
}
|
21
pkg/app/app.go
Normal file
21
pkg/app/app.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package app
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pkg/tracing"
|
||||||
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
||||||
|
"github.com/bwmarrin/snowflake"
|
||||||
|
antCloud "github.com/huyi-cn/antcloud-golang-sdk"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
var ModuleClients *App
|
||||||
|
|
||||||
|
type App struct {
|
||||||
|
Lg *zap.Logger
|
||||||
|
//RedisClient *redis.Client
|
||||||
|
JaegerTracer *tracing.JaegerProvider
|
||||||
|
//DbMeeting *gorm.DB
|
||||||
|
SfNode *snowflake.Node
|
||||||
|
AntClient *antCloud.Client
|
||||||
|
BccrClient *bccrClient.Client
|
||||||
|
}
|
25
pkg/bccr/bccr.go
Normal file
25
pkg/bccr/bccr.go
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package bccr
|
||||||
|
|
||||||
|
import (
|
||||||
|
dciConfig "chain-dci/config"
|
||||||
|
bccrClient "github.com/antchain-openapi-sdk-go/bccr/client"
|
||||||
|
"github.com/google/wire"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Provider = wire.NewSet(NewBccrClient)
|
||||||
|
|
||||||
|
func NewBccrClient() *bccrClient.Client {
|
||||||
|
// Endpoint 请参考 https://api.aliyun.com/product/rtc
|
||||||
|
|
||||||
|
bccrConfig := new(bccrClient.Config)
|
||||||
|
bccrConfig.SetEndpoint(dciConfig.Data.Bccr.EndPoint)
|
||||||
|
bccrConfig.SetAccessKeyId(dciConfig.Data.Bccr.AccessKeyID)
|
||||||
|
bccrConfig.SetAccessKeySecret(dciConfig.Data.Bccr.AccessKeySecret)
|
||||||
|
|
||||||
|
client, err := bccrClient.NewClient(bccrConfig)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return client
|
||||||
|
}
|
||||||
|
|
27
pkg/cache/redis.go
vendored
Normal file
27
pkg/cache/redis.go
vendored
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package cache
|
||||||
|
|
||||||
|
import (
|
||||||
|
dciConfig "chain-dci/config"
|
||||||
|
"github.com/dubbogo/gost/log/logger"
|
||||||
|
"github.com/go-redis/redis"
|
||||||
|
"github.com/google/wire"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
var RedisProvider = wire.NewSet(NewRedis)
|
||||||
|
|
||||||
|
// TODO 添加连接池
|
||||||
|
func NewRedis() *redis.Client {
|
||||||
|
redisDb, _ := strconv.Atoi(dciConfig.Data.Redis.DB)
|
||||||
|
RedisClient := redis.NewClient(&redis.Options{
|
||||||
|
Addr: dciConfig.Data.Redis.Addr,
|
||||||
|
Password: dciConfig.Data.Redis.Password,
|
||||||
|
DB: redisDb,
|
||||||
|
})
|
||||||
|
_, err := RedisClient.Ping().Result()
|
||||||
|
if err != nil {
|
||||||
|
logger.Errorf("connRedis err", err)
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return RedisClient
|
||||||
|
}
|
18
pkg/db/chainDci.go
Normal file
18
pkg/db/chainDci.go
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
dciConfig "chain-dci/config"
|
||||||
|
"github.com/google/wire"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var MeetingProvider = wire.NewSet(NewDci)
|
||||||
|
|
||||||
|
func NewDci() *gorm.DB {
|
||||||
|
connOaMeeting := strings.Join([]string{dciConfig.Data.ChainDci.User, ":", dciConfig.Data.ChainDci.Password,
|
||||||
|
"@tcp(", dciConfig.Data.ChainDci.Host, ":", dciConfig.Data.ChainDci.Port, ")/",
|
||||||
|
dciConfig.Data.ChainDci.DbName, "?charset=utf8mb4&parseTime=true"}, "")
|
||||||
|
DbOaMeeting := loadMysqlConn(connOaMeeting)
|
||||||
|
return DbOaMeeting
|
||||||
|
}
|
51
pkg/db/mysql.go
Normal file
51
pkg/db/mysql.go
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
"gorm.io/driver/mysql"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/logger"
|
||||||
|
"gorm.io/gorm/schema"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func loadMysqlConn(conn string) *gorm.DB {
|
||||||
|
var ormLogger logger.Interface
|
||||||
|
if gin.Mode() == "debug" {
|
||||||
|
ormLogger = logger.Default.LogMode(logger.Info)
|
||||||
|
} else {
|
||||||
|
ormLogger = logger.Default
|
||||||
|
}
|
||||||
|
db, err := gorm.Open(mysql.New(mysql.Config{
|
||||||
|
DSN: conn, // DSN data source name
|
||||||
|
DefaultStringSize: 256, // string 类型字段的默认长度
|
||||||
|
DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
|
||||||
|
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
|
||||||
|
DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
|
||||||
|
SkipInitializeWithVersion: false, // 根据版本自动配置
|
||||||
|
}), &gorm.Config{
|
||||||
|
Logger: ormLogger,
|
||||||
|
NamingStrategy: schema.NamingStrategy{
|
||||||
|
SingularTable: true,
|
||||||
|
},
|
||||||
|
DisableForeignKeyConstraintWhenMigrating: true,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
sqlDB, _ := db.DB()
|
||||||
|
sqlDB.SetMaxIdleConns(20) //设置连接池,空闲
|
||||||
|
sqlDB.SetMaxOpenConns(100) //打开
|
||||||
|
sqlDB.SetConnMaxLifetime(time.Second * 30)
|
||||||
|
return db
|
||||||
|
}
|
||||||
|
|
||||||
|
func DBMigration() {
|
||||||
|
//addColumn(&model_account.Users{}, "action_code")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func addColumn(dst interface{}, column string) {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
28
pkg/err/common.go
Normal file
28
pkg/err/common.go
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
package err
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
func ReturnError(err error, msg, print string) error {
|
||||||
|
if err != nil {
|
||||||
|
field := zap.Field{}
|
||||||
|
field.String = err.Error()
|
||||||
|
app.ModuleClients.Lg.Error(print, field)
|
||||||
|
fmt.Printf(print+"%+v\n", err)
|
||||||
|
return errors.New(msg)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NoReturnError(err error, print string) {
|
||||||
|
if err != nil {
|
||||||
|
field := zap.Field{}
|
||||||
|
field.String = err.Error()
|
||||||
|
app.ModuleClients.Lg.Error(print, field)
|
||||||
|
fmt.Printf(print+"%+v\n", err)
|
||||||
|
}
|
||||||
|
}
|
7
pkg/init/start.go
Normal file
7
pkg/init/start.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package common
|
||||||
|
|
||||||
|
import "chain-dci/pkg/db"
|
||||||
|
|
||||||
|
func Init() {
|
||||||
|
db.DBMigration()
|
||||||
|
}
|
63
pkg/logger/zap_logger.go
Normal file
63
pkg/logger/zap_logger.go
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
package logger
|
||||||
|
|
||||||
|
import (
|
||||||
|
dciConfig "chain-dci/config"
|
||||||
|
"github.com/google/wire"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/natefinch/lumberjack"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"go.uber.org/zap/zapcore"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Provider = wire.NewSet(ZapInit)
|
||||||
|
|
||||||
|
// ZapInit 初始化lg
|
||||||
|
func ZapInit() *zap.Logger {
|
||||||
|
var err error
|
||||||
|
maxSize, _ := strconv.Atoi(dciConfig.Data.ZapLog.MaxSize)
|
||||||
|
maxAge, _ := strconv.Atoi(dciConfig.Data.ZapLog.MaxAge)
|
||||||
|
maxBackups, _ := strconv.Atoi(dciConfig.Data.ZapLog.MaxAge)
|
||||||
|
writeSyncer := getLogWriter(dciConfig.Data.ZapLog.Filename, maxSize, maxBackups, maxAge)
|
||||||
|
encoder := getEncoder()
|
||||||
|
var l = new(zapcore.Level)
|
||||||
|
err = l.UnmarshalText([]byte(dciConfig.Data.ZapLog.Level))
|
||||||
|
if err != nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
var core zapcore.Core
|
||||||
|
if dciConfig.Data.System.Mode == "dev" {
|
||||||
|
// 进入开发模式,日志输出到终端
|
||||||
|
consoleEncoder := zapcore.NewConsoleEncoder(zap.NewDevelopmentEncoderConfig())
|
||||||
|
core = zapcore.NewTee(
|
||||||
|
zapcore.NewCore(encoder, writeSyncer, l),
|
||||||
|
zapcore.NewCore(consoleEncoder, zapcore.Lock(os.Stdout), zapcore.DebugLevel),
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
core = zapcore.NewCore(encoder, writeSyncer, l)
|
||||||
|
}
|
||||||
|
lg := zap.New(core, zap.AddCaller())
|
||||||
|
zap.ReplaceGlobals(lg)
|
||||||
|
return lg
|
||||||
|
}
|
||||||
|
|
||||||
|
func getEncoder() zapcore.Encoder {
|
||||||
|
encoderConfig := zap.NewProductionEncoderConfig()
|
||||||
|
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
||||||
|
encoderConfig.TimeKey = "time"
|
||||||
|
encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder
|
||||||
|
encoderConfig.EncodeDuration = zapcore.SecondsDurationEncoder
|
||||||
|
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
||||||
|
return zapcore.NewJSONEncoder(encoderConfig)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getLogWriter(filename string, maxSize, maxBackup, maxAge int) zapcore.WriteSyncer {
|
||||||
|
lumberJackLogger := &lumberjack.Logger{
|
||||||
|
Filename: filename,
|
||||||
|
MaxSize: maxSize,
|
||||||
|
MaxBackups: maxBackup,
|
||||||
|
MaxAge: maxAge,
|
||||||
|
}
|
||||||
|
return zapcore.AddSync(lumberJackLogger)
|
||||||
|
}
|
5
pkg/msg/dci_msg.go
Normal file
5
pkg/msg/dci_msg.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package msg
|
||||||
|
|
||||||
|
const (
|
||||||
|
ErrrFileIsEmpty = "未获取到相关文件"
|
||||||
|
)
|
35
pkg/msg/msg.go
Normal file
35
pkg/msg/msg.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package msg
|
||||||
|
|
||||||
|
const (
|
||||||
|
SERVER_CONFIG = "config.yaml"
|
||||||
|
SERVER_DUBBOGO_CONFIG = "dubbogo.yaml"
|
||||||
|
MODE_ENV = "MODE_ENV"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
Success = "操作成功"
|
||||||
|
Failed = "操作失败"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
Http = 200
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ErrorLogin = "账号或密码错误"
|
||||||
|
ErrorJSONParse = "json解析失败"
|
||||||
|
ErrorJSONMarshal = "json序列化失败"
|
||||||
|
ErrorForUpdate = "锁定错误"
|
||||||
|
ErrorInsert = "插入异常"
|
||||||
|
ErrorDelete = "删除异常"
|
||||||
|
ErrorUpdate = "更新异常"
|
||||||
|
ErrorSelect = "查询异常"
|
||||||
|
ErrorEmptyParam = "值为空"
|
||||||
|
ErrorCopierStruct = "拷贝结构体错误"
|
||||||
|
ErrorNoAction = "无需操作"
|
||||||
|
ErrorInvalidParam = "参数不合法"
|
||||||
|
ErrorNoData = "没有数据"
|
||||||
|
ErrorDatetime = "时间格式错误"
|
||||||
|
|
||||||
|
ErrorSha256Write = "sha256加密错误"
|
||||||
|
)
|
4
pkg/service/init.go
Normal file
4
pkg/service/init.go
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
package service
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
}
|
31
pkg/snowf/snowflake.go
Normal file
31
pkg/snowf/snowflake.go
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
package snowf
|
||||||
|
|
||||||
|
import (
|
||||||
|
dciConfig "chain-dci/config"
|
||||||
|
"chain-dci/pkg/app"
|
||||||
|
"github.com/bwmarrin/snowflake"
|
||||||
|
"github.com/google/wire"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Provider = wire.NewSet(NewSf)
|
||||||
|
|
||||||
|
func NewSf() *snowflake.Node {
|
||||||
|
var err error
|
||||||
|
var st time.Time
|
||||||
|
nodeNum, _ := strconv.Atoi(dciConfig.Data.SnowFlake.NodeNum)
|
||||||
|
st, err = time.Parse("2006-01-02", dciConfig.Data.SnowFlake.StartTime)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
snowflake.Epoch = st.UnixNano() / 1000000
|
||||||
|
node, errS := snowflake.NewNode(int64(nodeNum))
|
||||||
|
if errS != nil {
|
||||||
|
panic(errS)
|
||||||
|
}
|
||||||
|
return node
|
||||||
|
}
|
||||||
|
func GenID() int64 {
|
||||||
|
return app.ModuleClients.SfNode.Generate().Int64()
|
||||||
|
}
|
51
pkg/tracing/jaeger.go
Normal file
51
pkg/tracing/jaeger.go
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
package tracing
|
||||||
|
|
||||||
|
import (
|
||||||
|
dciConfig "chain-dci/config"
|
||||||
|
"io"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/google/wire"
|
||||||
|
"github.com/opentracing/opentracing-go"
|
||||||
|
"github.com/uber/jaeger-client-go"
|
||||||
|
jaegerConfig "github.com/uber/jaeger-client-go/config"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
)
|
||||||
|
|
||||||
|
var Provider = wire.NewSet(NewTracing)
|
||||||
|
|
||||||
|
type JaegerProvider struct {
|
||||||
|
Tracer opentracing.Tracer
|
||||||
|
Closer io.Closer
|
||||||
|
}
|
||||||
|
|
||||||
|
//var JaegerPoint *JaegerProvider
|
||||||
|
|
||||||
|
func NewTracing() (jaegerProvider *JaegerProvider) {
|
||||||
|
if dciConfig.Data.Jaeger.Open != "true" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
jaegerProvider = &JaegerProvider{}
|
||||||
|
cfg := jaegerConfig.Configuration{
|
||||||
|
ServiceName: "oa-meeting",
|
||||||
|
Sampler: &jaegerConfig.SamplerConfig{
|
||||||
|
Type: jaeger.SamplerTypeRemote,
|
||||||
|
Param: 1,
|
||||||
|
},
|
||||||
|
Reporter: &jaegerConfig.ReporterConfig{
|
||||||
|
LocalAgentHostPort: dciConfig.Data.Jaeger.Addr,
|
||||||
|
LogSpans: true,
|
||||||
|
BufferFlushInterval: 5 * time.Second,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
nativeTracerIo, closerIo, err := cfg.NewTracer(jaegerConfig.Logger(jaeger.StdLogger))
|
||||||
|
if err != nil {
|
||||||
|
zap.L().Error("nativeTracer err", zap.Error(err))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
opentracing.SetGlobalTracer(nativeTracerIo)
|
||||||
|
jaegerProvider.Tracer = nativeTracerIo
|
||||||
|
jaegerProvider.Closer = closerIo
|
||||||
|
//JaegerPoint = jaegerProvider
|
||||||
|
return
|
||||||
|
}
|
73
pkg/utils/http.go
Normal file
73
pkg/utils/http.go
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Post(url string, jsonStr []byte) (statusCode int, result string) {
|
||||||
|
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
statusCode = resp.StatusCode
|
||||||
|
body, _ := ioutil.ReadAll(resp.Body)
|
||||||
|
fmt.Println("post url:", url)
|
||||||
|
fmt.Println("response Headers:", resp.Header)
|
||||||
|
fmt.Println("response Body:", string(body))
|
||||||
|
result = string(body)
|
||||||
|
zap.L().Info("post", zap.Any("url", url), zap.Any("jsonStr", jsonStr), zap.Any("result", result))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func Get(url string) (statusCode int, result string) {
|
||||||
|
resp, err := http.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
statusCode = resp.StatusCode
|
||||||
|
fmt.Println("response StatusCode:", resp.StatusCode)
|
||||||
|
fmt.Println("response Status:", resp.Status)
|
||||||
|
fmt.Println("response Headers:", resp.Header)
|
||||||
|
body, _ := ioutil.ReadAll(resp.Body)
|
||||||
|
result = string(body)
|
||||||
|
fmt.Println("response Body:", string(body))
|
||||||
|
zap.L().Info("Get", zap.Any("url", url), zap.Any("result", result))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func PutFromFileUrlWithStream(url, fileName, fileUrl string) (statusCode int, result string) {
|
||||||
|
file, err := http.Get(fileUrl)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer file.Body.Close()
|
||||||
|
fileBody, _ := ioutil.ReadAll(file.Body)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("PUT", url, bytes.NewBuffer(fileBody))
|
||||||
|
req.Header.Set("Content-Type", "application/octet-stream")
|
||||||
|
req.Header.Set("x-oss-meta-rawfilename", base64.URLEncoding.EncodeToString([]byte(fileName)))
|
||||||
|
client := &http.Client{}
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
statusCode = resp.StatusCode
|
||||||
|
body, _ := ioutil.ReadAll(resp.Body)
|
||||||
|
result = string(body)
|
||||||
|
fmt.Println("put url:", url)
|
||||||
|
fmt.Println("response Headers:", resp.Header)
|
||||||
|
fmt.Println("response Body:", string(body))
|
||||||
|
zap.L().Info("post", zap.Any("url", url), zap.Any("jsonStr", bytes.NewBuffer(fileBody).String()), zap.Any("result", result))
|
||||||
|
return
|
||||||
|
}
|
11
pkg/utils/msg.go
Normal file
11
pkg/utils/msg.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import "strings"
|
||||||
|
import "errors"
|
||||||
|
|
||||||
|
func SubstrError(err error) (sErr error) {
|
||||||
|
start := strings.Index(err.Error(), ":")
|
||||||
|
msg := err.Error()[start+2:]
|
||||||
|
sErr = errors.New(msg)
|
||||||
|
return
|
||||||
|
}
|
50
pkg/utils/time.go
Normal file
50
pkg/utils/time.go
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"chain-dci/pkg/msg"
|
||||||
|
"errors"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DateTimeFormat = "2006-01-02 15:04:05"
|
||||||
|
DateFormat = "2006-01-02"
|
||||||
|
DateFormatYmdHisDot = "2006.01.02 15:04"
|
||||||
|
DateFormatMonth = "2006年01月02日 15:04"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DatetimeToTimes(datetime string, dateFormat string) (times int32, err error) {
|
||||||
|
if datetime == "" {
|
||||||
|
times = 0
|
||||||
|
return
|
||||||
|
}
|
||||||
|
loc, _ := time.LoadLocation("Asia/Shanghai")
|
||||||
|
t, err := time.ParseInLocation(dateFormat, datetime, loc)
|
||||||
|
if err != nil {
|
||||||
|
zap.L().Error("DatetimeToTimes err:"+datetime+":", zap.Error(err))
|
||||||
|
err = errors.New(msg.ErrorDatetime)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
times = int32(t.Unix())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func TimesToDatetime(times int32, format string) string {
|
||||||
|
if times == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
t := time.Unix(int64(times), 0)
|
||||||
|
if format == "" {
|
||||||
|
format = DateTimeFormat
|
||||||
|
}
|
||||||
|
return t.Format(format)
|
||||||
|
}
|
||||||
|
|
||||||
|
func MonthInfo() (startTime int64, endTime int64) {
|
||||||
|
timeNow := time.Now()
|
||||||
|
timeToday := time.Date(timeNow.Year(), timeNow.Month(), timeNow.Day(), 0, 0, 0, 0, timeNow.Location()) // 获取当天0点时间 time类型
|
||||||
|
startTime = timeToday.AddDate(0, 0, -timeToday.Day()+1).Unix() // 获取本月第一天0点 时间戳类型
|
||||||
|
endTime = timeToday.AddDate(0, 1, -timeToday.Day()+1).Unix()
|
||||||
|
return
|
||||||
|
}
|
0
runtime/.gitkeep
Normal file
0
runtime/.gitkeep
Normal file
24
runtime/logs/chain-dci.log
Normal file
24
runtime/logs/chain-dci.log
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T13:55:30.971+0800","caller":"config/root_config.go:131","message":"[Config Center] Config center doesn't start"}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T13:57:24.898+0800","caller":"config/root_config.go:131","message":"[Config Center] Config center doesn't start"}
|
||||||
|
{"level":"\u001b[33mWARN\u001b[0m","time":"2023-11-17T13:57:24.900+0800","caller":"common/rpc_service.go:373","message":"method Resume of mtype func(*health.DubbogoHealthServer) has wrong number of in out parameters 0; needs exactly 1/2"}
|
||||||
|
{"level":"\u001b[33mWARN\u001b[0m","time":"2023-11-17T13:57:24.900+0800","caller":"common/rpc_service.go:373","message":"method SetServingStatus of mtype func(*health.DubbogoHealthServer, string, triple_health_v1.HealthCheckResponse_ServingStatus) has wrong number of in out parameters 0; needs exactly 1/2"}
|
||||||
|
{"level":"\u001b[33mWARN\u001b[0m","time":"2023-11-17T13:57:24.900+0800","caller":"common/rpc_service.go:373","message":"method Shutdown of mtype func(*health.DubbogoHealthServer) has wrong number of in out parameters 0; needs exactly 1/2"}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T13:57:24.900+0800","caller":"dubbo3/dubbo3_protocol.go:82","message":"[Triple Protocol] Export service: tri://:20201/grpc.health.v1.Health?accesslog=&app.version=&application=dubbo.io&auth=&bean.name=DubbogoHealthServer&cluster=failover&config.tracing=&environment=&execute.limit=&execute.limit.rejected.handler=&export=true&interface=grpc.health.v1.Health&loadbalance=random&message_size=4&metadata-type=local&module=sample&name=dubbo.io&organization=dubbo-go&owner=dubbo-go¶m.sign=&pid=8424®istry.role=3&release=dubbo-golang-3.0.4&retries=&serialization=&service.filter=tracing&side=provider×tamp=1700200644&tps.limit.interval=&tps.limit.rate=&tps.limit.rejected.handler=&tps.limit.strategy=&tps.limiter=&warmup="}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T13:57:24.901+0800","caller":"dubbo3/dubbo3_protocol.go:82","message":"[Triple Protocol] Export service: tri://:20201/grpc.reflection.v1alpha.ServerReflection?accesslog=&app.version=&application=dubbo.io&auth=&bean.name=DubbogoServerReflectionServer&cluster=failover&config.tracing=&environment=&execute.limit=&execute.limit.rejected.handler=&export=true&interface=grpc.reflection.v1alpha.ServerReflection&loadbalance=random&message_size=4&metadata-type=local&module=sample&name=dubbo.io&organization=dubbo-go&owner=dubbo-go¶m.sign=&pid=8424®istry.role=3&release=dubbo-golang-3.0.4&retries=&serialization=&service.filter=tracing&side=provider×tamp=1700200644&tps.limit.interval=&tps.limit.rate=&tps.limit.rejected.handler=&tps.limit.strategy=&tps.limiter=&warmup="}
|
||||||
|
{"level":"\u001b[33mWARN\u001b[0m","time":"2023-11-17T13:57:24.901+0800","caller":"config/provider_config.go:167","message":"Dubbogo can not find service with registeredTypeName DciProvider in configuration. Use the default configuration instead."}
|
||||||
|
{"level":"\u001b[31mERROR\u001b[0m","time":"2023-11-17T13:57:24.901+0800","caller":"config/provider_config.go:171","message":"Dubbogo do not read service interface name with registeredTypeName = DciProvider.Please run go install github.com/dubbogo/dubbogo-cli/cmd/protoc-gen-go-triple@latest to update your protoc-gen-go-triple and re-generate your pb file again.If you are not using pb serialization, please set 'interface' field in service config."}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T13:57:24.902+0800","caller":"dubbo/dubbo_protocol.go:84","message":"[DUBBO Protocol] Export service: dubbo://:51211/org.apache.dubbo.metadata.MetadataService?accesslog=&app.version=&application=dubbo.io&auth=&bean.name=MetadataService&cluster=&config.tracing=&environment=&execute.limit=&execute.limit.rejected.handler=&export=true&group=dubbo.io&interface=org.apache.dubbo.metadata.MetadataService&loadbalance=&message_size=0&metadata-type=local&module=sample&name=dubbo.io&organization=dubbo-go&owner=dubbo-go¶m.sign=&pid=8424®istry.role=3&release=dubbo-golang-3.0.4&retries=&serialization=&service.filter=echo%2Cmetrics%2Ctoken%2Caccesslog%2Ctps%2Cgeneric_service%2Cexecute%2Cpshutdown&side=provider×tamp=1700200644&tps.limit.interval=&tps.limit.rate=&tps.limit.rejected.handler=&tps.limit.strategy=&tps.limiter=&version=1.0.0&warmup="}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T13:57:24.902+0800","caller":"configurable/exporter.go:80","message":"[Metadata Service] The MetadataService exports urls : [dubbo://:51211/org.apache.dubbo.metadata.MetadataService?accesslog=&app.version=&application=dubbo.io&auth=&bean.name=MetadataService&cluster=&config.tracing=&environment=&execute.limit=&execute.limit.rejected.handler=&export=true&group=dubbo.io&interface=org.apache.dubbo.metadata.MetadataService&loadbalance=&message_size=0&metadata-type=local&module=sample&name=dubbo.io&organization=dubbo-go&owner=dubbo-go¶m.sign=&pid=8424®istry.role=3&release=dubbo-golang-3.0.4&retries=&serialization=&service.filter=echo%2Cmetrics%2Ctoken%2Caccesslog%2Ctps%2Cgeneric_service%2Cexecute%2Cpshutdown&side=provider×tamp=1700200644&tps.limit.interval=&tps.limit.rate=&tps.limit.rejected.handler=&tps.limit.strategy=&tps.limiter=&version=1.0.0&warmup=] "}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:54.252+0800","caller":"config/graceful_shutdown.go:81","message":"get signal terminated, applicationConfig will shutdown."}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:54.252+0800","caller":"config/graceful_shutdown.go:121","message":"Graceful shutdown --- Destroy all registriesConfig. "}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:54.252+0800","caller":"config/graceful_shutdown.go:162","message":"Graceful shutdown --- Keep waiting and accept new requests for a short time. "}
|
||||||
|
{"level":"\u001b[31mERROR\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"config/graceful_shutdown_config.go:110","message":"The OfflineRequestWindowTimeout configuration is invalid: , and we will use the default value: 3s, err: time: invalid duration \"\""}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"config/graceful_shutdown.go:196","message":"Graceful shutdown --- Keep waiting until sending/accepting requests finish or timeout. "}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"config/graceful_shutdown.go:129","message":"Graceful shutdown --- Destroy protocols. "}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"config/graceful_shutdown.go:144","message":"Graceful shutdown --- First destroy provider's protocols. "}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"protocol/protocol.go:142","message":"Exporter unexport."}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"protocol/invoker.go:92","message":"Destroy invoker: tri://:20201/grpc.health.v1.Health?accesslog=&app.version=&application=dubbo.io&auth=&bean.name=DubbogoHealthServer&cluster=failover&config.tracing=&environment=&execute.limit=&execute.limit.rejected.handler=&export=true&interface=grpc.health.v1.Health&loadbalance=random&message_size=4&metadata-type=local&module=sample&name=dubbo.io&organization=dubbo-go&owner=dubbo-go¶m.sign=&pid=8424®istry.role=3&release=dubbo-golang-3.0.4&retries=&serialization=&service.filter=tracing&side=provider×tamp=1700200644&tps.limit.interval=&tps.limit.rate=&tps.limit.rejected.handler=&tps.limit.strategy=&tps.limiter=&warmup="}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"protocol/protocol.go:142","message":"Exporter unexport."}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"protocol/invoker.go:92","message":"Destroy invoker: tri://:20201/grpc.reflection.v1alpha.ServerReflection?accesslog=&app.version=&application=dubbo.io&auth=&bean.name=DubbogoServerReflectionServer&cluster=failover&config.tracing=&environment=&execute.limit=&execute.limit.rejected.handler=&export=true&interface=grpc.reflection.v1alpha.ServerReflection&loadbalance=random&message_size=4&metadata-type=local&module=sample&name=dubbo.io&organization=dubbo-go&owner=dubbo-go¶m.sign=&pid=8424®istry.role=3&release=dubbo-golang-3.0.4&retries=&serialization=&service.filter=tracing&side=provider×tamp=1700200644&tps.limit.interval=&tps.limit.rate=&tps.limit.rejected.handler=&tps.limit.strategy=&tps.limiter=&warmup="}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.256+0800","caller":"config/graceful_shutdown.go:155","message":"Graceful shutdown --- Second Destroy consumer's protocols. "}
|
||||||
|
{"level":"\u001b[34mINFO\u001b[0m","time":"2023-11-17T14:44:57.257+0800","caller":"config/graceful_shutdown.go:113","message":"Graceful shutdown --- Execute the custom callbacks."}
|
Loading…
Reference in New Issue
Block a user