Commit 58b5def0 authored by liuyuhang's avatar liuyuhang Committed by 33cn

add proposal board

parent af694733
......@@ -8,6 +8,7 @@ import (
"github.com/33cn/chain33/system/dapp"
"github.com/33cn/chain33/types"
auty "github.com/33cn/plugin/plugin/dapp/autonomy/types"
"fmt"
)
func (a *Autonomy) execLocalBoard(receiptData *types.ReceiptData) (*types.LocalDBSet, error) {
......@@ -25,7 +26,7 @@ func (a *Autonomy) execLocalBoard(receiptData *types.ReceiptData) (*types.LocalD
if err != nil {
return nil, err
}
kv := a.saveHeightIndex(&receipt)
kv := saveHeightIndex(&receipt)
set = append(set, kv...)
}
default:
......@@ -36,7 +37,7 @@ func (a *Autonomy) execLocalBoard(receiptData *types.ReceiptData) (*types.LocalD
return dbSet, nil
}
func (c *Autonomy) saveHeightIndex(res *auty.ReceiptProposalBoard) (kvs []*types.KeyValue) {
func saveHeightIndex(res *auty.ReceiptProposalBoard) (kvs []*types.KeyValue) {
// 先将之前的状态删除掉,再做更新
if res.Current.Status > 1 {
kv := &types.KeyValue{}
......@@ -67,7 +68,7 @@ func (a *Autonomy) execDelLocalBoard(receiptData *types.ReceiptData) (*types.Loc
if err != nil {
return nil, err
}
kv := a.delHeightIndex(&receipt)
kv := delHeightIndex(&receipt)
set = append(set, kv...)
}
default:
......@@ -78,7 +79,7 @@ func (a *Autonomy) execDelLocalBoard(receiptData *types.ReceiptData) (*types.Loc
return dbSet, nil
}
func (c *Autonomy) delHeightIndex(res *auty.ReceiptProposalBoard) (kvs []*types.KeyValue) {
func delHeightIndex(res *auty.ReceiptProposalBoard) (kvs []*types.KeyValue) {
kv := &types.KeyValue{}
kv.Key = calcBoardKey4StatusHeight(res.Current.Status, dapp.HeightIndexStr(res.Current.Height, int64(res.Current.Index)))
kv.Value = nil
......@@ -91,4 +92,45 @@ func (c *Autonomy) delHeightIndex(res *auty.ReceiptProposalBoard) (kvs []*types.
kvs = append(kvs, kv)
}
return kvs
}
// getProposalBoard
func (a *Autonomy) getProposalBoard(req *auty.ReqQueryProposalBoard) (types.Message, error) {
if req == nil {
return nil, types.ErrInvalidParam
}
var key []byte
var values [][]byte
var err error
localDb := a.GetLocalDB()
if req.GetIndex() == -1 {
key = nil
} else { //翻页查找指定的txhash列表
heightstr := genHeightIndexStr(req.GetIndex())
key = calcBoardKey4StatusHeight(req.Status, heightstr)
}
prefix := calcBoardKey4StatusHeight(req.Status, "")
values, err = localDb.List(prefix, key, req.Count, req.GetDirection())
if err != nil {
return nil, err
}
if len(values) == 0 {
return nil, types.ErrNotFound
}
var rep auty.ReplyQueryProposalBoard
for _, value := range values {
prop := &auty.AutonomyProposalBoard{}
err = types.Decode(value, prop)
if err != nil {
return nil, err
}
rep.ProBoards = append(rep.ProBoards, prop)
}
return &rep, nil
}
func genHeightIndexStr(index int64) string {
return fmt.Sprintf("%018d", index)
}
\ No newline at end of file
......@@ -5,14 +5,11 @@
package executor
import (
"time"
dbm "github.com/33cn/chain33/common/db"
"github.com/33cn/chain33/types"
auty "github.com/33cn/plugin/plugin/dapp/autonomy/types"
)
// Query_GetUnfreezeWithdraw 查询合约可提币量
func (u *Unfreeze) Query_GetUnfreezeWithdraw(in *types.ReqString) (types.Message, error) {
return QueryWithdraw(u.GetStateDB(), in.GetData())
func (a *Autonomy) Query_GetProposalBoard(in *auty.ReqQueryProposalBoard) (types.Message, error) {
return a.getProposalBoard(in)
}
\ No newline at end of file
......@@ -17,7 +17,7 @@ func init() {
Name: ptypes.PackageName,
ExecName: executor.GetName(),
Exec: executor.Init,
Cmd: commands.Cmd,
Cmd: commands.AutonomyCmd,
RPC: rpc.Init,
})
}
......@@ -31,10 +31,4 @@ message AutonomyAction {
TerminateProposalRule tmintPropRule = 12;
}
int32 ty = 13;
}
service autonomy {
rpc QueryProposalBoard(ReplyQueryProposalBoard) returns (ReplyProposalBoard) {}
rpc QueryProposalProject(ReplyQueryProposalProject) returns (ReplyProposalProject) {}
rpc QueryProposalRule(ReplyQueryProposalRule) returns (ReplyProposalRule) {}
}
\ No newline at end of file
......@@ -61,10 +61,14 @@ message LocalProposalBoard {
}
// query
message ReplyQueryProposalBoard {
string proposalID = 1;
message ReqQueryProposalBoard {
//优先根据status查询
int32 status = 1;
int32 count = 2;
int32 direction = 3;
int64 index = 4;
}
message ReplyProposalBoard {
repeated LocalProposalBoard propBoards = 1;
message ReplyQueryProposalBoard {
repeated AutonomyProposalBoard proBoards = 1;
}
\ No newline at end of file
......@@ -38,6 +38,19 @@ func (c *Jrpc) RevokeProposalBoardTx(parm *auty.RevokeProposalBoard, result *int
return nil
}
// VoteProposalBoardTx 投票提案董事会成员的RPC接口
func (c *Jrpc) VoteProposalBoardTx(parm *auty.VoteProposalBoard, result *interface{}) error {
if parm == nil {
return types.ErrInvalidParam
}
reply, err := c.cli.voteProposalBoard(context.Background(), parm)
if err != nil {
return err
}
*result = hex.EncodeToString(reply.Data)
return nil
}
// TerminateProposalBoardTx 终止提案董事会成员的RPC接口
func (c *Jrpc) TerminateProposalBoardTx(parm *auty.TerminateProposalBoard, result *interface{}) error {
if parm == nil {
......
......@@ -42,6 +42,21 @@ func (c *channelClient) revokeProposalBoard(ctx context.Context, head *auty.Revo
return &types.UnsignTx{Data: data}, nil
}
func (c *channelClient) voteProposalBoard(ctx context.Context, head *auty.VoteProposalBoard) (*types.UnsignTx, error) {
val := &auty.AutonomyAction{
Ty: auty.AutonomyActionVotePropBoard,
Value: &auty.AutonomyAction_VotePropBoard{VotePropBoard: head},
}
tx := &types.Transaction{
Payload: types.Encode(val),
}
data, err := types.FormatTxEncode(types.ExecName(auty.AutonomyX), tx)
if err != nil {
return nil, err
}
return &types.UnsignTx{Data: data}, nil
}
func (c *channelClient) terminateProposalBoard(ctx context.Context, head *auty.TerminateProposalBoard) (*types.UnsignTx, error) {
val := &auty.AutonomyAction{
Ty: auty.AutonomyActionTmintPropBoard,
......
This diff is collapsed.
......@@ -244,34 +244,59 @@ func (m *LocalProposalBoard) GetComments() []string {
}
// query
type ReplyQueryProposalBoard struct {
ProposalID string `protobuf:"bytes,1,opt,name=proposalID" json:"proposalID,omitempty"`
type ReqQueryProposalBoard struct {
// 优先根据status查询
Status int32 `protobuf:"varint,1,opt,name=status" json:"status,omitempty"`
Count int32 `protobuf:"varint,2,opt,name=count" json:"count,omitempty"`
Direction int32 `protobuf:"varint,3,opt,name=direction" json:"direction,omitempty"`
Index int64 `protobuf:"varint,4,opt,name=index" json:"index,omitempty"`
}
func (m *ReplyQueryProposalBoard) Reset() { *m = ReplyQueryProposalBoard{} }
func (m *ReplyQueryProposalBoard) String() string { return proto.CompactTextString(m) }
func (*ReplyQueryProposalBoard) ProtoMessage() {}
func (*ReplyQueryProposalBoard) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} }
func (m *ReqQueryProposalBoard) Reset() { *m = ReqQueryProposalBoard{} }
func (m *ReqQueryProposalBoard) String() string { return proto.CompactTextString(m) }
func (*ReqQueryProposalBoard) ProtoMessage() {}
func (*ReqQueryProposalBoard) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{7} }
func (m *ReplyQueryProposalBoard) GetProposalID() string {
func (m *ReqQueryProposalBoard) GetStatus() int32 {
if m != nil {
return m.ProposalID
return m.Status
}
return ""
return 0
}
type ReplyProposalBoard struct {
PropBoards []*LocalProposalBoard `protobuf:"bytes,1,rep,name=propBoards" json:"propBoards,omitempty"`
func (m *ReqQueryProposalBoard) GetCount() int32 {
if m != nil {
return m.Count
}
return 0
}
func (m *ReplyProposalBoard) Reset() { *m = ReplyProposalBoard{} }
func (m *ReplyProposalBoard) String() string { return proto.CompactTextString(m) }
func (*ReplyProposalBoard) ProtoMessage() {}
func (*ReplyProposalBoard) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} }
func (m *ReqQueryProposalBoard) GetDirection() int32 {
if m != nil {
return m.Direction
}
return 0
}
func (m *ReqQueryProposalBoard) GetIndex() int64 {
if m != nil {
return m.Index
}
return 0
}
type ReplyQueryProposalBoard struct {
ProBoards []*AutonomyProposalBoard `protobuf:"bytes,1,rep,name=proBoards" json:"proBoards,omitempty"`
}
func (m *ReplyQueryProposalBoard) Reset() { *m = ReplyQueryProposalBoard{} }
func (m *ReplyQueryProposalBoard) String() string { return proto.CompactTextString(m) }
func (*ReplyQueryProposalBoard) ProtoMessage() {}
func (*ReplyQueryProposalBoard) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{8} }
func (m *ReplyProposalBoard) GetPropBoards() []*LocalProposalBoard {
func (m *ReplyQueryProposalBoard) GetProBoards() []*AutonomyProposalBoard {
if m != nil {
return m.PropBoards
return m.ProBoards
}
return nil
}
......@@ -284,42 +309,44 @@ func init() {
proto.RegisterType((*TerminateProposalBoard)(nil), "types.TerminateProposalBoard")
proto.RegisterType((*ReceiptProposalBoard)(nil), "types.ReceiptProposalBoard")
proto.RegisterType((*LocalProposalBoard)(nil), "types.LocalProposalBoard")
proto.RegisterType((*ReqQueryProposalBoard)(nil), "types.ReqQueryProposalBoard")
proto.RegisterType((*ReplyQueryProposalBoard)(nil), "types.ReplyQueryProposalBoard")
proto.RegisterType((*ReplyProposalBoard)(nil), "types.ReplyProposalBoard")
}
func init() { proto.RegisterFile("board.proto", fileDescriptor1) }
var fileDescriptor1 = []byte{
// 467 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x5d, 0x8b, 0xd4, 0x30,
0x14, 0xa5, 0x76, 0xda, 0xd9, 0xb9, 0xc3, 0xca, 0x1a, 0xc7, 0xb5, 0x2e, 0x22, 0xa5, 0x88, 0x14,
0x1f, 0x06, 0x19, 0x3f, 0x70, 0x1f, 0x1d, 0x14, 0x14, 0x14, 0x35, 0x88, 0xef, 0xd9, 0xf6, 0xea,
0x0c, 0xdb, 0x36, 0x21, 0x49, 0x07, 0xfb, 0xe6, 0x5f, 0xf4, 0x57, 0xf8, 0x37, 0x24, 0xb7, 0x19,
0x9d, 0xba, 0x83, 0x38, 0x6f, 0x39, 0x37, 0xe7, 0x24, 0xe7, 0x26, 0xe7, 0xc2, 0xf4, 0x42, 0x0a,
0x5d, 0xce, 0x95, 0x96, 0x56, 0xb2, 0xc8, 0x76, 0x0a, 0xcd, 0xd9, 0x71, 0x55, 0xc8, 0xba, 0x96,
0x4d, 0x5f, 0xcd, 0x7e, 0x04, 0x70, 0xeb, 0x45, 0x6b, 0x65, 0x23, 0xeb, 0xee, 0x83, 0x96, 0x4a,
0x1a, 0x51, 0x2d, 0x9d, 0x8a, 0x2d, 0x60, 0xa2, 0xb4, 0x54, 0x04, 0x92, 0x20, 0x0d, 0xf2, 0xe9,
0x62, 0x36, 0xa7, 0x33, 0xe6, 0x03, 0x22, 0xff, 0x43, 0x63, 0xf7, 0x21, 0xd4, 0x68, 0x92, 0x6b,
0xc4, 0x66, 0x9e, 0xfd, 0x59, 0x5a, 0x34, 0x1c, 0x4d, 0x5b, 0x59, 0xee, 0xb6, 0xd9, 0x29, 0xc4,
0xc6, 0x0a, 0xdb, 0x9a, 0x24, 0x4c, 0x83, 0x3c, 0xe2, 0x1e, 0xb1, 0x04, 0xc6, 0xa2, 0x2c, 0x35,
0x1a, 0x93, 0x8c, 0xd2, 0x20, 0x9f, 0xf0, 0x2d, 0x74, 0x8a, 0x15, 0xae, 0xbf, 0xae, 0x6c, 0x12,
0xa5, 0x41, 0x1e, 0x72, 0x8f, 0xd8, 0x0c, 0xa2, 0x75, 0x53, 0xe2, 0xb7, 0x24, 0xa6, 0x83, 0x7a,
0x90, 0xfd, 0x0c, 0xe0, 0x78, 0xd8, 0x0b, 0x83, 0x51, 0x87, 0x42, 0x53, 0x1b, 0x11, 0xa7, 0xb5,
0xd3, 0xd6, 0xb2, 0xb1, 0x2b, 0x72, 0x1b, 0xf1, 0x1e, 0xb0, 0x13, 0x08, 0x4b, 0xd1, 0x79, 0x63,
0x6e, 0xe9, 0xee, 0xa6, 0x67, 0x74, 0xa6, 0xc2, 0x7c, 0xc2, 0x3d, 0x62, 0x0f, 0xe1, 0xc4, 0x58,
0xa1, 0xed, 0xb2, 0x92, 0xc5, 0xe5, 0xeb, 0x5d, 0x77, 0x57, 0xea, 0xec, 0x01, 0x5c, 0xc7, 0xa6,
0xdc, 0x65, 0xc6, 0xc4, 0xfc, 0xab, 0xca, 0xe6, 0xc0, 0x34, 0x8a, 0xea, 0xd5, 0x90, 0x3b, 0x26,
0xee, 0x9e, 0x9d, 0xec, 0x29, 0xdc, 0xe4, 0xb8, 0x91, 0x97, 0x38, 0x6c, 0xf7, 0x1e, 0x80, 0xf2,
0x85, 0x37, 0x2f, 0xa9, 0xe9, 0x09, 0xdf, 0xa9, 0x64, 0xef, 0xe0, 0x86, 0xfb, 0x94, 0x83, 0x44,
0xf4, 0x3b, 0x4a, 0x69, 0xb9, 0x41, 0x7a, 0xb1, 0x23, 0xbe, 0x85, 0xd9, 0x73, 0x38, 0xfd, 0x84,
0xba, 0x5e, 0x37, 0xe2, 0xc0, 0x33, 0xb3, 0xef, 0x01, 0xcc, 0x38, 0x16, 0xb8, 0x56, 0x76, 0x28,
0x7c, 0x04, 0x23, 0xa5, 0x71, 0xe3, 0x73, 0x77, 0xd7, 0x27, 0x69, 0x6f, 0x50, 0x39, 0x31, 0xd9,
0x33, 0x18, 0x17, 0xad, 0xd6, 0xd8, 0x58, 0x1f, 0xbf, 0x7f, 0x8b, 0xb6, 0xe4, 0xec, 0x0b, 0xb0,
0xb7, 0xb2, 0x10, 0xd5, 0xf0, 0xfe, 0x27, 0x10, 0x53, 0xaa, 0xcb, 0xff, 0x72, 0xe0, 0xb9, 0xec,
0x0c, 0x8e, 0xdc, 0x70, 0x61, 0x63, 0xdd, 0x0c, 0xb8, 0xb0, 0xfc, 0xc6, 0xd9, 0x39, 0xdc, 0xe6,
0xa8, 0xaa, 0xee, 0x63, 0x8b, 0xba, 0x3b, 0xec, 0x95, 0xde, 0x03, 0x23, 0xe9, 0x50, 0x75, 0xde,
0xab, 0x96, 0x7d, 0x36, 0x83, 0x34, 0xcc, 0xa7, 0x8b, 0x3b, 0xde, 0xe6, 0xd5, 0x8e, 0xf8, 0x0e,
0xf9, 0x22, 0xa6, 0xd9, 0x7f, 0xfc, 0x2b, 0x00, 0x00, 0xff, 0xff, 0x3b, 0xd3, 0xb7, 0x34, 0x20,
0x04, 0x00, 0x00,
// 498 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x5d, 0x8b, 0xd4, 0x30,
0x14, 0x25, 0x76, 0x3a, 0xb3, 0xbd, 0xcb, 0xca, 0x1a, 0x67, 0xd7, 0xb2, 0x2c, 0x52, 0x8a, 0x48,
0xf1, 0x61, 0x90, 0xf5, 0x03, 0xf1, 0xcd, 0x41, 0x41, 0x41, 0x41, 0x83, 0xfa, 0x9e, 0x6d, 0xaf,
0x4e, 0xd9, 0xb6, 0x89, 0x49, 0x3a, 0xd8, 0x37, 0xff, 0xa2, 0xbf, 0xc2, 0xbf, 0x21, 0x49, 0x33,
0x76, 0xba, 0x0e, 0xba, 0xfb, 0xd6, 0x73, 0x73, 0x6e, 0x72, 0x4f, 0x72, 0x4e, 0x61, 0xff, 0x5c,
0x70, 0x55, 0x2c, 0xa4, 0x12, 0x46, 0xd0, 0xd0, 0x74, 0x12, 0xf5, 0xc9, 0x41, 0x95, 0x8b, 0xba,
0x16, 0x4d, 0x5f, 0x4d, 0x7f, 0x12, 0x38, 0x7a, 0xd1, 0x1a, 0xd1, 0x88, 0xba, 0x7b, 0xaf, 0x84,
0x14, 0x9a, 0x57, 0x4b, 0xdb, 0x45, 0xcf, 0x20, 0x92, 0x4a, 0x48, 0x07, 0x62, 0x92, 0x90, 0x6c,
0xff, 0x6c, 0xbe, 0x70, 0x7b, 0x2c, 0x46, 0x44, 0x36, 0xd0, 0xe8, 0x3d, 0x08, 0x14, 0xea, 0xf8,
0x86, 0x63, 0x53, 0xcf, 0xfe, 0x2c, 0x0c, 0x6a, 0x86, 0xba, 0xad, 0x0c, 0xb3, 0xcb, 0xf4, 0x18,
0xa6, 0xda, 0x70, 0xd3, 0xea, 0x38, 0x48, 0x48, 0x16, 0x32, 0x8f, 0x68, 0x0c, 0x33, 0x5e, 0x14,
0x0a, 0xb5, 0x8e, 0x27, 0x09, 0xc9, 0x22, 0xb6, 0x81, 0xb6, 0x63, 0x85, 0xe5, 0xd7, 0x95, 0x89,
0xc3, 0x84, 0x64, 0x01, 0xf3, 0x88, 0xce, 0x21, 0x2c, 0x9b, 0x02, 0xbf, 0xc7, 0x53, 0xb7, 0x51,
0x0f, 0xd2, 0x5f, 0x04, 0x0e, 0xc6, 0x5a, 0x28, 0x4c, 0x3a, 0xe4, 0xca, 0xc9, 0x08, 0x99, 0xfb,
0xb6, 0xbd, 0xb5, 0x68, 0xcc, 0xca, 0x4d, 0x1b, 0xb2, 0x1e, 0xd0, 0x43, 0x08, 0x0a, 0xde, 0xf9,
0xc1, 0xec, 0xa7, 0x3d, 0xdb, 0x5d, 0xa3, 0x1d, 0x2a, 0xc8, 0x22, 0xe6, 0x11, 0x7d, 0x00, 0x87,
0xda, 0x70, 0x65, 0x96, 0x95, 0xc8, 0x2f, 0x5e, 0x6f, 0x4f, 0xf7, 0x57, 0x9d, 0xde, 0x87, 0x9b,
0xd8, 0x14, 0xdb, 0xcc, 0xa9, 0x63, 0x5e, 0xaa, 0xd2, 0x05, 0x50, 0x85, 0xbc, 0x7a, 0x35, 0xe6,
0xce, 0x1c, 0x77, 0xc7, 0x4a, 0xfa, 0x04, 0x6e, 0x33, 0x5c, 0x8b, 0x0b, 0x1c, 0xcb, 0xbd, 0x0b,
0x20, 0x7d, 0xe1, 0xcd, 0x4b, 0x27, 0x3a, 0x62, 0x5b, 0x95, 0xf4, 0x1d, 0xdc, 0xb2, 0x8f, 0x72,
0xad, 0x26, 0xf7, 0x3a, 0x52, 0x2a, 0xb1, 0x46, 0x77, 0x63, 0x7b, 0x6c, 0x03, 0xd3, 0x67, 0x70,
0xfc, 0x11, 0x55, 0x5d, 0x36, 0xfc, 0x9a, 0x7b, 0xa6, 0x3f, 0x08, 0xcc, 0x19, 0xe6, 0x58, 0x4a,
0x33, 0x6e, 0x7c, 0x08, 0x13, 0xa9, 0x70, 0xed, 0x7d, 0x77, 0xea, 0x9d, 0xb4, 0xd3, 0xa8, 0xcc,
0x31, 0xe9, 0x53, 0x98, 0xe5, 0xad, 0x52, 0xd8, 0x18, 0x6f, 0xbf, 0x7f, 0x37, 0x6d, 0xc8, 0xe9,
0x17, 0xa0, 0x6f, 0x45, 0xce, 0xab, 0xf1, 0xf9, 0x8f, 0x61, 0xea, 0x5c, 0x5d, 0x5c, 0x69, 0x02,
0xcf, 0xa5, 0x27, 0xb0, 0x67, 0xc3, 0x85, 0x8d, 0xb1, 0x19, 0xb0, 0x66, 0xf9, 0x83, 0xd3, 0x0e,
0x8e, 0x18, 0x7e, 0xfb, 0xd0, 0xa2, 0xba, 0x94, 0xb3, 0x21, 0x0d, 0x64, 0x94, 0x86, 0x39, 0x84,
0xb9, 0x68, 0xbd, 0x9c, 0x90, 0xf5, 0x80, 0x9e, 0x42, 0x54, 0x94, 0x0a, 0x73, 0x53, 0x8a, 0xc6,
0xbb, 0x74, 0x28, 0x0c, 0x79, 0x98, 0x38, 0xcb, 0xf8, 0x3c, 0x7c, 0x82, 0x3b, 0x0c, 0x65, 0xd5,
0xed, 0x38, 0xfc, 0xb9, 0x0b, 0xf9, 0xb2, 0xf7, 0x37, 0x49, 0x82, 0xff, 0x4a, 0x1d, 0xe8, 0xe7,
0x53, 0xf7, 0x07, 0x79, 0xf4, 0x3b, 0x00, 0x00, 0xff, 0xff, 0x83, 0xda, 0x5e, 0xb4, 0x66, 0x04,
0x00, 0x00,
}
......@@ -70,12 +70,15 @@ const (
)
const (
// FuncNameQueryProposalBoard 查询方法名
FuncNameQueryProposalBoard = "QueryProposalBoard"
FuncNameQueryProposalProject = "QueryProposalProject"
FuncNameQueryProposalRule = "QueryProposalRule"
// GetProposalBoard 用于在cmd里面的区分不同的查询
GetProposalBoard = "GetProposalBoard"
// GetProposalProject 用于在cmd里面的区分不同的查询
GetProposalProject = "GetProposalProject"
// GetProposalRule 用于在cmd里面的区分不同的查询
GetProposalRule = "GetProposalRule"
)
//包的名字可以通过配置文件来配置
//建议用github的组织名称,或者用户名字开头, 再加上自己的插件的名字
//如果发生重名,可以通过配置文件修改这些名字
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment