This commit is contained in:
commit
c7f95cb80b
|
@ -0,0 +1,51 @@
|
|||
# Kratos Project Template
|
||||
|
||||
## Install Kratos
|
||||
```
|
||||
go install github.com/go-kratos/kratos/cmd/kratos/v2@latest
|
||||
```
|
||||
## Create a service
|
||||
```
|
||||
# Create a template project
|
||||
kratos new server
|
||||
|
||||
cd server
|
||||
# Add a proto template
|
||||
kratos proto add api/server/server.proto
|
||||
# Generate the proto code
|
||||
kratos proto client api/server/server.proto
|
||||
# Generate the source code of service by proto file
|
||||
kratos proto server api/server/server.proto -t internal/service
|
||||
|
||||
go generate ./...
|
||||
go build -o ./bin/ ./...
|
||||
./bin/server -conf ./configs
|
||||
```
|
||||
## Generate other auxiliary files by Makefile
|
||||
```
|
||||
# Download and update dependencies
|
||||
make init
|
||||
# Generate API files (include: pb.go, http, grpc, validate, swagger) by proto file
|
||||
make api
|
||||
# Generate all files
|
||||
make all
|
||||
```
|
||||
## Automated Initialization (wire)
|
||||
```
|
||||
# install wire
|
||||
go get github.com/google/wire/cmd/wire
|
||||
|
||||
# generate wire
|
||||
cd cmd/server
|
||||
wire
|
||||
```
|
||||
|
||||
## Docker
|
||||
```bash
|
||||
# build
|
||||
docker build -t <your-docker-image-name> .
|
||||
|
||||
# run
|
||||
docker run --rm -p 8000:8000 -p 9000:9000 -v </path/to/your/configs>:/data/conf <your-docker-image-name>
|
||||
```
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
package constant
|
||||
|
||||
type ()
|
|
@ -0,0 +1,7 @@
|
|||
package constant
|
||||
|
||||
type RequestCode string
|
||||
|
||||
const (
|
||||
GetAccountBalance RequestCode = "SKBALQRY"
|
||||
)
|
|
@ -0,0 +1,15 @@
|
|||
package entity
|
||||
|
||||
type (
|
||||
GetAccountBalanceResp []struct {
|
||||
AccountNo string `json:"accountNo" comment:"账号" xml:"accountNo"`
|
||||
AccountName string `json:"accountName" comment:"账户名称" xml:"accountName"`
|
||||
UsableBalance float64 `json:"usableBalance" comment:"可用账户余额" xml:"usableBalance"` //可操作的账户余额
|
||||
Balance float64 `json:"Balance" comment:"账号余额" xml:"Balance"` //该账户中全部余额,包含冻结金额、可操作余额等
|
||||
FraAmt float64 `json:"fraAmt" comment:"冻结余额" xml:"FraAmt"`
|
||||
LastUdtTms string `json:"lastUdtTms" comment:"更新时间" xml:"LastUdtTms"`
|
||||
DataSrc string `json:"dataSrc" comment:"数据来源" xml:"DataSrc"` //直联、非直联-人工等
|
||||
CurrencyID string `json:"currencyID" comment:"币种" xml:"CurrencyID"` //CNY:人民币 USD:美元
|
||||
Date string `json:"date" comment:"日期" xml:"Date"`
|
||||
}
|
||||
)
|
|
@ -0,0 +1,9 @@
|
|||
package entity
|
||||
|
||||
type (
|
||||
RespCommon struct {
|
||||
Status string `json:"status" ` //交易状态
|
||||
StatusText string `json:"statusText" ` //交易状态结果描述
|
||||
FailReason string `json:"failReason" ` //交易状态
|
||||
}
|
||||
)
|
|
@ -0,0 +1,71 @@
|
|||
module tysk
|
||||
|
||||
go 1.23.0
|
||||
|
||||
toolchain go1.23.10
|
||||
|
||||
require (
|
||||
github.com/ZZMarquis/gm v1.3.2
|
||||
github.com/bwmarrin/snowflake v0.3.0
|
||||
github.com/duke-git/lancet/v2 v2.3.7
|
||||
github.com/go-kratos/kratos/contrib/config/nacos/v2 v2.0.0-20250716060240-ac92cbe5701c
|
||||
github.com/go-kratos/kratos/contrib/registry/nacos/v2 v2.0.0-20250716060240-ac92cbe5701c
|
||||
github.com/go-kratos/kratos/v2 v2.8.4
|
||||
github.com/golang-jwt/jwt/v5 v5.1.0
|
||||
github.com/golang/protobuf v1.5.4
|
||||
github.com/google/wire v0.6.0
|
||||
github.com/mitchellh/mapstructure v1.5.0
|
||||
github.com/nacos-group/nacos-sdk-go v1.1.5
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/pupuk/addr v0.0.3
|
||||
github.com/shimingyah/pool v1.0.0
|
||||
github.com/tjfoc/gmsm v1.4.1
|
||||
github.com/xuri/excelize/v2 v2.9.1
|
||||
go.opentelemetry.io/otel v1.24.0
|
||||
go.opentelemetry.io/otel/exporters/jaeger v1.17.0
|
||||
go.opentelemetry.io/otel/sdk v1.24.0
|
||||
go.uber.org/automaxprocs v1.5.1
|
||||
golang.org/x/crypto v0.38.0
|
||||
google.golang.org/genproto/googleapis/api v0.0.0-20240528184218-531527333157
|
||||
google.golang.org/grpc v1.65.0
|
||||
google.golang.org/protobuf v1.34.1
|
||||
gopkg.in/yaml.v2 v2.4.0
|
||||
)
|
||||
|
||||
require (
|
||||
dario.cat/mergo v1.0.0 // indirect
|
||||
github.com/aliyun/alibaba-cloud-sdk-go v1.61.18 // indirect
|
||||
github.com/buger/jsonparser v1.1.1 // indirect
|
||||
github.com/fsnotify/fsnotify v1.6.0 // indirect
|
||||
github.com/go-errors/errors v1.0.1 // indirect
|
||||
github.com/go-kratos/aegis v0.2.0 // indirect
|
||||
github.com/go-logr/logr v1.4.1 // indirect
|
||||
github.com/go-logr/stdr v1.2.2 // indirect
|
||||
github.com/go-playground/form/v4 v4.2.1 // indirect
|
||||
github.com/google/uuid v1.6.0 // indirect
|
||||
github.com/gorilla/mux v1.8.1 // indirect
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af // indirect
|
||||
github.com/json-iterator/go v1.1.6 // indirect
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742 // indirect
|
||||
github.com/richardlehane/mscfb v1.0.4 // indirect
|
||||
github.com/richardlehane/msoleps v1.0.4 // indirect
|
||||
github.com/tiendc/go-deepcopy v1.6.0 // indirect
|
||||
github.com/xuri/efp v0.0.1 // indirect
|
||||
github.com/xuri/nfp v0.0.1 // indirect
|
||||
go.opentelemetry.io/otel/metric v1.24.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.24.0 // indirect
|
||||
go.uber.org/atomic v1.6.0 // indirect
|
||||
go.uber.org/multierr v1.5.0 // indirect
|
||||
go.uber.org/zap v1.15.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20221208152030-732eee02a75a // indirect
|
||||
golang.org/x/net v0.40.0 // indirect
|
||||
golang.org/x/sync v0.14.0 // indirect
|
||||
golang.org/x/sys v0.33.0 // indirect
|
||||
golang.org/x/text v0.25.0 // indirect
|
||||
google.golang.org/genproto/googleapis/rpc v0.0.0-20240528184218-531527333157 // indirect
|
||||
gopkg.in/ini.v1 v1.42.0 // indirect
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
)
|
|
@ -0,0 +1,50 @@
|
|||
package pkg
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// XmlRequest 定义请求结构
|
||||
type XmlRequest struct {
|
||||
Action string `xml:"action"`
|
||||
UserName string `xml:"userName"`
|
||||
ExtraFields map[string]interface{} `xml:"-"` // 忽略此字段,手动处理
|
||||
}
|
||||
|
||||
// MarshalToXML 将XmlRequest转换为指定格式的XML字节流
|
||||
func (req XmlRequest) MarshalToXML() ([]byte, error) {
|
||||
var buf bytes.Buffer
|
||||
|
||||
// 写入XML声明
|
||||
buf.WriteString(`<?xml version="1.0" encoding="GBK"?>` + "\n")
|
||||
buf.WriteString("<stream>\n")
|
||||
|
||||
// 写入基本字段
|
||||
buf.WriteString(fmt.Sprintf("<action>%s</action>\n", req.Action))
|
||||
buf.WriteString(fmt.Sprintf("<userName>%s</userName>\n", req.UserName))
|
||||
|
||||
// 处理ExtraFields
|
||||
for key, value := range req.ExtraFields {
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
// 空字符串特殊处理(根据示例输出,有些空字段也需要输出)
|
||||
buf.WriteString(fmt.Sprintf("<%s>%s</%s>\n", key, v, key))
|
||||
case []map[string]interface{}:
|
||||
// 处理列表数据
|
||||
buf.WriteString(fmt.Sprintf("<list name=\"%s\">\n", key))
|
||||
for _, row := range v {
|
||||
buf.WriteString("<row>\n")
|
||||
for rowKey, rowValue := range row {
|
||||
buf.WriteString(fmt.Sprintf("<%s>%v</%s>\n", rowKey, rowValue, rowKey))
|
||||
}
|
||||
buf.WriteString("</row>\n")
|
||||
}
|
||||
buf.WriteString("</list>\n")
|
||||
// 可以根据需要添加其他类型的处理
|
||||
}
|
||||
}
|
||||
|
||||
buf.WriteString("</stream>")
|
||||
return buf.Bytes(), nil
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package pkg
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestXmL(t *testing.T) {
|
||||
data := XmlRequest{
|
||||
Action: "SKBACQRY",
|
||||
UserName: "11100199667893870098",
|
||||
ExtraFields: map[string]interface{}{
|
||||
"blngBnkId": "",
|
||||
"accCgyId": "",
|
||||
"startRecord": "1",
|
||||
"pageNumber": "20",
|
||||
// 列表数据作为 ExtraFields 的一个字段
|
||||
"userDataList": []map[string]interface{}{
|
||||
{"accountNo": "8110901013900618088", "name": "1", "ss": 222},
|
||||
{"accountNo": "8110901013900618088", "name": "2", "ss": 333},
|
||||
{"accountNo": "8110901013900618088", "name": "3", "ss": 444},
|
||||
},
|
||||
"userDataList2": []map[string]interface{}{
|
||||
{"accountNo": "8110901013900618088", "name": "4", "ss": 12},
|
||||
{"accountNo": "8110901013900618088", "name": "4", "ss": 44324},
|
||||
{"accountNo": "8110901013900618088", "name": "4", "ss": 44},
|
||||
},
|
||||
},
|
||||
}
|
||||
gbkXML, err := data.MarshalToXML()
|
||||
t.Log(gbkXML, err)
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
package pkg
|
||||
|
||||
func HandleRequest(reqData XmlRequest, result interface{}) {
|
||||
gbkXML, err := reqData.MarshalToXML()
|
||||
|
||||
}
|
Loading…
Reference in New Issue