正在显示
53 个修改的文件
包含
2294 行增加
和
0 行删除
.gitignore
0 → 100644
| 1 | +# Binaries for programs and plugins | ||
| 2 | +*.exe | ||
| 3 | +*.dll | ||
| 4 | +*.so | ||
| 5 | +*.dylib | ||
| 6 | +*.vscode | ||
| 7 | + | ||
| 8 | +# Test binary, build with `go test -c` | ||
| 9 | +*.test | ||
| 10 | + | ||
| 11 | +# Output of the go coverage tool, specifically when used with LiteIDE | ||
| 12 | +*.out | ||
| 13 | + | ||
| 14 | +*.log | ||
| 15 | +*debug | ||
| 16 | +*wasm | ||
| 17 | + | ||
| 18 | +*.idea | ||
| 19 | + | ||
| 20 | +*.tmp | ||
| 21 | + | ||
| 22 | +*.sum | ||
| 23 | + | ||
| 24 | +opp | ||
| 25 | +/vendor | ||
| 26 | +/*.exe~ |
Dockerfile
0 → 100644
| 1 | +FROM golang:latest | ||
| 2 | +ENV APP_DIR $GOPATH/src/partner | ||
| 3 | +RUN mkdir -p $APP_DIR | ||
| 4 | +WORKDIR $APP_DIR/ | ||
| 5 | +COPY ./pkg pkg | ||
| 6 | +COPY ./conf conf | ||
| 7 | +COPY ./go.mod go.mod | ||
| 8 | +COPY ./main.go main.go | ||
| 9 | +RUN ["ln","-sf","/usr/share/zoneinfo/Asia/Shanghai","/etc/localtime"] | ||
| 10 | +ENV GO111MODULE on | ||
| 11 | +ENV GOPROXY https://goproxy.cn | ||
| 12 | +RUN ["go","mod","tidy"] | ||
| 13 | +RUN ["go","build"] | ||
| 14 | +ENTRYPOINT ["./partner"] |
conf/app.conf
0 → 100644
| 1 | +appname = partner | ||
| 2 | +runmode = "${RUN_MODE||dev}" | ||
| 3 | +httpport = "${HTTP_PORT||8080}" | ||
| 4 | + | ||
| 5 | +#开启监控 | ||
| 6 | +EnableAdmin = false | ||
| 7 | +#开启JSON请求 | ||
| 8 | +copyrequestbody = true | ||
| 9 | +#防止跨站请求伪造 未启用 | ||
| 10 | +enablexsrf = false | ||
| 11 | +xsrfkey = asdfioerjlasdfmFADFOEJF2323SDFF | ||
| 12 | +xsrfexpire = 3600 | ||
| 13 | +[lang] | ||
| 14 | +types = en-US|zh-CN | ||
| 15 | +names = English|简体中文 |
deploy/k8s/dev/install.sh
0 → 100644
| 1 | +#!/bin/bash | ||
| 2 | +export PATH=/root/local/bin:$PATH | ||
| 3 | +kubectl -n mmm-suplus-dev get pods | grep -q partner | ||
| 4 | +if [ "$?" == "1" ];then | ||
| 5 | + kubectl create -f /tmp/dev/partner/partner.yaml --record | ||
| 6 | + kubectl -n mmm-suplus-dev get svc | grep -q partner | ||
| 7 | + if [ "$?" == "0" ];then | ||
| 8 | + echo "partner service install success!" | ||
| 9 | + else | ||
| 10 | + echo "partner service install fail!" | ||
| 11 | + fi | ||
| 12 | + kubectl -n mmm-suplus-dev get pods | grep -q partner | ||
| 13 | + if [ "$?" == "0" ];then | ||
| 14 | + echo "partner deployment install success!" | ||
| 15 | + else | ||
| 16 | + echo "partner deployment install fail!" | ||
| 17 | + fi | ||
| 18 | +else | ||
| 19 | + kubectl delete -f /tmp/dev/partner/partner.yaml | ||
| 20 | + kubectl -n mmm-suplus-dev get svc | grep -q partner | ||
| 21 | + while [ "$?" == "0" ] | ||
| 22 | + do | ||
| 23 | + kubectl -n mmm-suplus-dev get svc | grep -q partner | ||
| 24 | + done | ||
| 25 | + kubectl -n mmm-suplus-dev get pods | grep -q partner | ||
| 26 | + while [ "$?" == "0" ] | ||
| 27 | + do | ||
| 28 | + kubectl -n mmm-suplus-dev get pods | grep -q partner | ||
| 29 | + done | ||
| 30 | + kubectl create -f /tmp/dev/partner/partner.yaml --record | ||
| 31 | + kubectl -n mmm-suplus-dev get svc | grep -q partner | ||
| 32 | + if [ "$?" == "0" ];then | ||
| 33 | + echo "partner service update success!" | ||
| 34 | + else | ||
| 35 | + echo "partner service update fail!" | ||
| 36 | + fi | ||
| 37 | + kubectl -n mmm-suplus-dev get pods | grep -q partner | ||
| 38 | + if [ "$?" == "0" ];then | ||
| 39 | + echo "partner deployment update success!" | ||
| 40 | + else | ||
| 41 | + echo "partner deployment update fail!" | ||
| 42 | + fi | ||
| 43 | +fi |
deploy/k8s/dev/partner.yaml
0 → 100644
| 1 | +apiVersion: v1 | ||
| 2 | +kind: Service | ||
| 3 | +metadata: | ||
| 4 | + name: partner | ||
| 5 | + namespace: mmm-suplus-dev | ||
| 6 | + labels: | ||
| 7 | + k8s-app: partner | ||
| 8 | +spec: | ||
| 9 | + ports: | ||
| 10 | + - name: "http" | ||
| 11 | + port: 80 | ||
| 12 | + targetPort: 8082 | ||
| 13 | + selector: | ||
| 14 | + k8s-app: partner | ||
| 15 | +--- | ||
| 16 | +apiVersion: extensions/v1beta1 | ||
| 17 | +kind: Deployment | ||
| 18 | +metadata: | ||
| 19 | + name: partner | ||
| 20 | + namespace: mmm-suplus-dev | ||
| 21 | + labels: | ||
| 22 | + k8s-app: partner | ||
| 23 | +spec: | ||
| 24 | + replicas: 1 | ||
| 25 | + template: | ||
| 26 | + metadata: | ||
| 27 | + labels: | ||
| 28 | + k8s-app: partner | ||
| 29 | + spec: | ||
| 30 | + affinity: | ||
| 31 | + nodeAffinity: | ||
| 32 | + preferredDuringSchedulingIgnoredDuringExecution: | ||
| 33 | + - preference: {} | ||
| 34 | + weight: 100 | ||
| 35 | + requiredDuringSchedulingIgnoredDuringExecution: | ||
| 36 | + nodeSelectorTerms: | ||
| 37 | + - matchExpressions: | ||
| 38 | + - key: kubernetes.io/hostname | ||
| 39 | + operator: In | ||
| 40 | + values: | ||
| 41 | + - cn-hangzhou.i-bp1djh1xn7taumbue1ze | ||
| 42 | + - cn-hangzhou.i-bp1djh1xn7taumbue1zd | ||
| 43 | + - cn-hangzhou.i-bp1euf5u1ph9kbhtndhb | ||
| 44 | + - cn-hangzhou.i-bp1hyp5oips9cdwxxgxy | ||
| 45 | + containers: | ||
| 46 | + - name: partner | ||
| 47 | + image: 192.168.0.243:5000/mmm/partner:dev | ||
| 48 | + imagePullPolicy: Always | ||
| 49 | + ports: | ||
| 50 | + - containerPort: 8082 | ||
| 51 | + volumeMounts: | ||
| 52 | + - mountPath: /opt/logs | ||
| 53 | + name: accesslogs | ||
| 54 | + env: | ||
| 55 | + - name: POSTGRESQL_DB_NAME | ||
| 56 | + value: "partner_dev" | ||
| 57 | + - name: POSTGRESQL_USER | ||
| 58 | + value: "postgres" | ||
| 59 | + - name: POSTGRESQL_PASSWORD | ||
| 60 | + value: "postgres_15432" | ||
| 61 | + - name: POSTGRESQL_HOST | ||
| 62 | + value: "101.37.68.23" | ||
| 63 | + - name: POSTGRESQL_PORT | ||
| 64 | + value: "15432" | ||
| 65 | + - name: LOG_LEVEL | ||
| 66 | + value: "debug" | ||
| 67 | + - name: ERROR_BASE_CODE | ||
| 68 | + value: "1" | ||
| 69 | + - name: ERROR_BASE_CODE_MULTIPLE | ||
| 70 | + value: "1000" | ||
| 71 | + - name: ABILITY_SERVICE_HOST | ||
| 72 | + value: "https://suplus-worth-app-gateway-dev.fjmaimaimai.com" | ||
| 73 | + - name: MMM_OPEN_API_SERVICE_HOST | ||
| 74 | + value: "http://mmm-open-api-dev.fjmaimaimai.com" | ||
| 75 | + volumes: | ||
| 76 | + - name: accesslogs | ||
| 77 | + emptyDir: {} |
deploy/k8s/prd/install.sh
0 → 100644
| 1 | +#!/bin/bash | ||
| 2 | +export PATH=/root/local/bin:$PATH | ||
| 3 | +kubectl -n mmm-suplus-prd get pods | grep -q partner | ||
| 4 | +if [ "$?" == "1" ];then | ||
| 5 | + kubectl create -f /tmp/prd/partner/partner.yaml --record | ||
| 6 | + kubectl -n mmm-suplus-prd get svc | grep -q partner | ||
| 7 | + if [ "$?" == "0" ];then | ||
| 8 | + echo "partner service install success!" | ||
| 9 | + else | ||
| 10 | + echo "partner service install fail!" | ||
| 11 | + fi | ||
| 12 | + kubectl -n mmm-suplus-prd get pods | grep -q partner | ||
| 13 | + if [ "$?" == "0" ];then | ||
| 14 | + echo "partner deployment install success!" | ||
| 15 | + else | ||
| 16 | + echo "partner deployment install fail!" | ||
| 17 | + fi | ||
| 18 | +else | ||
| 19 | + kubectl delete -f /tmp/prd/partner/partner.yaml | ||
| 20 | + kubectl -n mmm-suplus-prd get svc | grep -q partner | ||
| 21 | + while [ "$?" == "0" ] | ||
| 22 | + do | ||
| 23 | + kubectl -n mmm-suplus-prd get svc | grep -q partner | ||
| 24 | + done | ||
| 25 | + kubectl -n mmm-suplus-prd get pods | grep -q partner | ||
| 26 | + while [ "$?" == "0" ] | ||
| 27 | + do | ||
| 28 | + kubectl -n mmm-suplus-prd get pods | grep -q partner | ||
| 29 | + done | ||
| 30 | + kubectl create -f /tmp/prd/partner/partner.yaml --record | ||
| 31 | + kubectl -n mmm-suplus-prd get svc | grep -q partner | ||
| 32 | + if [ "$?" == "0" ];then | ||
| 33 | + echo "partner service update success!" | ||
| 34 | + else | ||
| 35 | + echo "partner service update fail!" | ||
| 36 | + fi | ||
| 37 | + kubectl -n mmm-suplus-prd get pods | grep -q partner | ||
| 38 | + if [ "$?" == "0" ];then | ||
| 39 | + echo "partner deployment update success!" | ||
| 40 | + else | ||
| 41 | + echo "partner deployment update fail!" | ||
| 42 | + fi | ||
| 43 | +fi |
deploy/k8s/prd/partner.yaml
0 → 100644
| 1 | +apiVersion: v1 | ||
| 2 | +kind: Service | ||
| 3 | +metadata: | ||
| 4 | + name: partner | ||
| 5 | + namespace: mmm-suplus-prd | ||
| 6 | + labels: | ||
| 7 | + k8s-app: partner | ||
| 8 | +spec: | ||
| 9 | + ports: | ||
| 10 | + - name: "http" | ||
| 11 | + port: 80 | ||
| 12 | + targetPort: 8082 | ||
| 13 | + selector: | ||
| 14 | + k8s-app: partner | ||
| 15 | +--- | ||
| 16 | +apiVersion: extensions/v1beta1 | ||
| 17 | +kind: Deployment | ||
| 18 | +metadata: | ||
| 19 | + name: partner | ||
| 20 | + namespace: mmm-suplus-prd | ||
| 21 | + labels: | ||
| 22 | + k8s-app: partner | ||
| 23 | +spec: | ||
| 24 | + replicas: 1 | ||
| 25 | + template: | ||
| 26 | + metadata: | ||
| 27 | + labels: | ||
| 28 | + k8s-app: partner | ||
| 29 | + spec: | ||
| 30 | + affinity: | ||
| 31 | + nodeAffinity: | ||
| 32 | + preferredDuringSchedulingIgnoredDuringExecution: | ||
| 33 | + - preference: {} | ||
| 34 | + weight: 100 | ||
| 35 | + requiredDuringSchedulingIgnoredDuringExecution: | ||
| 36 | + nodeSelectorTerms: | ||
| 37 | + - matchExpressions: | ||
| 38 | + - key: kubernetes.io/hostname | ||
| 39 | + operator: In | ||
| 40 | + values: | ||
| 41 | + - cn-hangzhou.i-bp1djh1xn7taumbue1ze | ||
| 42 | + - cn-hangzhou.i-bp1djh1xn7taumbue1zd | ||
| 43 | + - cn-hangzhou.i-bp1euf5u1ph9kbhtndhb | ||
| 44 | + - cn-hangzhou.i-bp1hyp5oips9cdwxxgxy | ||
| 45 | + containers: | ||
| 46 | + - name: partner | ||
| 47 | + image: 192.168.0.243:5000/mmm/partner:master | ||
| 48 | + imagePullPolicy: Always | ||
| 49 | + ports: | ||
| 50 | + - containerPort: 8082 | ||
| 51 | + volumeMounts: | ||
| 52 | + - mountPath: /opt/logs | ||
| 53 | + name: accesslogs | ||
| 54 | + env: | ||
| 55 | + - name: POSTGRESQL_DB_NAME | ||
| 56 | + value: "partner" | ||
| 57 | + - name: POSTGRESQL_USER | ||
| 58 | + value: "postgres" | ||
| 59 | + - name: POSTGRESQL_PASSWORD | ||
| 60 | + value: "postgres_55_online" | ||
| 61 | + - name: POSTGRESQL_HOST | ||
| 62 | + value: "112.124.115.55" | ||
| 63 | + - name: POSTGRESQL_PORT | ||
| 64 | + value: "15432" | ||
| 65 | + - name: LOG_LEVEL | ||
| 66 | + value: "debug" | ||
| 67 | + - name: ERROR_BASE_CODE | ||
| 68 | + value: "1" | ||
| 69 | + - name: ERROR_BASE_CODE_MULTIPLE | ||
| 70 | + value: "1000" | ||
| 71 | + - name: ABILITY_SERVICE_HOST | ||
| 72 | + value: "https://ability.fjmaimaimai.com" | ||
| 73 | + - name: MMM_OPEN_API_SERVICE_HOST | ||
| 74 | + value: "https://public-interface.fjmaimaimai.com/openapi" | ||
| 75 | + volumes: | ||
| 76 | + - name: accesslogs | ||
| 77 | + emptyDir: {} |
deploy/k8s/test/install.sh
0 → 100644
| 1 | +#!/bin/bash | ||
| 2 | +export PATH=/root/local/bin:$PATH | ||
| 3 | +kubectl -n mmm-suplus-test get pods | grep -q partner | ||
| 4 | +if [ "$?" == "1" ];then | ||
| 5 | + kubectl create -f /tmp/test/partner/partner.yaml --record | ||
| 6 | + kubectl -n mmm-suplus-test get svc | grep -q partner | ||
| 7 | + if [ "$?" == "0" ];then | ||
| 8 | + echo "partner service install success!" | ||
| 9 | + else | ||
| 10 | + echo "partner service install fail!" | ||
| 11 | + fi | ||
| 12 | + kubectl -n mmm-suplus-test get pods | grep -q partner | ||
| 13 | + if [ "$?" == "0" ];then | ||
| 14 | + echo "partner deployment install success!" | ||
| 15 | + else | ||
| 16 | + echo "partner deployment install fail!" | ||
| 17 | + fi | ||
| 18 | +else | ||
| 19 | + kubectl delete -f /tmp/test/partner/partner.yaml | ||
| 20 | + kubectl -n mmm-suplus-test get svc | grep -q partner | ||
| 21 | + while [ "$?" == "0" ] | ||
| 22 | + do | ||
| 23 | + kubectl -n mmm-suplus-test get svc | grep -q partner | ||
| 24 | + done | ||
| 25 | + kubectl -n mmm-suplus-test get pods | grep -q partner | ||
| 26 | + while [ "$?" == "0" ] | ||
| 27 | + do | ||
| 28 | + kubectl -n mmm-suplus-test get pods | grep -q partner | ||
| 29 | + done | ||
| 30 | + kubectl create -f /tmp/test/partner/partner.yaml --record | ||
| 31 | + kubectl -n mmm-suplus-test get svc | grep -q partner | ||
| 32 | + if [ "$?" == "0" ];then | ||
| 33 | + echo "partner service update success!" | ||
| 34 | + else | ||
| 35 | + echo "partner service update fail!" | ||
| 36 | + fi | ||
| 37 | + kubectl -n mmm-suplus-test get pods | grep -q partner | ||
| 38 | + if [ "$?" == "0" ];then | ||
| 39 | + echo "partner deployment update success!" | ||
| 40 | + else | ||
| 41 | + echo "partner deployment update fail!" | ||
| 42 | + fi | ||
| 43 | +fi |
deploy/k8s/test/partner.yaml
0 → 100644
| 1 | +apiVersion: v1 | ||
| 2 | +kind: Service | ||
| 3 | +metadata: | ||
| 4 | + name: partner | ||
| 5 | + namespace: mmm-suplus-test | ||
| 6 | + labels: | ||
| 7 | + k8s-app: partner | ||
| 8 | +spec: | ||
| 9 | + ports: | ||
| 10 | + - name: "http" | ||
| 11 | + port: 80 | ||
| 12 | + targetPort: 8082 | ||
| 13 | + selector: | ||
| 14 | + k8s-app: partner | ||
| 15 | +--- | ||
| 16 | +apiVersion: extensions/v1beta1 | ||
| 17 | +kind: Deployment | ||
| 18 | +metadata: | ||
| 19 | + name: partner | ||
| 20 | + namespace: mmm-suplus-test | ||
| 21 | + labels: | ||
| 22 | + k8s-app: partner | ||
| 23 | +spec: | ||
| 24 | + replicas: 1 | ||
| 25 | + template: | ||
| 26 | + metadata: | ||
| 27 | + labels: | ||
| 28 | + k8s-app: partner | ||
| 29 | + spec: | ||
| 30 | + affinity: | ||
| 31 | + nodeAffinity: | ||
| 32 | + preferredDuringSchedulingIgnoredDuringExecution: | ||
| 33 | + - preference: {} | ||
| 34 | + weight: 100 | ||
| 35 | + requiredDuringSchedulingIgnoredDuringExecution: | ||
| 36 | + nodeSelectorTerms: | ||
| 37 | + - matchExpressions: | ||
| 38 | + - key: kubernetes.io/hostname | ||
| 39 | + operator: In | ||
| 40 | + values: | ||
| 41 | + - cn-hangzhou.i-bp1djh1xn7taumbue1ze | ||
| 42 | + - cn-hangzhou.i-bp1djh1xn7taumbue1zd | ||
| 43 | + - cn-hangzhou.i-bp1euf5u1ph9kbhtndhb | ||
| 44 | + - cn-hangzhou.i-bp1hyp5oips9cdwxxgxy | ||
| 45 | + containers: | ||
| 46 | + - name: partner | ||
| 47 | + image: 192.168.0.243:5000/mmm/partner:test | ||
| 48 | + imagePullPolicy: Always | ||
| 49 | + ports: | ||
| 50 | + - containerPort: 8082 | ||
| 51 | + volumeMounts: | ||
| 52 | + - mountPath: /opt/logs | ||
| 53 | + name: accesslogs | ||
| 54 | + env: | ||
| 55 | + - name: POSTGRESQL_DB_NAME | ||
| 56 | + value: "partner_test" | ||
| 57 | + - name: POSTGRESQL_USER | ||
| 58 | + value: "postgres" | ||
| 59 | + - name: POSTGRESQL_PASSWORD | ||
| 60 | + value: "postgres_15432" | ||
| 61 | + - name: POSTGRESQL_HOST | ||
| 62 | + value: "101.37.68.23" | ||
| 63 | + - name: POSTGRESQL_PORT | ||
| 64 | + value: "15432" | ||
| 65 | + - name: LOG_LEVEL | ||
| 66 | + value: "debug" | ||
| 67 | + - name: ERROR_BASE_CODE | ||
| 68 | + value: "1" | ||
| 69 | + - name: ERROR_BASE_CODE_MULTIPLE | ||
| 70 | + value: "1000" | ||
| 71 | + - name: ABILITY_SERVICE_HOST | ||
| 72 | + value: "https://suplus-worth-app-gateway-test.fjmaimaimai.com" | ||
| 73 | + - name: MMM_OPEN_API_SERVICE_HOST | ||
| 74 | + value: "http://mmm-open-api-test.fjmaimaimai.com" | ||
| 75 | + volumes: | ||
| 76 | + - name: accesslogs | ||
| 77 | + emptyDir: {} |
go.mod
0 → 100644
| 1 | +module gitlab.fjmaimaimai.com/mmm-go/partner | ||
| 2 | + | ||
| 3 | +go 1.13 | ||
| 4 | + | ||
| 5 | +require ( | ||
| 6 | + github.com/ajg/form v1.5.1 // indirect | ||
| 7 | + github.com/astaxie/beego v1.12.1 | ||
| 8 | + github.com/fatih/structs v1.1.0 // indirect | ||
| 9 | + github.com/gavv/httpexpect v2.0.0+incompatible | ||
| 10 | + github.com/go-pg/pg/v10 v10.0.0-beta.2 | ||
| 11 | + github.com/google/go-querystring v1.0.0 // indirect | ||
| 12 | + github.com/gorilla/websocket v1.4.2 // indirect | ||
| 13 | + github.com/imkira/go-interpol v1.1.0 // indirect | ||
| 14 | + github.com/linmadan/egglib-go v0.0.0-20191217144343-ca4539f95bf9 | ||
| 15 | + github.com/moul/http2curl v1.0.0 // indirect | ||
| 16 | + github.com/onsi/ginkgo v1.10.3 | ||
| 17 | + github.com/onsi/gomega v1.7.1 | ||
| 18 | + github.com/sergi/go-diff v1.1.0 // indirect | ||
| 19 | + github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect | ||
| 20 | + github.com/valyala/fasthttp v1.14.0 // indirect | ||
| 21 | + github.com/xeipuuv/gojsonschema v1.2.0 // indirect | ||
| 22 | + github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0 // indirect | ||
| 23 | + github.com/yudai/gojsondiff v1.0.0 // indirect | ||
| 24 | + github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect | ||
| 25 | +) |
main.go
0 → 100644
pkg/application/factory/dao.go
0 → 100644
| 1 | +package factory | ||
| 2 | + | ||
| 3 | +//func CreateTaskDao(options map[string]interface{}) (*dao.TaskDao, error) { | ||
| 4 | +// var transactionContext *pg.TransactionContext | ||
| 5 | +// if value, ok := options["transactionContext"]; ok { | ||
| 6 | +// transactionContext = value.(*pg.TransactionContext) | ||
| 7 | +// } | ||
| 8 | +// return dao.NewTaskDao(transactionContext) | ||
| 9 | +//} |
pkg/application/factory/domain_service.go
0 → 100644
| 1 | +package factory | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | +//pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 5 | +//"gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain/service" | ||
| 6 | +//domainService "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/domain_service" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +//func CreateReadSentNotificationService(options map[string]interface{}) (service.ReadSentNotificationService, error) { | ||
| 10 | +// var transactionContext *pgTransaction.TransactionContext | ||
| 11 | +// if value, ok := options["transactionContext"]; ok { | ||
| 12 | +// transactionContext = value.(*pgTransaction.TransactionContext) | ||
| 13 | +// } | ||
| 14 | +// return domainService.NewReadSentNotificationService(transactionContext) | ||
| 15 | +//} |
pkg/application/factory/repository.go
0 → 100644
| 1 | +package factory | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain" | ||
| 5 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg/transaction" | ||
| 6 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/repository" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +//CreatePartnerInfoRepository 合伙人信息 | ||
| 10 | +func CreatePartnerInfoRepository(options map[string]interface{}) (domain.PartnerInfoRepository, error) { | ||
| 11 | + var transactionContext *transaction.TransactionContext | ||
| 12 | + if value, ok := options["transactionContext"]; ok { | ||
| 13 | + transactionContext = value.(*transaction.TransactionContext) | ||
| 14 | + } | ||
| 15 | + return repository.NewPartnerInfoRepository(transactionContext) | ||
| 16 | +} |
pkg/application/factory/service_gateway.go
0 → 100644
| 1 | +package factory | ||
| 2 | + | ||
| 3 | +//import serviceGateway "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/service_gateway" | ||
| 4 | +// | ||
| 5 | +//func CreateAbilityServiceGateway(options map[string]interface{}) (serviceGateway.AbilityServiceGateway, error) { | ||
| 6 | +// return serviceGateway.NewHttplibAbilityServiceGateway(), nil | ||
| 7 | +//} |
pkg/application/factory/transaction.go
0 → 100644
| 1 | +package factory | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/linmadan/egglib-go/core/application" | ||
| 5 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg" | ||
| 6 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg/transaction" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +func CreateTransactionContext(options map[string]interface{}) (application.TransactionContext, error) { | ||
| 10 | + return &transaction.TransactionContext{ | ||
| 11 | + PgDd: pg.DB, | ||
| 12 | + }, nil | ||
| 13 | +} |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain" | ||
| 6 | + | ||
| 7 | + "github.com/astaxie/beego/validation" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +type CreatePartnerInfoCommand struct { | ||
| 11 | + domain.PartnerInfo | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +func (c *CreatePartnerInfoCommand) ValidateCommand() error { | ||
| 15 | + valid := validation.Validation{} | ||
| 16 | + b, err := valid.Valid(c) | ||
| 17 | + if err != nil { | ||
| 18 | + return err | ||
| 19 | + } | ||
| 20 | + if !b { | ||
| 21 | + for _, validErr := range valid.Errors { | ||
| 22 | + return fmt.Errorf("%s %s", validErr.Key, validErr.Message) | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + return nil | ||
| 26 | +} |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + | ||
| 6 | + "github.com/astaxie/beego/validation" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type RemovePartnerInfoCommand struct { | ||
| 10 | + // 合伙人ID | ||
| 11 | + Id int `json:"id" valid:"Required"` | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +func (c *RemovePartnerInfoCommand) ValidateCommand() error { | ||
| 15 | + valid := validation.Validation{} | ||
| 16 | + b, err := valid.Valid(c) | ||
| 17 | + if err != nil { | ||
| 18 | + return err | ||
| 19 | + } | ||
| 20 | + if !b { | ||
| 21 | + for _, validErr := range valid.Errors { | ||
| 22 | + return fmt.Errorf("%s %s", validErr.Key, validErr.Message) | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + return nil | ||
| 26 | +} |
| 1 | +package command | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "github.com/astaxie/beego/validation" | ||
| 6 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type UpdatePartnerInfoCommand struct { | ||
| 10 | + // 合伙人Id | ||
| 11 | + Id int `json:"id,omitempty"` | ||
| 12 | + | ||
| 13 | + // 合伙人姓名 | ||
| 14 | + PartnerName string `json:"partnerName,omitempty"` | ||
| 15 | + // 登录账号 | ||
| 16 | + Account string `json:"account,omitempty"` | ||
| 17 | + // 登录密码 | ||
| 18 | + Password string `json:"password,omitempty"` | ||
| 19 | + // 状态(1:启用或者0:禁用) | ||
| 20 | + Status int `json:"status"` | ||
| 21 | + // 合伙类别 (1.研发合伙人 2.业务合伙人 3.事业) | ||
| 22 | + PartnerCategory int `json:"partnerCategory,omitempty"` | ||
| 23 | + | ||
| 24 | + //关联业务员 | ||
| 25 | + Salesman []*domain.Salesman `json:"salesman,omitempty"` | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +func (c *UpdatePartnerInfoCommand) ValidateCommand() error { | ||
| 29 | + valid := validation.Validation{} | ||
| 30 | + b, err := valid.Valid(c) | ||
| 31 | + if err != nil { | ||
| 32 | + return err | ||
| 33 | + } | ||
| 34 | + if !b { | ||
| 35 | + for _, validErr := range valid.Errors { | ||
| 36 | + return fmt.Errorf("%s %s", validErr.Key, validErr.Message) | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | + return nil | ||
| 40 | +} |
| 1 | +package query | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + | ||
| 6 | + "github.com/astaxie/beego/validation" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type GetPartnerInfoQuery struct { | ||
| 10 | + // 合伙人ID | ||
| 11 | + Id int `json:"id" valid:"Required"` | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +func (q *GetPartnerInfoQuery) ValidateQuery() error { | ||
| 15 | + valid := validation.Validation{} | ||
| 16 | + b, err := valid.Valid(q) | ||
| 17 | + if err != nil { | ||
| 18 | + return err | ||
| 19 | + } | ||
| 20 | + if !b { | ||
| 21 | + for _, validErr := range valid.Errors { | ||
| 22 | + return fmt.Errorf("%s %s", validErr.Key, validErr.Message) | ||
| 23 | + } | ||
| 24 | + } | ||
| 25 | + return nil | ||
| 26 | +} |
| 1 | +package query | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + | ||
| 6 | + "github.com/astaxie/beego/validation" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type ListPartnerInfoQuery struct { | ||
| 10 | + //状态 | ||
| 11 | + Status int `json:"status,omitempty"` | ||
| 12 | + // 合伙人类别 | ||
| 13 | + PartnerCategory int `json:"partnerCategory,omitempty"` | ||
| 14 | + //按创建任务时间排序(ASC,DESC) | ||
| 15 | + SortByCreateTime string `json:"sortByCreateTime,omitempty"` | ||
| 16 | + //按创建任务时间排序(ASC,DESC) | ||
| 17 | + SortByUpdateTime string `json:"sortByUpdateTime,omitempty"` | ||
| 18 | + // 查询偏离量 | ||
| 19 | + Offset int `json:"offset,omitempty"` | ||
| 20 | + // 查询限制 | ||
| 21 | + Limit int `json:"limit,omitempty"` | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func (q *ListPartnerInfoQuery) ValidateQuery() error { | ||
| 25 | + valid := validation.Validation{} | ||
| 26 | + b, err := valid.Valid(q) | ||
| 27 | + if err != nil { | ||
| 28 | + return err | ||
| 29 | + } | ||
| 30 | + if !b { | ||
| 31 | + for _, validErr := range valid.Errors { | ||
| 32 | + return fmt.Errorf("%s %s", validErr.Key, validErr.Message) | ||
| 33 | + } | ||
| 34 | + } | ||
| 35 | + return nil | ||
| 36 | +} |
| 1 | +package service | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "fmt" | ||
| 5 | + "github.com/linmadan/egglib-go/core/application" | ||
| 6 | + "github.com/linmadan/egglib-go/utils/tool_funs" | ||
| 7 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/factory" | ||
| 8 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/partnerInfo/command" | ||
| 9 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/partnerInfo/query" | ||
| 10 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain" | ||
| 11 | + "time" | ||
| 12 | +) | ||
| 13 | + | ||
| 14 | +// 客户价值服务 | ||
| 15 | +type PartnerInfoService struct { | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +// 创建客户价值 | ||
| 19 | +func (PartnerInfoService *PartnerInfoService) CreatePartnerInfo(command *command.CreatePartnerInfoCommand) (data interface{}, err error) { | ||
| 20 | + var ( | ||
| 21 | + count int64 | ||
| 22 | + transactionContext, _ = factory.CreateTransactionContext(nil) | ||
| 23 | + ) | ||
| 24 | + if err = command.ValidateCommand(); err != nil { | ||
| 25 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 26 | + } | ||
| 27 | + if err = transactionContext.StartTransaction(); err != nil { | ||
| 28 | + return nil, err | ||
| 29 | + } | ||
| 30 | + defer func() { | ||
| 31 | + if err != nil { | ||
| 32 | + transactionContext.RollbackTransaction() | ||
| 33 | + } | ||
| 34 | + }() | ||
| 35 | + | ||
| 36 | + newPartnerInfo := &command.PartnerInfo | ||
| 37 | + newPartnerInfo.CreateAt = time.Now() | ||
| 38 | + newPartnerInfo.UpdateAt = time.Now() | ||
| 39 | + | ||
| 40 | + var PartnerInfoRepository domain.PartnerInfoRepository | ||
| 41 | + if PartnerInfoRepository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{"transactionContext": transactionContext}); err != nil { | ||
| 42 | + return nil, err | ||
| 43 | + } | ||
| 44 | + if count, _, err = PartnerInfoRepository.Find(map[string]interface{}{"account": command.Account}); err != nil { | ||
| 45 | + return nil, err | ||
| 46 | + } | ||
| 47 | + if count > 0 { | ||
| 48 | + return nil, fmt.Errorf("标签不可重复名称") | ||
| 49 | + } | ||
| 50 | + | ||
| 51 | + if data, err = PartnerInfoRepository.Save(newPartnerInfo); err != nil { | ||
| 52 | + return | ||
| 53 | + } | ||
| 54 | + err = transactionContext.CommitTransaction() | ||
| 55 | + return | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +// 返回客户价值 | ||
| 59 | +func (PartnerInfoService *PartnerInfoService) GetPartnerInfo(command *query.GetPartnerInfoQuery) (data interface{}, err error) { | ||
| 60 | + var ( | ||
| 61 | + transactionContext, _ = factory.CreateTransactionContext(nil) | ||
| 62 | + ) | ||
| 63 | + if err = command.ValidateQuery(); err != nil { | ||
| 64 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 65 | + } | ||
| 66 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 67 | + return nil, err | ||
| 68 | + } | ||
| 69 | + defer func() { | ||
| 70 | + if err != nil { | ||
| 71 | + transactionContext.RollbackTransaction() | ||
| 72 | + } | ||
| 73 | + }() | ||
| 74 | + var PartnerInfoRepository domain.PartnerInfoRepository | ||
| 75 | + if PartnerInfoRepository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{"transactionContext": transactionContext}); err != nil { | ||
| 76 | + return nil, err | ||
| 77 | + } | ||
| 78 | + data, err = PartnerInfoRepository.FindOne(map[string]interface{}{"Id": command.Id}) | ||
| 79 | + if err != nil { | ||
| 80 | + return nil, err | ||
| 81 | + } | ||
| 82 | + if data == nil { | ||
| 83 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(command.Id))) | ||
| 84 | + } | ||
| 85 | + err = transactionContext.CommitTransaction() | ||
| 86 | + return | ||
| 87 | +} | ||
| 88 | + | ||
| 89 | +// 更新客户价值 | ||
| 90 | +func (PartnerInfoService *PartnerInfoService) UpdatePartnerInfo(updatePartnerInfoCommand *command.UpdatePartnerInfoCommand) (data interface{}, err error) { | ||
| 91 | + var ( | ||
| 92 | + transactionContext, _ = factory.CreateTransactionContext(nil) | ||
| 93 | + PartnerInfo *domain.PartnerInfo | ||
| 94 | + ) | ||
| 95 | + if err = updatePartnerInfoCommand.ValidateCommand(); err != nil { | ||
| 96 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 97 | + } | ||
| 98 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 99 | + return nil, err | ||
| 100 | + } | ||
| 101 | + defer func() { | ||
| 102 | + if err != nil { | ||
| 103 | + transactionContext.RollbackTransaction() | ||
| 104 | + } | ||
| 105 | + }() | ||
| 106 | + var PartnerInfoRepository domain.PartnerInfoRepository | ||
| 107 | + if PartnerInfoRepository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{"transactionContext": transactionContext}); err != nil { | ||
| 108 | + return nil, err | ||
| 109 | + } | ||
| 110 | + PartnerInfo, err = PartnerInfoRepository.FindOne(map[string]interface{}{"Id": updatePartnerInfoCommand.Id}) | ||
| 111 | + if err != nil { | ||
| 112 | + return nil, err | ||
| 113 | + } | ||
| 114 | + if PartnerInfo == nil { | ||
| 115 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(updatePartnerInfoCommand.Id))) | ||
| 116 | + } | ||
| 117 | + //if count, PartnerInfos, err := PartnerInfoRepository.Find(map[string]interface{}{ | ||
| 118 | + // "PartnerInfoName": updatePartnerInfoCommand.PartnerInfoName, | ||
| 119 | + // "companyId": PartnerInfo.CompanyId, | ||
| 120 | + //}); err != nil { | ||
| 121 | + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 122 | + //} else { | ||
| 123 | + // if count > 0 && PartnerInfos[0].PartnerInfoId != PartnerInfo.PartnerInfoId { | ||
| 124 | + // return nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, "标签不可重复名称") | ||
| 125 | + // } | ||
| 126 | + //} | ||
| 127 | + if err := PartnerInfo.Update(tool_funs.SimpleStructToMap(updatePartnerInfoCommand)); err != nil { | ||
| 128 | + return nil, err | ||
| 129 | + } | ||
| 130 | + | ||
| 131 | + if data, err = PartnerInfoRepository.Save(PartnerInfo); err != nil { | ||
| 132 | + return nil, err | ||
| 133 | + } | ||
| 134 | + err = transactionContext.CommitTransaction() | ||
| 135 | + return | ||
| 136 | +} | ||
| 137 | + | ||
| 138 | +// 移除客户价值 | ||
| 139 | +func (PartnerInfoService *PartnerInfoService) RemovePartnerInfo(removePartnerInfoCommand *command.RemovePartnerInfoCommand) (data interface{}, err error) { | ||
| 140 | + var ( | ||
| 141 | + transactionContext, _ = factory.CreateTransactionContext(nil) | ||
| 142 | + PartnerInfo *domain.PartnerInfo | ||
| 143 | + ) | ||
| 144 | + if err = removePartnerInfoCommand.ValidateCommand(); err != nil { | ||
| 145 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 146 | + } | ||
| 147 | + if err = transactionContext.StartTransaction(); err != nil { | ||
| 148 | + return nil, err | ||
| 149 | + } | ||
| 150 | + defer func() { | ||
| 151 | + if err != nil { | ||
| 152 | + transactionContext.RollbackTransaction() | ||
| 153 | + } | ||
| 154 | + }() | ||
| 155 | + var PartnerInfoRepository domain.PartnerInfoRepository | ||
| 156 | + if PartnerInfoRepository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{"transactionContext": transactionContext}); err != nil { | ||
| 157 | + return nil, err | ||
| 158 | + } | ||
| 159 | + PartnerInfo, err = PartnerInfoRepository.FindOne(map[string]interface{}{"Id": removePartnerInfoCommand.Id}) | ||
| 160 | + if err != nil { | ||
| 161 | + return nil, err | ||
| 162 | + } | ||
| 163 | + if PartnerInfo == nil { | ||
| 164 | + return nil, application.ThrowError(application.RES_NO_FIND_ERROR, fmt.Sprintf("%s", string(removePartnerInfoCommand.Id))) | ||
| 165 | + } | ||
| 166 | + if data, err = PartnerInfoRepository.Remove(PartnerInfo); err != nil { | ||
| 167 | + return nil, err | ||
| 168 | + } | ||
| 169 | + err = transactionContext.CommitTransaction() | ||
| 170 | + return | ||
| 171 | +} | ||
| 172 | + | ||
| 173 | +// 返回客户价值列表 | ||
| 174 | +func (PartnerInfoService *PartnerInfoService) ListPartnerInfo(listPartnerInfoQuery *query.ListPartnerInfoQuery) (data interface{}, err error) { | ||
| 175 | + var ( | ||
| 176 | + transactionContext, _ = factory.CreateTransactionContext(nil) | ||
| 177 | + PartnerInfos []*domain.PartnerInfo | ||
| 178 | + count int64 | ||
| 179 | + ) | ||
| 180 | + if err = listPartnerInfoQuery.ValidateQuery(); err != nil { | ||
| 181 | + return nil, application.ThrowError(application.ARG_ERROR, err.Error()) | ||
| 182 | + } | ||
| 183 | + if err := transactionContext.StartTransaction(); err != nil { | ||
| 184 | + return nil, err | ||
| 185 | + } | ||
| 186 | + defer func() { | ||
| 187 | + if err != nil { | ||
| 188 | + transactionContext.RollbackTransaction() | ||
| 189 | + } | ||
| 190 | + }() | ||
| 191 | + var PartnerInfoRepository domain.PartnerInfoRepository | ||
| 192 | + if PartnerInfoRepository, err = factory.CreatePartnerInfoRepository(map[string]interface{}{"transactionContext": transactionContext}); err != nil { | ||
| 193 | + return nil, err | ||
| 194 | + } | ||
| 195 | + if count, PartnerInfos, err = PartnerInfoRepository.Find(tool_funs.SimpleStructToMap(listPartnerInfoQuery)); err != nil { | ||
| 196 | + return nil, err | ||
| 197 | + } | ||
| 198 | + if err = transactionContext.CommitTransaction(); err != nil { | ||
| 199 | + return nil, err | ||
| 200 | + } | ||
| 201 | + return map[string]interface{}{ | ||
| 202 | + "count": count, | ||
| 203 | + "partnerInfos": PartnerInfos, | ||
| 204 | + }, nil | ||
| 205 | +} | ||
| 206 | + | ||
| 207 | +func NewPartnerInfoService(options map[string]interface{}) *PartnerInfoService { | ||
| 208 | + newPartnerInfoService := &PartnerInfoService{} | ||
| 209 | + return newPartnerInfoService | ||
| 210 | +} |
pkg/constant/common.go
0 → 100644
| 1 | +package constant | ||
| 2 | + | ||
| 3 | +import "os" | ||
| 4 | + | ||
| 5 | +const SERVICE_NAME = "partner" | ||
| 6 | + | ||
| 7 | +var LOG_LEVEL = "debug" | ||
| 8 | +var LOG_File = "app.log" | ||
| 9 | +var ABILITY_SERVICE_HOST = "https://suplus-worth-app-gateway-dev.fjmaimaimai.com" | ||
| 10 | +var MMM_OPEN_API_SERVICE_HOST = "http://mmm-open-api-dev.fjmaimaimai.com" | ||
| 11 | + | ||
| 12 | +func init() { | ||
| 13 | + if os.Getenv("LOG_LEVEL") != "" { | ||
| 14 | + LOG_LEVEL = os.Getenv("LOG_LEVEL") | ||
| 15 | + } | ||
| 16 | + if os.Getenv("ABILITY_SERVICE_HOST") != "" { | ||
| 17 | + ABILITY_SERVICE_HOST = os.Getenv("ABILITY_SERVICE_HOST") | ||
| 18 | + } | ||
| 19 | + if os.Getenv("MMM_OPEN_API_SERVICE_HOST") != "" { | ||
| 20 | + MMM_OPEN_API_SERVICE_HOST = os.Getenv("MMM_OPEN_API_SERVICE_HOST") | ||
| 21 | + } | ||
| 22 | +} |
pkg/constant/postgresql.go
0 → 100644
| 1 | +package constant | ||
| 2 | + | ||
| 3 | +import "os" | ||
| 4 | + | ||
| 5 | +var POSTGRESQL_DB_NAME = "partner" | ||
| 6 | +var POSTGRESQL_USER = "postgres" | ||
| 7 | +var POSTGRESQL_PASSWORD = "pgsql@123" | ||
| 8 | +var POSTGRESQL_HOST = "127.0.0.1" | ||
| 9 | +var POSTGRESQL_PORT = "5432" | ||
| 10 | +var DISABLE_CREATE_TABLE = false | ||
| 11 | +var DISABLE_SQL_GENERATE_PRINT = false | ||
| 12 | + | ||
| 13 | +func init() { | ||
| 14 | + if os.Getenv("POSTGRESQL_DB_NAME") != "" { | ||
| 15 | + POSTGRESQL_DB_NAME = os.Getenv("POSTGRESQL_DB_NAME") | ||
| 16 | + } | ||
| 17 | + if os.Getenv("POSTGRESQL_USER") != "" { | ||
| 18 | + POSTGRESQL_USER = os.Getenv("POSTGRESQL_USER") | ||
| 19 | + } | ||
| 20 | + if os.Getenv("POSTGRESQL_PASSWORD") != "" { | ||
| 21 | + POSTGRESQL_PASSWORD = os.Getenv("POSTGRESQL_PASSWORD") | ||
| 22 | + } | ||
| 23 | + if os.Getenv("POSTGRESQL_HOST") != "" { | ||
| 24 | + POSTGRESQL_HOST = os.Getenv("POSTGRESQL_HOST") | ||
| 25 | + } | ||
| 26 | + if os.Getenv("POSTGRESQL_PORT") != "" { | ||
| 27 | + POSTGRESQL_PORT = os.Getenv("POSTGRESQL_PORT") | ||
| 28 | + } | ||
| 29 | + if os.Getenv("DISABLE_CREATE_TABLE") != "" { | ||
| 30 | + DISABLE_CREATE_TABLE = true | ||
| 31 | + } | ||
| 32 | + if os.Getenv("DISABLE_SQL_GENERATE_PRINT") != "" { | ||
| 33 | + DISABLE_SQL_GENERATE_PRINT = true | ||
| 34 | + } | ||
| 35 | +} |
pkg/domain/event/taskRobed.go
0 → 100644
| 1 | +package event | ||
| 2 | + | ||
| 3 | +//import ( | ||
| 4 | +// coreDomain "github.com/linmadan/egglib-go/core/domain" | ||
| 5 | +// "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain" | ||
| 6 | +//) | ||
| 7 | +// | ||
| 8 | +//const TASK_ROBED_EVENT = "task-robed-event" | ||
| 9 | +// | ||
| 10 | +//type TaskRobed struct { | ||
| 11 | +// coreDomain.BaseEvent | ||
| 12 | +// // 任务ID | ||
| 13 | +// TaskId int64 `json:"taskId"` | ||
| 14 | +// // 公司ID | ||
| 15 | +// CompanyId int64 `json:"companyId"` | ||
| 16 | +// // 任务名称 | ||
| 17 | +// TaskName string `json:"taskName"` | ||
| 18 | +// // 任务类型Type | ||
| 19 | +// TaskType int `json:"taskType"` | ||
| 20 | +// // 任务发起者 | ||
| 21 | +// Sponsor *domain.EmployeeInfo `json:"sponsor"` | ||
| 22 | +// // 任务状态 | ||
| 23 | +// TaskStatus int `json:"taskStatus"` | ||
| 24 | +// // 引用资源 | ||
| 25 | +// ReferenceResource *domain.ReferenceResource `json:"referenceResource"` | ||
| 26 | +// // 抢单任务信息 | ||
| 27 | +// RobInfo *domain.RobInfo `json:"robInfo"` | ||
| 28 | +//} | ||
| 29 | +// | ||
| 30 | +//func (event *TaskRobed) EventType() string { | ||
| 31 | +// return TASK_ROBED_EVENT | ||
| 32 | +//} |
pkg/domain/partner_info.go
0 → 100644
| 1 | +package domain | ||
| 2 | + | ||
| 3 | +import "time" | ||
| 4 | + | ||
| 5 | +type PartnerInfoRepository interface { | ||
| 6 | + Save(dm *PartnerInfo) (*PartnerInfo, error) | ||
| 7 | + Remove(dm *PartnerInfo) (*PartnerInfo, error) | ||
| 8 | + FindOne(queryOptions map[string]interface{}) (*PartnerInfo, error) | ||
| 9 | + Find(queryOptions map[string]interface{}) (int64, []*PartnerInfo, error) | ||
| 10 | +} | ||
| 11 | + | ||
| 12 | +type PartnerInfo struct { | ||
| 13 | + // 合伙人ID | ||
| 14 | + Id int64 `json:"id"` | ||
| 15 | + // 合伙人姓名 | ||
| 16 | + PartnerName string `json:"partnerName"` | ||
| 17 | + // 登录账号 | ||
| 18 | + Account string `json:"account"` | ||
| 19 | + // 登录密码 | ||
| 20 | + Password string `json:"password"` | ||
| 21 | + // 状态(1:启用或者0:禁用) | ||
| 22 | + Status int `json:"status"` | ||
| 23 | + // 合伙类别 (1.研发合伙人 2.业务合伙人 3.事业) | ||
| 24 | + PartnerCategory int `json:"partnerCategory"` | ||
| 25 | + | ||
| 26 | + //创建时间 | ||
| 27 | + CreateAt time.Time `json:"createAt"` | ||
| 28 | + //更新时间 | ||
| 29 | + UpdateAt time.Time `json:"updateAt"` | ||
| 30 | + | ||
| 31 | + //关联业务员 | ||
| 32 | + Salesman []*Salesman `json:"salesman"` | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +func (m *PartnerInfo) Identify() interface{} { | ||
| 36 | + if m.Id == 0 { | ||
| 37 | + return nil | ||
| 38 | + } | ||
| 39 | + return m.Id | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +func (m *PartnerInfo) Update(data map[string]interface{}) error { | ||
| 43 | + if partnerName, ok := data["partnerName"]; ok && partnerName != "" { | ||
| 44 | + m.PartnerName = partnerName.(string) | ||
| 45 | + } | ||
| 46 | + if account, ok := data["account"]; ok && account != "" { | ||
| 47 | + m.Account = account.(string) | ||
| 48 | + } | ||
| 49 | + if password, ok := data["account"]; ok && password != "" { | ||
| 50 | + m.Password = password.(string) | ||
| 51 | + } | ||
| 52 | + if status, ok := data["status"]; ok && status != 0 { | ||
| 53 | + m.Status = status.(int) | ||
| 54 | + } | ||
| 55 | + if partnerCategory, ok := data["partnerCategory"]; ok && partnerCategory != 0 { | ||
| 56 | + m.PartnerCategory = partnerCategory.(int) | ||
| 57 | + } | ||
| 58 | + if salesman, ok := data["salesman"]; ok { | ||
| 59 | + m.Salesman = salesman.([]*Salesman) | ||
| 60 | + } | ||
| 61 | + m.UpdateAt = time.Now() | ||
| 62 | + return nil | ||
| 63 | +} |
pkg/domain/salesman.go
0 → 100644
pkg/domain/service/rob_task.go
0 → 100644
| 1 | +package service | ||
| 2 | + | ||
| 3 | +//import ( | ||
| 4 | +// coreDomain "github.com/linmadan/egglib-go/core/domain" | ||
| 5 | +// "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain" | ||
| 6 | +//) | ||
| 7 | +// | ||
| 8 | +//type RobTaskService interface { | ||
| 9 | +// coreDomain.DomainEventPublisher | ||
| 10 | +// Rob(taskId int64, receiverUid int64) (*domain.Task, error) | ||
| 11 | +//} |
pkg/infrastructure/dao/pg_employee_dao.go
0 → 100644
| 1 | +package dao | ||
| 2 | + | ||
| 3 | +//import ( | ||
| 4 | +// "fmt" | ||
| 5 | +// "github.com/go-pg/pg/v10" | ||
| 6 | +// pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 7 | +// "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain" | ||
| 8 | +// "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/pg/models" | ||
| 9 | +// "time" | ||
| 10 | +//) | ||
| 11 | +// | ||
| 12 | +//type EmployeeDao struct { | ||
| 13 | +// transactionContext *pgTransaction.TransactionContext | ||
| 14 | +//} | ||
| 15 | +// | ||
| 16 | +//func (dao *EmployeeDao) BatchRemove(uids []int64) error { | ||
| 17 | +// tx := dao.transactionContext.PgTx | ||
| 18 | +// _, err := tx.QueryOne( | ||
| 19 | +// pg.Scan(), | ||
| 20 | +// "DELETE FROM employees WHERE uid IN (?)", | ||
| 21 | +// pg.In(uids)) | ||
| 22 | +// return err | ||
| 23 | +//} | ||
| 24 | +// | ||
| 25 | +//func (dao *EmployeeDao) BatchSetStatus(uids []int64, status int) error { | ||
| 26 | +// tx := dao.transactionContext.PgTx | ||
| 27 | +// _, err := tx.QueryOne( | ||
| 28 | +// pg.Scan(), | ||
| 29 | +// "UPDATE employees SET status=? WHERE uid IN (?)", | ||
| 30 | +// status, pg.In(uids)) | ||
| 31 | +// return err | ||
| 32 | +//} | ||
| 33 | +// | ||
| 34 | +//func (dao *EmployeeDao) ChangePrincipal(companyId int64, employeeAccount string) error { | ||
| 35 | +// tx := dao.transactionContext.PgTx | ||
| 36 | +// if _, err := tx.Query( | ||
| 37 | +// pg.Scan(), | ||
| 38 | +// "UPDATE employees SET is_principal=? WHERE company_id=?", | ||
| 39 | +// false, companyId); err != nil { | ||
| 40 | +// return err | ||
| 41 | +// } | ||
| 42 | +// if _, err := tx.QueryOne( | ||
| 43 | +// pg.Scan(), | ||
| 44 | +// "UPDATE employees SET is_principal=? WHERE company_id=? AND employee_account=?", | ||
| 45 | +// true, companyId, employeeAccount); err != nil { | ||
| 46 | +// return err | ||
| 47 | +// } | ||
| 48 | +// return nil | ||
| 49 | +//} | ||
| 50 | +// | ||
| 51 | +//func (dao *EmployeeDao) TransferSuMoney(uid int64, suMoney float64) error { | ||
| 52 | +// tx := dao.transactionContext.PgTx | ||
| 53 | +// _, err := tx.QueryOne( | ||
| 54 | +// pg.Scan(), | ||
| 55 | +// "UPDATE employees SET su_money=su_money+? WHERE uid=?", | ||
| 56 | +// suMoney, uid) | ||
| 57 | +// return err | ||
| 58 | +//} | ||
| 59 | +// | ||
| 60 | +//func (dao *EmployeeDao) CalculatePersonUnReadNotification(uid int64) (map[string]int, error) { | ||
| 61 | +// var unReadSystemNotification int | ||
| 62 | +// var unReadInteractionNotification int | ||
| 63 | +// tx := dao.transactionContext.PgTx | ||
| 64 | +// sentNotificationModel := new(models.SentNotification) | ||
| 65 | +// if count, err := tx.Model(sentNotificationModel).Relation("Notification"). | ||
| 66 | +// Where(`sent_notification.receiver @> '{"uid":?}'`, uid). | ||
| 67 | +// Where("notification.notification_type = ?", domain.NOTIFICATION_TYPE_SYSTEM). | ||
| 68 | +// Where("sent_notification.is_read = ?", false). | ||
| 69 | +// Count(); err != nil { | ||
| 70 | +// return nil, err | ||
| 71 | +// } else { | ||
| 72 | +// unReadSystemNotification = count | ||
| 73 | +// } | ||
| 74 | +// if count, err := tx.Model(sentNotificationModel).Relation("Notification"). | ||
| 75 | +// Where(`sent_notification.receiver @> '{"uid":?}'`, uid). | ||
| 76 | +// Where("notification.notification_type = ?", domain.NOTIFICATION_TYPE_INTERACTION). | ||
| 77 | +// Where("sent_notification.is_read = ?", false). | ||
| 78 | +// Count(); err != nil { | ||
| 79 | +// return nil, err | ||
| 80 | +// } else { | ||
| 81 | +// unReadInteractionNotification = count | ||
| 82 | +// } | ||
| 83 | +// return map[string]int{ | ||
| 84 | +// "unReadSystemNotification": unReadSystemNotification, | ||
| 85 | +// "unReadInteractionNotification": unReadInteractionNotification, | ||
| 86 | +// }, nil | ||
| 87 | +//} | ||
| 88 | +// | ||
| 89 | +//func (dao *EmployeeDao) CalculatePersonSuMoney(uid int64) (map[string]interface{}, error) { | ||
| 90 | +// var incomeSuMoney float64 | ||
| 91 | +// var incomeSuMoneyOfYesterday float64 | ||
| 92 | +// tx := dao.transactionContext.PgTx | ||
| 93 | +// suMoneyTransactionRecordModel := new(models.SuMoneyTransactionRecord) | ||
| 94 | +// yesterday := time.Now().AddDate(0, 0, -1) | ||
| 95 | +// if err := tx.Model(suMoneyTransactionRecordModel). | ||
| 96 | +// ColumnExpr("sum(su_money_transaction_record.su_money) AS income_su_money"). | ||
| 97 | +// Where(`su_money_transaction_record.employee @> '{"uid":?}'`, uid). | ||
| 98 | +// Where(`su_money_transaction_record.record_type = ?`, 2). | ||
| 99 | +// Where(`su_money_transaction_record.create_time > ?`, time.Date(yesterday.Year(), yesterday.Month(), yesterday.Day(), 0, 0, 0, 0, yesterday.Location())). | ||
| 100 | +// Where(`su_money_transaction_record.create_time < ?`, time.Date(yesterday.Year(), yesterday.Month(), yesterday.Day(), 23, 59, 59, 0, yesterday.Location())). | ||
| 101 | +// Select(&incomeSuMoneyOfYesterday); err != nil { | ||
| 102 | +// return nil, err | ||
| 103 | +// } | ||
| 104 | +// if err := tx.Model(suMoneyTransactionRecordModel). | ||
| 105 | +// ColumnExpr("sum(su_money_transaction_record.su_money) AS income_su_money"). | ||
| 106 | +// Where(`su_money_transaction_record.employee @> '{"uid":?}'`, uid). | ||
| 107 | +// Where(`su_money_transaction_record.record_type = ?`, 2). | ||
| 108 | +// Select(&incomeSuMoney); err != nil { | ||
| 109 | +// return nil, err | ||
| 110 | +// } | ||
| 111 | +// return map[string]interface{}{ | ||
| 112 | +// "incomeSuMoney": incomeSuMoney, | ||
| 113 | +// "incomeSuMoneyOfYesterday": incomeSuMoneyOfYesterday, | ||
| 114 | +// }, nil | ||
| 115 | +//} | ||
| 116 | +// | ||
| 117 | +//func (dao *EmployeeDao) CalculateSuMoneyTransactionRecord(uid int64, transactionStartTime time.Time, transactionEndTime time.Time) (map[string]interface{}, error) { | ||
| 118 | +// var incomeSuMoney float64 | ||
| 119 | +// var expendSuMoney float64 | ||
| 120 | +// tx := dao.transactionContext.PgTx | ||
| 121 | +// suMoneyTransactionRecordModel := new(models.SuMoneyTransactionRecord) | ||
| 122 | +// if err := tx.Model(suMoneyTransactionRecordModel). | ||
| 123 | +// ColumnExpr("sum(su_money_transaction_record.su_money) AS income_su_money"). | ||
| 124 | +// Where(`su_money_transaction_record.employee @> '{"uid":?}'`, uid). | ||
| 125 | +// Where(`su_money_transaction_record.record_type IN (?)`, pg.In([]int{2, 3})). | ||
| 126 | +// Where(`su_money_transaction_record.create_time > ?`, transactionStartTime). | ||
| 127 | +// Where(`su_money_transaction_record.create_time < ?`, transactionEndTime). | ||
| 128 | +// Select(&incomeSuMoney); err != nil { | ||
| 129 | +// return nil, err | ||
| 130 | +// } | ||
| 131 | +// if err := tx.Model(suMoneyTransactionRecordModel). | ||
| 132 | +// ColumnExpr("sum(su_money_transaction_record.su_money) AS expend_su_money"). | ||
| 133 | +// Where(`su_money_transaction_record.employee @> '{"uid":?}'`, uid). | ||
| 134 | +// Where(`su_money_transaction_record.record_type IN (?)`, pg.In([]int{1, 4})). | ||
| 135 | +// Where(`su_money_transaction_record.create_time > ?`, transactionStartTime). | ||
| 136 | +// Where(`su_money_transaction_record.create_time < ?`, transactionEndTime). | ||
| 137 | +// Select(&expendSuMoney); err != nil { | ||
| 138 | +// return nil, err | ||
| 139 | +// } | ||
| 140 | +// return map[string]interface{}{ | ||
| 141 | +// "incomeSuMoney": incomeSuMoney, | ||
| 142 | +// "expendSuMoney": expendSuMoney, | ||
| 143 | +// }, nil | ||
| 144 | +//} | ||
| 145 | +// | ||
| 146 | +//func NewEmployeeDao(transactionContext *pgTransaction.TransactionContext) (*EmployeeDao, error) { | ||
| 147 | +// if transactionContext == nil { | ||
| 148 | +// return nil, fmt.Errorf("transactionContext参数不能为nil") | ||
| 149 | +// } else { | ||
| 150 | +// return &EmployeeDao{ | ||
| 151 | +// transactionContext: transactionContext, | ||
| 152 | +// }, nil | ||
| 153 | +// } | ||
| 154 | +//} |
| 1 | +package domain_service | ||
| 2 | + | ||
| 3 | +//import ( | ||
| 4 | +// "fmt" | ||
| 5 | +// coreDomain "github.com/linmadan/egglib-go/core/domain" | ||
| 6 | +// pgTransaction "github.com/linmadan/egglib-go/transaction/pg" | ||
| 7 | +// "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain" | ||
| 8 | +// "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/domain/event" | ||
| 9 | +// "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/dao" | ||
| 10 | +// "gitlab.fjmaimaimai.com/linmadan/mmm-worth/pkg/infrastructure/repository" | ||
| 11 | +// "time" | ||
| 12 | +//) | ||
| 13 | +// | ||
| 14 | +//type RobTaskService struct { | ||
| 15 | +// coreDomain.BaseEventPublisher | ||
| 16 | +// transactionContext *pgTransaction.TransactionContext | ||
| 17 | +//} | ||
| 18 | +// | ||
| 19 | +//func (service *RobTaskService) Rob(taskId int64, receiverUid int64) (*domain.Task, error) { | ||
| 20 | +// var employeeRepository domain.EmployeeRepository | ||
| 21 | +// var taskRepository domain.TaskRepository | ||
| 22 | +// var taskDao *dao.TaskDao | ||
| 23 | +// if repository, err := repository.NewEmployeeRepository(service.transactionContext); err != nil { | ||
| 24 | +// return nil, err | ||
| 25 | +// } else { | ||
| 26 | +// employeeRepository = repository | ||
| 27 | +// } | ||
| 28 | +// if repository, err := repository.NewTaskRepository(service.transactionContext); err != nil { | ||
| 29 | +// return nil, err | ||
| 30 | +// } else { | ||
| 31 | +// taskRepository = repository | ||
| 32 | +// } | ||
| 33 | +// if dao, err := dao.NewTaskDao(service.transactionContext); err != nil { | ||
| 34 | +// return nil, err | ||
| 35 | +// } else { | ||
| 36 | +// taskDao = dao | ||
| 37 | +// } | ||
| 38 | +// receiver, err := employeeRepository.FindOne(map[string]interface{}{ | ||
| 39 | +// "uid": receiverUid, | ||
| 40 | +// }) | ||
| 41 | +// if err != nil { | ||
| 42 | +// return nil, err | ||
| 43 | +// } | ||
| 44 | +// if receiver == nil { | ||
| 45 | +// return nil, fmt.Errorf("无效的领取人") | ||
| 46 | +// } | ||
| 47 | +// task, err := taskRepository.FindOne(map[string]interface{}{ | ||
| 48 | +// "taskId": taskId, | ||
| 49 | +// }) | ||
| 50 | +// if err != nil { | ||
| 51 | +// return nil, err | ||
| 52 | +// } | ||
| 53 | +// if task == nil { | ||
| 54 | +// return nil, fmt.Errorf("无效的任务") | ||
| 55 | +// } | ||
| 56 | +// if receiver.EmployeeInfo.Uid == task.Sponsor.Uid { | ||
| 57 | +// return nil, fmt.Errorf("无法领取自己发布的任务") | ||
| 58 | +// } | ||
| 59 | +// if task.RobInfo != nil && task.RobInfo.Receiver != nil { | ||
| 60 | +// return nil, fmt.Errorf("任务已经被人领取") | ||
| 61 | +// } | ||
| 62 | +// if err := task.Rob(receiver.EmployeeInfo); err != nil { | ||
| 63 | +// return nil, err | ||
| 64 | +// } | ||
| 65 | +// if err := taskDao.AddRobInfo(taskId, receiver.EmployeeInfo); err != nil { | ||
| 66 | +// return nil, fmt.Errorf("抢单失败,任务可能已经被人领取") | ||
| 67 | +// } | ||
| 68 | +// if task, err := taskRepository.Save(task); err != nil { | ||
| 69 | +// return nil, err | ||
| 70 | +// } else { | ||
| 71 | +// taskRobedEvent := new(event.TaskRobed) | ||
| 72 | +// taskRobedEvent.OccurredOn = time.Now() | ||
| 73 | +// taskRobedEvent.TaskId = task.TaskId | ||
| 74 | +// taskRobedEvent.CompanyId = task.CompanyId | ||
| 75 | +// taskRobedEvent.TaskName = task.TaskName | ||
| 76 | +// taskRobedEvent.TaskType = task.TaskType | ||
| 77 | +// taskRobedEvent.Sponsor = task.Sponsor | ||
| 78 | +// taskRobedEvent.TaskStatus = task.TaskStatus | ||
| 79 | +// taskRobedEvent.ReferenceResource = task.ReferenceResource | ||
| 80 | +// taskRobedEvent.RobInfo = task.RobInfo | ||
| 81 | +// if err := service.Publish(taskRobedEvent); err != nil { | ||
| 82 | +// return nil, err | ||
| 83 | +// } | ||
| 84 | +// return task, nil | ||
| 85 | +// } | ||
| 86 | +//} | ||
| 87 | +// | ||
| 88 | +//func NewRobTaskService(transactionContext *pgTransaction.TransactionContext) (*RobTaskService, error) { | ||
| 89 | +// if transactionContext == nil { | ||
| 90 | +// return nil, fmt.Errorf("transactionContext参数不能为nil") | ||
| 91 | +// } else { | ||
| 92 | +// return &RobTaskService{ | ||
| 93 | +// transactionContext: transactionContext, | ||
| 94 | +// }, nil | ||
| 95 | +// } | ||
| 96 | +//} |
pkg/infrastructure/pg/init.go
0 → 100644
| 1 | +package pg | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "context" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/go-pg/pg/v10" | ||
| 7 | + "github.com/go-pg/pg/v10/orm" | ||
| 8 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/constant" | ||
| 9 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg/models" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +var DB *pg.DB | ||
| 13 | + | ||
| 14 | +func init() { | ||
| 15 | + DB = pg.Connect(&pg.Options{ | ||
| 16 | + User: constant.POSTGRESQL_USER, | ||
| 17 | + Password: constant.POSTGRESQL_PASSWORD, | ||
| 18 | + Database: constant.POSTGRESQL_DB_NAME, | ||
| 19 | + Addr: fmt.Sprintf("%s:%s", constant.POSTGRESQL_HOST, constant.POSTGRESQL_PORT), | ||
| 20 | + }) | ||
| 21 | + if !constant.DISABLE_SQL_GENERATE_PRINT { | ||
| 22 | + DB.AddQueryHook(SqlGeneratePrintHook{}) | ||
| 23 | + } | ||
| 24 | + if !constant.DISABLE_CREATE_TABLE { | ||
| 25 | + for _, model := range []interface{}{ | ||
| 26 | + //(*models.Employee)(nil), | ||
| 27 | + (*models.PartnerInfo)(nil), | ||
| 28 | + } { | ||
| 29 | + err := DB.CreateTable(model, &orm.CreateTableOptions{ | ||
| 30 | + Temp: false, | ||
| 31 | + IfNotExists: true, | ||
| 32 | + FKConstraints: true, | ||
| 33 | + }) | ||
| 34 | + if err != nil { | ||
| 35 | + panic(err) | ||
| 36 | + } | ||
| 37 | + } | ||
| 38 | + } | ||
| 39 | +} | ||
| 40 | + | ||
| 41 | +type SqlGeneratePrintHook struct{} | ||
| 42 | + | ||
| 43 | +func (hook SqlGeneratePrintHook) BeforeQuery(c context.Context, q *pg.QueryEvent) (context.Context, error) { | ||
| 44 | + return c, nil | ||
| 45 | +} | ||
| 46 | + | ||
| 47 | +func (hook SqlGeneratePrintHook) AfterQuery(c context.Context, q *pg.QueryEvent) error { | ||
| 48 | + data, err := q.FormattedQuery() | ||
| 49 | + fmt.Println(string(data)) | ||
| 50 | + return err | ||
| 51 | +} |
pkg/infrastructure/pg/models/partner_info.go
0 → 100644
| 1 | +package models | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain" | ||
| 5 | + "time" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +type PartnerInfo struct { | ||
| 9 | + tableName struct{} `pg:"partner_infos,alias:partner_info"` | ||
| 10 | + // 合伙人ID | ||
| 11 | + Id int64 `pg:",pk"` | ||
| 12 | + // 合伙人姓名 | ||
| 13 | + PartnerName string | ||
| 14 | + // 登录账号 | ||
| 15 | + Account string | ||
| 16 | + // 登录密码 | ||
| 17 | + Password string | ||
| 18 | + // 状态(1:启用或者0:禁用) | ||
| 19 | + Status int `pg:",notnull,default:1"` | ||
| 20 | + // 合伙类别 (1.研发合伙人 2.业务合伙人 3.事业) | ||
| 21 | + PartnerCategory int `pg:",notnull,default:1"` | ||
| 22 | + | ||
| 23 | + //创建时间 | ||
| 24 | + CreateAt time.Time | ||
| 25 | + //更新时间 | ||
| 26 | + UpdateAt time.Time | ||
| 27 | + | ||
| 28 | + //关联业务员 | ||
| 29 | + Salesman []*domain.Salesman | ||
| 30 | +} |
| 1 | +package transaction | ||
| 2 | + | ||
| 3 | +import "github.com/go-pg/pg/v10" | ||
| 4 | + | ||
| 5 | +type TransactionContext struct { | ||
| 6 | + PgDd *pg.DB | ||
| 7 | + PgTx *pg.Tx | ||
| 8 | +} | ||
| 9 | + | ||
| 10 | +func (transactionContext *TransactionContext) StartTransaction() error { | ||
| 11 | + tx, err := transactionContext.PgDd.Begin() | ||
| 12 | + if err != nil { | ||
| 13 | + return err | ||
| 14 | + } | ||
| 15 | + transactionContext.PgTx = tx | ||
| 16 | + return nil | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +func (transactionContext *TransactionContext) CommitTransaction() error { | ||
| 20 | + err := transactionContext.PgTx.Commit() | ||
| 21 | + return err | ||
| 22 | +} | ||
| 23 | + | ||
| 24 | +func (transactionContext *TransactionContext) RollbackTransaction() error { | ||
| 25 | + err := transactionContext.PgTx.Rollback() | ||
| 26 | + return err | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func NewPGTransactionContext(pgDd *pg.DB) *TransactionContext { | ||
| 30 | + return &TransactionContext{ | ||
| 31 | + PgDd: pgDd, | ||
| 32 | + } | ||
| 33 | +} |
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/domain" | ||
| 5 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg/models" | ||
| 6 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg/transaction" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type PartnerInfoRepository struct { | ||
| 10 | + transactionContext *transaction.TransactionContext | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +func (repository *PartnerInfoRepository) Save(dm *domain.PartnerInfo) (*domain.PartnerInfo, error) { | ||
| 14 | + var ( | ||
| 15 | + err error | ||
| 16 | + m = &models.PartnerInfo{} | ||
| 17 | + tx = repository.transactionContext.PgTx | ||
| 18 | + ) | ||
| 19 | + if err = GobModelTransform(m, dm); err != nil { | ||
| 20 | + return nil, err | ||
| 21 | + } | ||
| 22 | + if dm.Identify() == nil { | ||
| 23 | + if dm.Id, err = NewSnowflakeId(); err != nil { | ||
| 24 | + return dm, err | ||
| 25 | + } | ||
| 26 | + m.Id = dm.Id | ||
| 27 | + if err = tx.Insert(m); err != nil { | ||
| 28 | + return nil, err | ||
| 29 | + } | ||
| 30 | + return dm, nil | ||
| 31 | + } | ||
| 32 | + if err = tx.Update(m); err != nil { | ||
| 33 | + return nil, err | ||
| 34 | + } | ||
| 35 | + return dm, nil | ||
| 36 | +} | ||
| 37 | + | ||
| 38 | +func (repository *PartnerInfoRepository) Remove(PartnerInfo *domain.PartnerInfo) (*domain.PartnerInfo, error) { | ||
| 39 | + var ( | ||
| 40 | + tx = repository.transactionContext.PgTx | ||
| 41 | + PartnerInfoModel = &models.PartnerInfo{Id: PartnerInfo.Identify().(int64)} | ||
| 42 | + ) | ||
| 43 | + if _, err := tx.Model(PartnerInfoModel).Where("id = ?", PartnerInfo.Id).Delete(); err != nil { | ||
| 44 | + return PartnerInfo, err | ||
| 45 | + } | ||
| 46 | + return PartnerInfo, nil | ||
| 47 | +} | ||
| 48 | + | ||
| 49 | +func (repository *PartnerInfoRepository) FindOne(queryOptions map[string]interface{}) (*domain.PartnerInfo, error) { | ||
| 50 | + tx := repository.transactionContext.PgTx | ||
| 51 | + PartnerInfoModel := new(models.PartnerInfo) | ||
| 52 | + query := NewQuery(tx.Model(PartnerInfoModel), queryOptions) | ||
| 53 | + query.SetWhere("partner_info.id = ?", "id") | ||
| 54 | + if err := query.First(); err != nil { | ||
| 55 | + return nil, query.HandleError(err, "没有此合伙人") | ||
| 56 | + } | ||
| 57 | + if PartnerInfoModel.Id == 0 { | ||
| 58 | + return nil, nil | ||
| 59 | + } | ||
| 60 | + return repository.transformPgModelToDomainModel(PartnerInfoModel) | ||
| 61 | +} | ||
| 62 | + | ||
| 63 | +func (repository *PartnerInfoRepository) Find(queryOptions map[string]interface{}) (int64, []*domain.PartnerInfo, error) { | ||
| 64 | + tx := repository.transactionContext.PgTx | ||
| 65 | + var PartnerInfoModels []*models.PartnerInfo | ||
| 66 | + PartnerInfos := make([]*domain.PartnerInfo, 0) | ||
| 67 | + query := NewQuery(tx.Model(&PartnerInfoModels), queryOptions) | ||
| 68 | + query. | ||
| 69 | + SetWhere("partner_info.account = ?", "account"). | ||
| 70 | + SetWhere(`partner_info.status = ?`, "status"). | ||
| 71 | + SetWhere(`partner_info.partner_category = ?`, "partnerCategory"). | ||
| 72 | + SetLimit(). | ||
| 73 | + SetOrder("partner_info.create_at", "sortByCreateTime"). | ||
| 74 | + SetOrder("partner_info.update_at", "sortByUpdateTime") | ||
| 75 | + var err error | ||
| 76 | + if query.AffectRow, err = query.SelectAndCount(); err != nil { | ||
| 77 | + return 0, PartnerInfos, err | ||
| 78 | + } | ||
| 79 | + for _, PartnerInfoModel := range PartnerInfoModels { | ||
| 80 | + if PartnerInfo, err := repository.transformPgModelToDomainModel(PartnerInfoModel); err != nil { | ||
| 81 | + return 0, PartnerInfos, err | ||
| 82 | + } else { | ||
| 83 | + PartnerInfos = append(PartnerInfos, PartnerInfo) | ||
| 84 | + } | ||
| 85 | + } | ||
| 86 | + return int64(query.AffectRow), PartnerInfos, nil | ||
| 87 | +} | ||
| 88 | + | ||
| 89 | +func (repository *PartnerInfoRepository) transformPgModelToDomainModel(PartnerInfoModel *models.PartnerInfo) (*domain.PartnerInfo, error) { | ||
| 90 | + m := &domain.PartnerInfo{} | ||
| 91 | + err := GobModelTransform(m, PartnerInfoModel) | ||
| 92 | + return m, err | ||
| 93 | +} | ||
| 94 | + | ||
| 95 | +func NewPartnerInfoRepository(transactionContext *transaction.TransactionContext) (*PartnerInfoRepository, error) { | ||
| 96 | + if transactionContext == nil { | ||
| 97 | + return nil, ERR_EMPTY_TC | ||
| 98 | + } | ||
| 99 | + return &PartnerInfoRepository{transactionContext: transactionContext}, nil | ||
| 100 | +} |
pkg/infrastructure/repository/repository.go
0 → 100644
| 1 | +package repository | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "bytes" | ||
| 5 | + "encoding/gob" | ||
| 6 | + "fmt" | ||
| 7 | + "github.com/go-pg/pg/v10/orm" | ||
| 8 | + "github.com/linmadan/egglib-go/utils/snowflake" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +var ( | ||
| 12 | + ERR_EMPTY_TC = fmt.Errorf("transactionContext参数不能为nil") | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +type Query struct { | ||
| 16 | + *orm.Query | ||
| 17 | + queryOptions map[string]interface{} | ||
| 18 | + AffectRow int | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +func NewQuery(query *orm.Query, queryOptions map[string]interface{}) *Query { | ||
| 22 | + return &Query{ | ||
| 23 | + query, | ||
| 24 | + queryOptions, | ||
| 25 | + 0, | ||
| 26 | + } | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +func (query *Query) SetWhere(condition, key string) *Query { | ||
| 30 | + if v, ok := query.queryOptions[key]; ok { | ||
| 31 | + query.Where(condition, v) | ||
| 32 | + } | ||
| 33 | + return query | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +func (query *Query) SetLimit() *Query { | ||
| 37 | + if offset, ok := query.queryOptions["offset"]; ok { | ||
| 38 | + offset := offset.(int) | ||
| 39 | + if offset > -1 { | ||
| 40 | + query.Offset(offset) | ||
| 41 | + } | ||
| 42 | + } else { | ||
| 43 | + query.Offset(0) | ||
| 44 | + } | ||
| 45 | + if limit, ok := query.queryOptions["limit"]; ok { | ||
| 46 | + limit := limit.(int) | ||
| 47 | + if limit > -1 { | ||
| 48 | + query.Limit(limit) | ||
| 49 | + } else { | ||
| 50 | + query.Limit(20) | ||
| 51 | + } | ||
| 52 | + } | ||
| 53 | + return query | ||
| 54 | +} | ||
| 55 | + | ||
| 56 | +func (query *Query) SetOrder(orderColumn string, key string) *Query { | ||
| 57 | + //query.Order(condition...) | ||
| 58 | + //return query | ||
| 59 | + if v, ok := query.queryOptions[key]; ok { | ||
| 60 | + query.Order(fmt.Sprintf("%v %v", orderColumn, v)) | ||
| 61 | + } | ||
| 62 | + return query | ||
| 63 | +} | ||
| 64 | + | ||
| 65 | +func (query *Query) HandleError(err error, errMsg string) error { | ||
| 66 | + if err.Error() == "pg: no rows in result set" { | ||
| 67 | + return fmt.Errorf(errMsg) | ||
| 68 | + } else { | ||
| 69 | + return err | ||
| 70 | + } | ||
| 71 | +} | ||
| 72 | + | ||
| 73 | +func NewSnowflakeId() (int64, error) { | ||
| 74 | + IdWorker, err := snowflake.NewIdWorker(2) | ||
| 75 | + if err != nil { | ||
| 76 | + return 0, err | ||
| 77 | + } | ||
| 78 | + id, err := IdWorker.NextId() | ||
| 79 | + return id, err | ||
| 80 | +} | ||
| 81 | + | ||
| 82 | +//GobModelTransform 模型转换 | ||
| 83 | +func GobModelTransform(dst interface{}, src interface{}) error { | ||
| 84 | + var data bytes.Buffer | ||
| 85 | + enc := gob.NewEncoder(&data) | ||
| 86 | + if err := enc.Encode(src); err != nil { | ||
| 87 | + return err | ||
| 88 | + } | ||
| 89 | + dec := gob.NewDecoder(&data) | ||
| 90 | + if err := dec.Decode(dst); err != nil { | ||
| 91 | + return err | ||
| 92 | + } | ||
| 93 | + return nil | ||
| 94 | +} |
| 1 | +package service_gateway | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/constant" | ||
| 5 | + "strings" | ||
| 6 | + "time" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type HttplibAbilityServiceGateway struct { | ||
| 10 | + httplibBaseServiceGateway | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +func (serviceGateway *HttplibAbilityServiceGateway) CommitQuestionQuotes(uid int64, taskId int64, serials []int64) (map[string]interface{}, error) { | ||
| 14 | + url := strings.Join([]string{serviceGateway.baseURL, "task/commitQuestionQuotes"}, "/") | ||
| 15 | + request := serviceGateway.createRequest(url, "post") | ||
| 16 | + options := make(map[string]interface{}) | ||
| 17 | + options["uid"] = uid | ||
| 18 | + options["taskId"] = taskId | ||
| 19 | + options["serials"] = serials | ||
| 20 | + request.JSONBody(options) | ||
| 21 | + response := make(map[string]interface{}) | ||
| 22 | + request.ToJSON(&response) | ||
| 23 | + data, err := serviceGateway.responseHandle(response) | ||
| 24 | + return data, err | ||
| 25 | +} | ||
| 26 | + | ||
| 27 | +func (serviceGateway *HttplibAbilityServiceGateway) CommitQuestionSolution(qid int64, uid int64, solveUid int64, content string, scoreSolve float64, imgs []string, partners []map[string]interface{}) (map[string]interface{}, error) { | ||
| 28 | + url := strings.Join([]string{serviceGateway.baseURL, "task/commitQuestionSolution"}, "/") | ||
| 29 | + request := serviceGateway.createRequest(url, "post") | ||
| 30 | + options := make(map[string]interface{}) | ||
| 31 | + options["qid"] = qid | ||
| 32 | + options["uid"] = uid | ||
| 33 | + options["solveUid"] = solveUid | ||
| 34 | + options["content"] = content | ||
| 35 | + options["scoreSolve"] = scoreSolve | ||
| 36 | + options["imgs"] = imgs | ||
| 37 | + options["partners"] = partners | ||
| 38 | + request.JSONBody(options) | ||
| 39 | + response := make(map[string]interface{}) | ||
| 40 | + request.ToJSON(&response) | ||
| 41 | + data, err := serviceGateway.responseHandle(response) | ||
| 42 | + return data, err | ||
| 43 | +} | ||
| 44 | + | ||
| 45 | +func (serviceGateway *HttplibAbilityServiceGateway) CloseTaskCallback(taskId int64, referenceResourceIds []int64) (map[string]interface{}, error) { | ||
| 46 | + url := strings.Join([]string{serviceGateway.baseURL, "task/closeTaskCallback"}, "/") | ||
| 47 | + request := serviceGateway.createRequest(url, "post") | ||
| 48 | + options := make(map[string]interface{}) | ||
| 49 | + options["taskId"] = taskId | ||
| 50 | + options["referenceResourceIds"] = referenceResourceIds | ||
| 51 | + request.JSONBody(options) | ||
| 52 | + response := make(map[string]interface{}) | ||
| 53 | + request.ToJSON(&response) | ||
| 54 | + data, err := serviceGateway.responseHandle(response) | ||
| 55 | + return data, err | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +func (serviceGateway *HttplibAbilityServiceGateway) ReceiverTaskCallback(uid int64, taskId int64, referenceResourceIds []int64, operatorId int64, operatorTime time.Time) (map[string]interface{}, error) { | ||
| 59 | + url := strings.Join([]string{serviceGateway.baseURL, "task/receiverTaskCallback"}, "/") | ||
| 60 | + request := serviceGateway.createRequest(url, "post") | ||
| 61 | + options := make(map[string]interface{}) | ||
| 62 | + options["uid"] = uid | ||
| 63 | + options["taskId"] = taskId | ||
| 64 | + options["referenceResourceIds"] = referenceResourceIds | ||
| 65 | + options["operator_id"] = operatorId | ||
| 66 | + options["operator_time"] = operatorTime | ||
| 67 | + request.JSONBody(options) | ||
| 68 | + response := make(map[string]interface{}) | ||
| 69 | + request.ToJSON(&response) | ||
| 70 | + data, err := serviceGateway.responseHandle(response) | ||
| 71 | + return data, err | ||
| 72 | +} | ||
| 73 | + | ||
| 74 | +func (serviceGateway *HttplibAbilityServiceGateway) SaveTaskCallback(uid int64, taskId int64, serials []int64) (map[string]interface{}, error) { | ||
| 75 | + url := strings.Join([]string{serviceGateway.baseURL, "task/saveTaskCallback"}, "/") | ||
| 76 | + request := serviceGateway.createRequest(url, "post") | ||
| 77 | + options := make(map[string]interface{}) | ||
| 78 | + options["uid"] = uid | ||
| 79 | + options["taskId"] = taskId | ||
| 80 | + options["serials"] = serials | ||
| 81 | + request.JSONBody(options) | ||
| 82 | + response := make(map[string]interface{}) | ||
| 83 | + request.ToJSON(&response) | ||
| 84 | + data, err := serviceGateway.responseHandle(response) | ||
| 85 | + return data, err | ||
| 86 | +} | ||
| 87 | + | ||
| 88 | +func (serviceGateway *HttplibAbilityServiceGateway) DeleteTaskCallback(uid int64, taskId int64, serials []int64) (map[string]interface{}, error) { | ||
| 89 | + url := strings.Join([]string{serviceGateway.baseURL, "task/deleteTaskCallback"}, "/") | ||
| 90 | + request := serviceGateway.createRequest(url, "post") | ||
| 91 | + options := make(map[string]interface{}) | ||
| 92 | + options["uid"] = uid | ||
| 93 | + options["taskId"] = taskId | ||
| 94 | + options["serials"] = serials | ||
| 95 | + request.JSONBody(options) | ||
| 96 | + response := make(map[string]interface{}) | ||
| 97 | + request.ToJSON(&response) | ||
| 98 | + data, err := serviceGateway.responseHandle(response) | ||
| 99 | + return data, err | ||
| 100 | +} | ||
| 101 | + | ||
| 102 | +func NewHttplibAbilityServiceGateway() *HttplibAbilityServiceGateway { | ||
| 103 | + return &HttplibAbilityServiceGateway{ | ||
| 104 | + httplibBaseServiceGateway: httplibBaseServiceGateway{ | ||
| 105 | + baseURL: constant.ABILITY_SERVICE_HOST, | ||
| 106 | + connectTimeout: 100 * time.Second, | ||
| 107 | + readWriteTimeout: 30 * time.Second, | ||
| 108 | + }, | ||
| 109 | + } | ||
| 110 | +} |
| 1 | +package service_gateway | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/constant" | ||
| 5 | + "strings" | ||
| 6 | + "time" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type HttplibMmmOpenApiServiceGateway struct { | ||
| 10 | + httplibBaseServiceGateway | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +func (serviceGateway *HttplibMmmOpenApiServiceGateway) PushInfo(msgType int, uids []int64, title string, content string, ext map[string]interface{}) (map[string]interface{}, error) { | ||
| 14 | + url := strings.Join([]string{serviceGateway.baseURL, "v1", "push", "pushInfo"}, "/") | ||
| 15 | + request := serviceGateway.createRequest(url, "post") | ||
| 16 | + options := make(map[string]interface{}) | ||
| 17 | + options["mmmType"] = msgType | ||
| 18 | + options["project"] = "worth" | ||
| 19 | + options["receivers"] = uids | ||
| 20 | + options["title"] = title | ||
| 21 | + options["content"] = content | ||
| 22 | + options["ext"] = ext | ||
| 23 | + request.JSONBody(options) | ||
| 24 | + response := make(map[string]interface{}) | ||
| 25 | + request.ToJSON(&response) | ||
| 26 | + data, err := serviceGateway.responseHandle(response) | ||
| 27 | + return data, err | ||
| 28 | +} | ||
| 29 | + | ||
| 30 | +func NewHttplibMmmOpenApiServiceGateway() *HttplibMmmOpenApiServiceGateway { | ||
| 31 | + return &HttplibMmmOpenApiServiceGateway{ | ||
| 32 | + httplibBaseServiceGateway: httplibBaseServiceGateway{ | ||
| 33 | + baseURL: constant.MMM_OPEN_API_SERVICE_HOST, | ||
| 34 | + connectTimeout: 100 * time.Second, | ||
| 35 | + readWriteTimeout: 30 * time.Second, | ||
| 36 | + }, | ||
| 37 | + } | ||
| 38 | +} |
| 1 | +package service_gateway | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "encoding/json" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/astaxie/beego/httplib" | ||
| 7 | + "strconv" | ||
| 8 | + "strings" | ||
| 9 | + "time" | ||
| 10 | +) | ||
| 11 | + | ||
| 12 | +type httplibBaseServiceGateway struct { | ||
| 13 | + baseURL string | ||
| 14 | + connectTimeout time.Duration | ||
| 15 | + readWriteTimeout time.Duration | ||
| 16 | +} | ||
| 17 | + | ||
| 18 | +func (serviceGateway *httplibBaseServiceGateway) createRequest(url string, method string) *httplib.BeegoHTTPRequest { | ||
| 19 | + var request *httplib.BeegoHTTPRequest | ||
| 20 | + switch method { | ||
| 21 | + case "get": | ||
| 22 | + request = httplib.Get(url) | ||
| 23 | + break | ||
| 24 | + case "post": | ||
| 25 | + request = httplib.Post(url) | ||
| 26 | + break | ||
| 27 | + case "put": | ||
| 28 | + request = httplib.Put(url) | ||
| 29 | + break | ||
| 30 | + case "delete": | ||
| 31 | + request = httplib.Delete(url) | ||
| 32 | + break | ||
| 33 | + case "head": | ||
| 34 | + request = httplib.Head(url) | ||
| 35 | + break | ||
| 36 | + default: | ||
| 37 | + request = httplib.Get(url) | ||
| 38 | + } | ||
| 39 | + return request.SetTimeout(serviceGateway.connectTimeout, serviceGateway.readWriteTimeout) | ||
| 40 | +} | ||
| 41 | + | ||
| 42 | +func (serviceGateway *httplibBaseServiceGateway) responseHandle(response map[string]interface{}) (map[string]interface{}, error) { | ||
| 43 | + data := make(map[string]interface{}) | ||
| 44 | + var err error | ||
| 45 | + if code, ok := response["code"]; ok { | ||
| 46 | + code := code.(float64) | ||
| 47 | + if code == 0 { | ||
| 48 | + data = response["data"].(map[string]interface{}) | ||
| 49 | + } else { | ||
| 50 | + msg := response["msg"].(string) | ||
| 51 | + err = fmt.Errorf(strings.Join([]string{strconv.FormatFloat(code, 'f', -1, 64), msg}, " ")) | ||
| 52 | + } | ||
| 53 | + } else { | ||
| 54 | + jsonBytes, marshalErr := json.Marshal(response) | ||
| 55 | + if marshalErr != nil { | ||
| 56 | + err = marshalErr | ||
| 57 | + } | ||
| 58 | + err = fmt.Errorf("无法解析的网关服务数据返回格式:%s", string(jsonBytes)) | ||
| 59 | + } | ||
| 60 | + return data, err | ||
| 61 | +} |
| 1 | +package service_gateway | ||
| 2 | + | ||
| 3 | +import "time" | ||
| 4 | + | ||
| 5 | +type AbilityServiceGateway interface { | ||
| 6 | + CommitQuestionQuotes(uid int64, taskId int64, serials []int64) (map[string]interface{}, error) | ||
| 7 | + CommitQuestionSolution(qid int64, uid int64, solveUid int64, content string, scoreSolve float64, imgs []string, partners []map[string]interface{}) (map[string]interface{}, error) | ||
| 8 | + CloseTaskCallback(taskId int64, referenceResourceIds []int64) (map[string]interface{}, error) | ||
| 9 | + ReceiverTaskCallback(uid int64, taskId int64, referenceResourceIds []int64, operatorId int64, operatorTime time.Time) (map[string]interface{}, error) | ||
| 10 | + SaveTaskCallback(uid int64, taskId int64, serials []int64) (map[string]interface{}, error) | ||
| 11 | + DeleteTaskCallback(uid int64, taskId int64, serials []int64) (map[string]interface{}, error) | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +type MmmOpenApiServiceGateway interface { | ||
| 15 | + PushInfo(msgType int, uids []int64, title string, content string, ext map[string]interface{}) (map[string]interface{}, error) | ||
| 16 | +} |
pkg/log/logger.go
0 → 100644
| 1 | +package constant | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/astaxie/beego/logs" | ||
| 5 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/constant" | ||
| 6 | + "path/filepath" | ||
| 7 | + "strconv" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +var Logger *logs.BeeLogger | ||
| 11 | + | ||
| 12 | +func init() { | ||
| 13 | + Logger = NewBeegoLogger(LoggerConfig{ | ||
| 14 | + Filename: constant.LOG_File, | ||
| 15 | + Level: constant.LOG_LEVEL, | ||
| 16 | + }) | ||
| 17 | +} | ||
| 18 | + | ||
| 19 | +type LoggerConfig struct { | ||
| 20 | + Level string `json:"level,omitempty"` | ||
| 21 | + Filename string `json:"filename,omitempty"` | ||
| 22 | + MaxSize int `json:"max_size,omitempty"` | ||
| 23 | + MaxBackups int `json:"max_backups,omitempty"` | ||
| 24 | + MaxAge int `json:"max_age,omitempty"` | ||
| 25 | + Compress bool `json:"compress,omitempty"` | ||
| 26 | +} | ||
| 27 | + | ||
| 28 | +func NewBeegoLogger(conf LoggerConfig) *logs.BeeLogger { | ||
| 29 | + filename := `{"filename":"` + filepath.ToSlash(conf.Filename) + `"}` | ||
| 30 | + | ||
| 31 | + log := logs.GetBeeLogger() | ||
| 32 | + | ||
| 33 | + log.SetLogger(logs.AdapterFile, filename) | ||
| 34 | + ilv, err := strconv.Atoi(conf.Level) | ||
| 35 | + if err != nil { | ||
| 36 | + ilv = logs.LevelDebug | ||
| 37 | + } | ||
| 38 | + log.SetLevel(ilv) | ||
| 39 | + log.EnableFuncCallDepth(true) | ||
| 40 | + log.SetLogFuncCallDepth(3) | ||
| 41 | + return log | ||
| 42 | +} |
pkg/log/middleware.go
0 → 100644
| 1 | +package constant | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "encoding/json" | ||
| 5 | + "fmt" | ||
| 6 | + "github.com/astaxie/beego/context" | ||
| 7 | + "github.com/astaxie/beego/logs" | ||
| 8 | + "time" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +func CreateRequstLogFilter(logger *logs.BeeLogger) func(ctx *context.Context) { | ||
| 12 | + return func(ctx *context.Context) { | ||
| 13 | + requestId := fmt.Sprintf("%v.%v.%v", ctx.Input.Method(), ctx.Input.URI(), time.Now().UnixNano()) | ||
| 14 | + ctx.Request.Header.Add("requestId", requestId) | ||
| 15 | + var body string = "{}" | ||
| 16 | + if ctx.Input.GetData("requestBody") != nil { | ||
| 17 | + body = string(ctx.Input.GetData("requestBody").([]byte)) | ||
| 18 | + } | ||
| 19 | + logger.Debug(fmt.Sprintf("====>Recv RequestId:%s BodyData:%s", requestId, body)) | ||
| 20 | + } | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +func CreateResponseLogFilter(logger *logs.BeeLogger) func(ctx *context.Context) { | ||
| 24 | + return func(ctx *context.Context) { | ||
| 25 | + requestId := ctx.Request.Header.Get("requestId") | ||
| 26 | + body, _ := json.Marshal(ctx.Input.GetData("outputData")) | ||
| 27 | + if len(body) > 1000 { | ||
| 28 | + body = body[:1000] | ||
| 29 | + } | ||
| 30 | + logger.Debug(fmt.Sprintf("<====Send RequestId:%v BodyData:%s", requestId, body)) | ||
| 31 | + } | ||
| 32 | +} |
pkg/port/beego/beego.go
0 → 100644
| 1 | +package beego | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/astaxie/beego" | ||
| 5 | + "github.com/linmadan/egglib-go/web/beego/filters" | ||
| 6 | + . "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/log" | ||
| 7 | + _ "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/port/beego/routers" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +func init() { | ||
| 11 | + beego.InsertFilter("/*", beego.BeforeExec, filters.CreateRequestBodyFilter()) | ||
| 12 | + beego.InsertFilter("/*", beego.BeforeExec, CreateRequstLogFilter(Logger)) | ||
| 13 | + beego.InsertFilter("/*", beego.AfterExec, CreateResponseLogFilter(Logger), false) | ||
| 14 | +} |
| 1 | +package controllers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "encoding/json" | ||
| 5 | + "github.com/astaxie/beego" | ||
| 6 | + "github.com/linmadan/egglib-go/core/application" | ||
| 7 | + "github.com/linmadan/egglib-go/web/beego/utils" | ||
| 8 | +) | ||
| 9 | + | ||
| 10 | +type BaseController struct { | ||
| 11 | + beego.Controller | ||
| 12 | +} | ||
| 13 | + | ||
| 14 | +func (controller BaseController) JsonUnmarshal(v interface{}) error { | ||
| 15 | + body := controller.Ctx.Input.GetData("requestBody").([]byte) | ||
| 16 | + //fmt.Println("【RequestBody】 ",controller.Ctx.Input.Method(),controller.Ctx.Input.URL(),string(body)) | ||
| 17 | + return json.Unmarshal(body, v) | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +func (controller BaseController) HandlerResponse(data interface{}, err error) { | ||
| 21 | + var response utils.JsonResponse | ||
| 22 | + defer func() { | ||
| 23 | + controller.Data["json"] = response | ||
| 24 | + controller.ServeJSON() | ||
| 25 | + }() | ||
| 26 | + if err == nil { | ||
| 27 | + response = utils.ResponseData(controller.Ctx, data) | ||
| 28 | + return | ||
| 29 | + } | ||
| 30 | + if _, ok := err.(*application.ServiceError); !ok { | ||
| 31 | + err = application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 32 | + } | ||
| 33 | + response = utils.ResponseError(controller.Ctx, err) | ||
| 34 | +} | ||
| 35 | + | ||
| 36 | +func (controller BaseController) GetLimitInfo() (offset int, limit int) { | ||
| 37 | + offset, _ = controller.GetInt("offset") | ||
| 38 | + limit, _ = controller.GetInt("limit") | ||
| 39 | + return | ||
| 40 | +} |
| 1 | +package controllers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/partnerInfo/command" | ||
| 5 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/partnerInfo/query" | ||
| 6 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/partnerInfo/service" | ||
| 7 | +) | ||
| 8 | + | ||
| 9 | +type PartnerInfoController struct { | ||
| 10 | + BaseController | ||
| 11 | +} | ||
| 12 | + | ||
| 13 | +//CreatePartnerInfo 创建合伙人 | ||
| 14 | +func (controller *PartnerInfoController) CreatePartnerInfo() { | ||
| 15 | + var ( | ||
| 16 | + service = service.NewPartnerInfoService(nil) | ||
| 17 | + command = &command.CreatePartnerInfoCommand{} | ||
| 18 | + ) | ||
| 19 | + controller.JsonUnmarshal(command) | ||
| 20 | + controller.HandlerResponse(service.CreatePartnerInfo(command)) | ||
| 21 | +} | ||
| 22 | + | ||
| 23 | +//UpdatePartnerInfo 更新合伙人 | ||
| 24 | +func (controller *PartnerInfoController) UpdatePartnerInfo() { | ||
| 25 | + var ( | ||
| 26 | + service = service.NewPartnerInfoService(nil) | ||
| 27 | + command = &command.UpdatePartnerInfoCommand{} | ||
| 28 | + ) | ||
| 29 | + controller.JsonUnmarshal(command) | ||
| 30 | + id, _ := controller.GetInt(":id") | ||
| 31 | + command.Id = id | ||
| 32 | + controller.HandlerResponse(service.UpdatePartnerInfo(command)) | ||
| 33 | +} | ||
| 34 | + | ||
| 35 | +//GetPartnerInfo 获取合伙人 | ||
| 36 | +func (controller *PartnerInfoController) GetPartnerInfo() { | ||
| 37 | + var ( | ||
| 38 | + service = service.NewPartnerInfoService(nil) | ||
| 39 | + command = &query.GetPartnerInfoQuery{} | ||
| 40 | + ) | ||
| 41 | + uid, _ := controller.GetInt(":id") | ||
| 42 | + command.Id = uid | ||
| 43 | + controller.HandlerResponse(service.GetPartnerInfo(command)) | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +//GetPartnerInfo 移除合伙人 | ||
| 47 | +func (controller *PartnerInfoController) RemovePartnerInfo() { | ||
| 48 | + var ( | ||
| 49 | + service = service.NewPartnerInfoService(nil) | ||
| 50 | + command = &command.RemovePartnerInfoCommand{} | ||
| 51 | + ) | ||
| 52 | + uid, _ := controller.GetInt(":id") | ||
| 53 | + command.Id = uid | ||
| 54 | + controller.HandlerResponse(service.RemovePartnerInfo(command)) | ||
| 55 | +} | ||
| 56 | + | ||
| 57 | +//ListPartnerInfo 合伙人列表 | ||
| 58 | +func (controller *PartnerInfoController) ListPartnerInfo() { | ||
| 59 | + var ( | ||
| 60 | + service = service.NewPartnerInfoService(nil) | ||
| 61 | + command = &query.ListPartnerInfoQuery{} | ||
| 62 | + ) | ||
| 63 | + command.PartnerCategory, _ = controller.GetInt("partnerCategory") | ||
| 64 | + command.Status, _ = controller.GetInt("status") | ||
| 65 | + command.SortByCreateTime = controller.GetString("sortByCreateTime") | ||
| 66 | + command.SortByUpdateTime = controller.GetString("sortByUpdateTime") | ||
| 67 | + command.Offset, command.Limit = controller.GetLimitInfo() | ||
| 68 | + controller.HandlerResponse(service.ListPartnerInfo(command)) | ||
| 69 | +} |
| 1 | +package routers | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/astaxie/beego" | ||
| 5 | + "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/port/beego/controllers" | ||
| 6 | +) | ||
| 7 | + | ||
| 8 | +func init() { | ||
| 9 | + beego.Router("/partnerInfos/", &controllers.PartnerInfoController{}, "Post:CreatePartnerInfo") | ||
| 10 | + beego.Router("/partnerInfos/:id", &controllers.PartnerInfoController{}, "Put:UpdatePartnerInfo") | ||
| 11 | + beego.Router("/partnerInfos/:id", &controllers.PartnerInfoController{}, "Get:GetPartnerInfo") | ||
| 12 | + beego.Router("/partnerInfos/:id", &controllers.PartnerInfoController{}, "Delete:RemovePartnerInfo") | ||
| 13 | + beego.Router("/partnerInfos/", &controllers.PartnerInfoController{}, "Get:ListPartnerInfo") | ||
| 14 | +} |
pkg/port/beego/routers/static_router.go
0 → 100644
| 1 | +package partnerInfo | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/gavv/httpexpect" | ||
| 5 | + . "github.com/onsi/ginkgo" | ||
| 6 | + . "github.com/onsi/gomega" | ||
| 7 | + pG "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg" | ||
| 8 | + "net/http" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +var _ = Describe("创建新合伙人", func() { | ||
| 12 | + Describe("创建新合伙人", func() { | ||
| 13 | + Context("创建新合伙人", func() { | ||
| 14 | + It("返回合伙人数据", func() { | ||
| 15 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
| 16 | + body := map[string]interface{}{ | ||
| 17 | + "partnerName": "employeeName", | ||
| 18 | + "account": "account123", | ||
| 19 | + "password": "password", | ||
| 20 | + "status": 1, | ||
| 21 | + "partnerCategory": 1, | ||
| 22 | + //"createAt":time.Now(), | ||
| 23 | + //"updateAt":time.Now(), | ||
| 24 | + "salesman": []map[string]interface{}{ | ||
| 25 | + {"name": "name", "telephone": "18860183051"}, | ||
| 26 | + {"name2": "name", "telephone": "18860183052j"}, | ||
| 27 | + }, | ||
| 28 | + } | ||
| 29 | + httpExpect.POST("/partnerInfos"). | ||
| 30 | + WithJSON(body). | ||
| 31 | + Expect(). | ||
| 32 | + Status(http.StatusOK). | ||
| 33 | + JSON(). | ||
| 34 | + Object(). | ||
| 35 | + ContainsKey("code").ValueEqual("code", 0). | ||
| 36 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
| 37 | + ContainsKey("data").Value("data").Object(). | ||
| 38 | + ContainsKey("id").ValueNotEqual("id", BeZero()) | ||
| 39 | + }) | ||
| 40 | + }) | ||
| 41 | + }) | ||
| 42 | + AfterEach(func() { | ||
| 43 | + _, err := pG.DB.Exec("DELETE FROM partner_infos WHERE true") | ||
| 44 | + Expect(err).NotTo(HaveOccurred()) | ||
| 45 | + }) | ||
| 46 | +}) |
| 1 | +package partnerInfo | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/gavv/httpexpect" | ||
| 5 | + . "github.com/onsi/ginkgo" | ||
| 6 | + . "github.com/onsi/gomega" | ||
| 7 | + pG "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg" | ||
| 8 | + "net/http" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +var _ = Describe("删除合伙人", func() { | ||
| 12 | + BeforeEach(func() { | ||
| 13 | + _, err := pG.DB.Exec(`INSERT INTO "public"."partner_infos"("id", "partner_name", "account", "password", "status", "partner_category", "create_at", "update_at", "salesman") VALUES (2929531956394199040, 'employeeName', 'account', 'password', 1, 1, '2020-06-19 15:23:31.616934+08', '2020-06-19 15:23:31.616934+08', '[{"name": "name", "telephone": "18860183051"}, {"name": "", "telephone": "18860183052j"}]');`) | ||
| 14 | + Expect(err).NotTo(HaveOccurred()) | ||
| 15 | + }) | ||
| 16 | + Describe("删除合伙人", func() { | ||
| 17 | + Context("删除合伙人", func() { | ||
| 18 | + It("删除合伙人数据", func() { | ||
| 19 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
| 20 | + body := map[string]interface{}{} | ||
| 21 | + httpExpect.DELETE("/partnerInfos/2929531956394199040"). | ||
| 22 | + WithJSON(body). | ||
| 23 | + Expect(). | ||
| 24 | + Status(http.StatusOK). | ||
| 25 | + JSON(). | ||
| 26 | + Object(). | ||
| 27 | + ContainsKey("code").ValueEqual("code", 0). | ||
| 28 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
| 29 | + ContainsKey("data").Value("data").Object(). | ||
| 30 | + ContainsKey("id").ValueNotEqual("id", BeZero()) | ||
| 31 | + }) | ||
| 32 | + }) | ||
| 33 | + }) | ||
| 34 | + AfterEach(func() { | ||
| 35 | + _, err := pG.DB.Exec("DELETE FROM partner_infos WHERE true") | ||
| 36 | + Expect(err).NotTo(HaveOccurred()) | ||
| 37 | + }) | ||
| 38 | +}) |
| 1 | +package partnerInfo | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/gavv/httpexpect" | ||
| 5 | + . "github.com/onsi/ginkgo" | ||
| 6 | + . "github.com/onsi/gomega" | ||
| 7 | + pG "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg" | ||
| 8 | + "net/http" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +var _ = Describe("获取合伙人", func() { | ||
| 12 | + BeforeEach(func() { | ||
| 13 | + _, err := pG.DB.Exec(`INSERT INTO "public"."partner_infos"("id", "partner_name", "account", "password", "status", "partner_category", "create_at", "update_at", "salesman") VALUES (2929531956394199040, 'employeeName', 'account', 'password', 1, 1, '2020-06-19 15:23:31.616934+08', '2020-06-19 15:23:31.616934+08', '[{"name": "name", "telephone": "18860183051"}, {"name": "", "telephone": "18860183052j"}]');`) | ||
| 14 | + Expect(err).NotTo(HaveOccurred()) | ||
| 15 | + }) | ||
| 16 | + Describe("获取合伙人", func() { | ||
| 17 | + Context("获取合伙人", func() { | ||
| 18 | + It("返回合伙人数据", func() { | ||
| 19 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
| 20 | + body := map[string]interface{}{} | ||
| 21 | + httpExpect.GET("/partnerInfos/2929531956394199040"). | ||
| 22 | + WithJSON(body). | ||
| 23 | + Expect(). | ||
| 24 | + Status(http.StatusOK). | ||
| 25 | + JSON(). | ||
| 26 | + Object(). | ||
| 27 | + ContainsKey("code").ValueEqual("code", 0). | ||
| 28 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
| 29 | + ContainsKey("data").Value("data").Object(). | ||
| 30 | + ContainsKey("id").ValueNotEqual("id", BeZero()) | ||
| 31 | + }) | ||
| 32 | + }) | ||
| 33 | + }) | ||
| 34 | + AfterEach(func() { | ||
| 35 | + _, err := pG.DB.Exec("DELETE FROM partner_infos WHERE true") | ||
| 36 | + Expect(err).NotTo(HaveOccurred()) | ||
| 37 | + }) | ||
| 38 | +}) |
| 1 | +package partnerInfo | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/gavv/httpexpect" | ||
| 5 | + . "github.com/onsi/ginkgo" | ||
| 6 | + . "github.com/onsi/gomega" | ||
| 7 | + pG "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg" | ||
| 8 | + "net/http" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +var _ = Describe("获取合伙人列表", func() { | ||
| 12 | + BeforeEach(func() { | ||
| 13 | + _, err := pG.DB.Exec(`INSERT INTO "public"."partner_infos"("id", "partner_name", "account", "password", "status", "partner_category", "create_at", "update_at", "salesman") VALUES (2929531956394199040, 'employeeName', 'account', 'password', 1, 1, '2020-06-19 15:23:31.616934+08', '2020-06-19 15:23:31.616934+08', '[{"name": "name", "telephone": "18860183051"}, {"name": "", "telephone": "18860183052j"}]');`) | ||
| 14 | + Expect(err).NotTo(HaveOccurred()) | ||
| 15 | + }) | ||
| 16 | + Describe("获取合伙人列表", func() { | ||
| 17 | + Context("获取合伙人列表", func() { | ||
| 18 | + It("获取合伙人列表", func() { | ||
| 19 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
| 20 | + body := map[string]interface{}{} | ||
| 21 | + httpExpect.GET("/partnerInfos"). | ||
| 22 | + WithQuery("partnerCategory", 1). | ||
| 23 | + WithQuery("status", 1). | ||
| 24 | + WithQuery("status", 1). | ||
| 25 | + WithQuery("sortByCreateTime", "DESC"). | ||
| 26 | + WithQuery("sortByUpdateTime", "DESC"). | ||
| 27 | + WithQuery("offset", 0). | ||
| 28 | + WithQuery("limit", 20). | ||
| 29 | + WithJSON(body). | ||
| 30 | + Expect(). | ||
| 31 | + Status(http.StatusOK). | ||
| 32 | + JSON(). | ||
| 33 | + Object(). | ||
| 34 | + ContainsKey("code").ValueEqual("code", 0). | ||
| 35 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
| 36 | + ContainsKey("data").Value("data").Object().ContainsKey("partnerInfos") | ||
| 37 | + }) | ||
| 38 | + }) | ||
| 39 | + }) | ||
| 40 | + AfterEach(func() { | ||
| 41 | + _, err := pG.DB.Exec("DELETE FROM partner_infos WHERE true") | ||
| 42 | + Expect(err).NotTo(HaveOccurred()) | ||
| 43 | + }) | ||
| 44 | +}) |
| 1 | +package partnerInfo | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/astaxie/beego" | ||
| 5 | + . "github.com/onsi/ginkgo" | ||
| 6 | + . "github.com/onsi/gomega" | ||
| 7 | + "net/http" | ||
| 8 | + "net/http/httptest" | ||
| 9 | + "testing" | ||
| 10 | + | ||
| 11 | + _ "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg" | ||
| 12 | + _ "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/port/beego" | ||
| 13 | +) | ||
| 14 | + | ||
| 15 | +func TestPartnerInfo(t *testing.T) { | ||
| 16 | + RegisterFailHandler(Fail) | ||
| 17 | + RunSpecs(t, "Beego Port Employee Correlations Test Case Suite") | ||
| 18 | +} | ||
| 19 | + | ||
| 20 | +var handler http.Handler | ||
| 21 | +var server *httptest.Server | ||
| 22 | + | ||
| 23 | +var _ = BeforeSuite(func() { | ||
| 24 | + handler = beego.BeeApp.Handlers | ||
| 25 | + server = httptest.NewServer(handler) | ||
| 26 | +}) | ||
| 27 | + | ||
| 28 | +var _ = AfterSuite(func() { | ||
| 29 | + server.Close() | ||
| 30 | +}) |
| 1 | +package partnerInfo | ||
| 2 | + | ||
| 3 | +import ( | ||
| 4 | + "github.com/gavv/httpexpect" | ||
| 5 | + . "github.com/onsi/ginkgo" | ||
| 6 | + . "github.com/onsi/gomega" | ||
| 7 | + pG "gitlab.fjmaimaimai.com/mmm-go/partner/pkg/infrastructure/pg" | ||
| 8 | + "net/http" | ||
| 9 | +) | ||
| 10 | + | ||
| 11 | +var _ = Describe("创建新合伙人", func() { | ||
| 12 | + BeforeEach(func() { | ||
| 13 | + _, err := pG.DB.Exec(`INSERT INTO "public"."partner_infos"("id", "partner_name", "account", "password", "status", "partner_category", "create_at", "update_at", "salesman") VALUES (2929531956394199040, 'employeeName', 'account', 'password', 1, 1, '2020-06-19 15:23:31.616934+08', '2020-06-19 15:23:31.616934+08', '[{"name": "name", "telephone": "18860183051"}, {"name": "", "telephone": "18860183052j"}]');`) | ||
| 14 | + Expect(err).NotTo(HaveOccurred()) | ||
| 15 | + }) | ||
| 16 | + Describe("创建新合伙人", func() { | ||
| 17 | + Context("创建新合伙人", func() { | ||
| 18 | + It("返回合伙人数据", func() { | ||
| 19 | + httpExpect := httpexpect.New(GinkgoT(), server.URL) | ||
| 20 | + body := map[string]interface{}{ | ||
| 21 | + "partnerName": "employeeName", | ||
| 22 | + "account": "account123", | ||
| 23 | + "password": "password", | ||
| 24 | + "status": 1, | ||
| 25 | + "partnerCategory": 1, | ||
| 26 | + "salesman": []map[string]interface{}{ | ||
| 27 | + {"name": "name", "telephone": "18860183051"}, | ||
| 28 | + {"name2": "name", "telephone": "18860183052j"}, | ||
| 29 | + }, | ||
| 30 | + } | ||
| 31 | + httpExpect.PUT("/partnerInfos/2929531956394199040"). | ||
| 32 | + WithJSON(body). | ||
| 33 | + Expect(). | ||
| 34 | + Status(http.StatusOK). | ||
| 35 | + JSON(). | ||
| 36 | + Object(). | ||
| 37 | + ContainsKey("code").ValueEqual("code", 0). | ||
| 38 | + ContainsKey("msg").ValueEqual("msg", "ok"). | ||
| 39 | + ContainsKey("data").Value("data").Object(). | ||
| 40 | + ContainsKey("id").ValueNotEqual("id", BeZero()) | ||
| 41 | + }) | ||
| 42 | + }) | ||
| 43 | + }) | ||
| 44 | + AfterEach(func() { | ||
| 45 | + _, err := pG.DB.Exec("DELETE FROM partner_infos WHERE true") | ||
| 46 | + Expect(err).NotTo(HaveOccurred()) | ||
| 47 | + }) | ||
| 48 | +}) |
-
请 注册 或 登录 后发表评论