Selaa lähdekoodia

feature(培训考试):数据库表设计

liuyaqi 3 vuotta sitten
vanhempi
commit
7a9d0ef04c
5 muutettua tiedostoa jossa 308 lisäystä ja 0 poistoa
  1. 142 0
      common/test.go
  2. 26 0
      handler/test.go
  3. 31 0
      handler/test_test.go
  4. 1 0
      main.go
  5. 108 0
      sql/create.sql

+ 142 - 0
common/test.go

@@ -0,0 +1,142 @@
+package common
+
+import (
+	"bytes"
+	"context"
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"time"
+
+	"dashoo.cn/common_definition/admin/user_def"
+	"dashoo.cn/common_definition/auth"
+	"dashoo.cn/micro_libary/micro_srv"
+	"dashoo.cn/micro_libary/request"
+	"github.com/gogf/gf/encoding/gjson"
+)
+
+
+func TestRpcxHandler(tenant, token, url, path, method string, data string) ([]byte, error) {
+	req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(data)))
+	if err != nil {
+		return nil, err
+	}
+	req.Header.Set("content-type", "application/json")
+	req.Header.Set("X-RPCX-SerializeType", "1")
+	req.Header.Set("X-RPCX-ServicePath", path)
+	req.Header.Set("X-RPCX-ServiceMethod", method)
+	req.Header.Set("SrvEnv", "dev")
+	req.Header.Set("Tenant", tenant)
+	req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
+	// req.Header.Set("X-RPCX-Meta", fmt.Sprintf("ts=%s&sign=%s", ts, sign))
+
+	cli := &http.Client{Timeout: 5 * time.Second}
+	resp, err := cli.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	return ioutil.ReadAll(resp.Body)
+}
+
+func TestHandler(tenant, token, url, data string) ([]byte, error) {
+	req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(data)))
+	if err != nil {
+		return nil, err
+	}
+	req.Header.Set("content-type", "application/json")
+	req.Header.Set("Tenant", tenant)
+	req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", token))
+
+	cli := &http.Client{Timeout: 5 * time.Second}
+	resp, err := cli.Do(req)
+	if err != nil {
+		return nil, err
+	}
+	defer resp.Body.Close()
+	return ioutil.ReadAll(resp.Body)
+}
+
+func Token(tenant, username, password string) string {
+	userService := micro_srv.InitMicroSrvClient("User", "micro_srv.admin")
+	authService := micro_srv.InitMicroSrvClient("Auth", "micro_srv.auth")
+	defer userService.Close()
+	defer authService.Close()
+
+	rsp := &user_def.LoginResp{}
+	err := userService.Call(context.TODO(), "Login", &user_def.LoginReq{
+		Tenant:    tenant,
+		User:      username,
+		Password:  password,
+		Ip:        "",
+		UserAgent: "",
+	}, rsp)
+	if err != nil {
+		panic(err)
+	}
+
+	authrsp := &auth.Response{}
+	err = authService.Call(context.TODO(), "GetToken", &auth.Request{
+		Tenant:  tenant,
+		UserKey: username,
+		Uuid:    rsp.CommonMsg.Data.(string),
+		Data:    string(rsp.UserInfo),
+	}, authrsp)
+	if err != nil {
+		panic(err)
+	}
+
+	j, err := gjson.DecodeToJson(authrsp.Data)
+	if err != nil {
+		panic(err)
+	}
+
+	// fmt.Printf("%#v\n", rsp.CommonMsg)
+	// fmt.Printf("%#v\n", string(rsp.UserInfo))
+	// fmt.Printf("%#v\n", authrsp)
+	return j.GetString("token")
+}
+
+func PrintIndentJson(data []byte) {
+	var v interface{}
+	err := json.Unmarshal(data, &v)
+	if err != nil {
+		panic(err)
+	}
+	data, err = json.MarshalIndent(v, "", "  ")
+	if err != nil {
+		panic(err)
+	}
+	fmt.Println(string(data))
+}
+
+func Auth(tenant string, userId int32, uuid, username, realname, deptId string) (interface{}, error) {
+	authService := micro_srv.InitMicroSrvClient("Auth", "micro_srv.auth")
+	defer authService.Close()
+	authUserinfo := request.UserInfo{
+		Id:       userId,
+		Uuid:     uuid,
+		UserName: username,
+		RealName: realname,
+		DeptId:   deptId,
+	}
+	authUserinfoData, err := json.Marshal(authUserinfo)
+	if err != nil {
+		return nil, err
+	}
+	authrsp := &auth.Response{}
+	err = authService.Call(context.TODO(), "GetToken", &auth.Request{
+		Tenant:  tenant,
+		UserKey: username,
+		Uuid:    uuid,
+		Data:    string(authUserinfoData),
+	}, authrsp)
+	if err != nil {
+		return nil, err
+	}
+	data := map[string]interface{}{}
+	// authrsp.Data  "{\"tenant\":\"EmGVD5szuT\",\"token\":\"ajg7o1Dts1JrKCm6VtgyuuaYbUIiirXxI5+6WzYnC7gWl+43NdKq6LbWxU1zWhsBaL0A/CIkBoefM0vuu6h4ZA==\",\"userKey\":\"dashoo\",\"uuid\":\"095771e03f6fbd20af351dc259560232\"}"
+	err = json.Unmarshal([]byte(authrsp.Data), &data)
+	return data, err
+}

+ 26 - 0
handler/test.go

@@ -0,0 +1,26 @@
+package handler
+
+import (
+	"context"
+	"fmt"
+
+	"dashoo.cn/common_definition/comm_def"
+)
+
+type Nullable struct {
+	Str   *string
+	Int   *int
+	Bool  *bool
+	Slice *[]int
+}
+
+type TestController struct{}
+
+func (s *TestController) Nullable(ctx context.Context, req *Nullable, rsp *comm_def.CommonMsg) error {
+	fmt.Printf("%v \n", req)
+	fmt.Printf("%v \n", req.Str)
+	fmt.Printf("%v \n", req.Int)
+	fmt.Printf("%v \n", req.Bool)
+	fmt.Printf("%v \n", req.Slice)
+	return nil
+}

+ 31 - 0
handler/test_test.go

@@ -0,0 +1,31 @@
+package handler
+
+import (
+	"fmt"
+	"lims_adapter/common"
+	"testing"
+)
+
+var (
+	url = "http://192.168.0.102:9981/dashoo.lims.adapter-0.1-jlw"
+	tenant = "EmGVD5szuT"
+	username = "dashoo"
+	password = "Yzr0t0P4VH5HfjmIVuMQ0CRpu/zkFbJWEN7uO7qIAarMuEDSLVkcHOUEAp+HGXf+ZwxpVJM1zqzlW9br1NJDgw=="
+)
+
+func TestNullable(t *testing.T) {
+	token := common.Token(tenant, username, password)
+	resp, err := common.TestRpcxHandler(tenant, token, url, "Test", "Nullable",
+		`
+		{
+			"Str": "",
+			"Int": 0,
+			"Bool": false,
+			"Slice": []
+		}
+		`,
+	)
+	common.PrintIndentJson(resp)
+	fmt.Println(err)
+
+}

+ 1 - 0
main.go

@@ -41,6 +41,7 @@ func main() {
 	s.RegisterName("SettleAccountMain", new(handler.SettleAccountMainController), "")
 	s.RegisterName("SettleAccountDetail", new(handler.SettleAccountDetailController), "")
 	s.RegisterName("InstrumentSurcharge", new(handler.InstrumentSurchargeController), "")
+	s.RegisterName("Test", new((handler.TestController)), "")
 	// 注册auth处理
 	s.AuthFunc = handleAuth
 	// 运行服务

+ 108 - 0
sql/create.sql

@@ -0,0 +1,108 @@
+-- 设备表
+-- 技能表
+-- 资料表
+-- 题目表
+-- 试卷表
+-- 考试记录表
+-- 学习记录表
+
+-- 技能表 设备表 多对多
+-- 技能表 资料表 一对多
+-- 技能表 题目表 一对多
+-- 技能表 试卷表 一对多
+-- 技能表 考试记录表 一对多
+-- 技能表 学习记录表 一对多
+-- 资料表 学习记录表 一对多
+-- 题目表 试卷表 多对多
+-- 试卷表 考试记录表 一对多
+
+CREATE TABLE `learning_skill` (
+  `Id` int NOT NULL AUTO_INCREMENT COMMENT 'Id',
+  `Name` varchar(255) NOT NULL COMMENT '技能名称',
+  `CreatedAt` datetime COMMENT '创建时间',
+  `UpdatedAt` datetime COMMENT '更新时间',
+  `DeletedAt` datetime COMMENT '删除时间',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
+
+
+CREATE TABLE `learning_skill_instrument` (
+  `Id` int NOT NULL AUTO_INCREMENT COMMENT 'Id',
+  `SkillId` int NOT NULL COMMENT '技能 Id',
+  `InstrumentId` int NOT NULL COMMENT '设备 Id',
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='技能设备绑定表';
+
+
+CREATE TABLE `learning_material` (
+  `Id` int NOT NULL AUTO_INCREMENT COMMENT 'Id',
+  `SkillId` int NOT NULL COMMENT '技能 Id',
+  `Name` varchar(255) NOT NULL COMMENT '资料名称',
+  `Type` int NOT NULL COMMENT '资料类型 1 资料 2 视频',
+  `SortNo` int NOT NULL COMMENT '排序',
+  `Enable` tinyint(1) NOT NULL COMMENT '是否启用',
+  `Content` text COMMENT '资料内容',
+  `Annex` text COMMENT '附件路径',
+  `CreatedAt` datetime COMMENT '创建时间',
+  `UpdatedAt` datetime COMMENT '更新时间',
+  `DeletedAt` datetime COMMENT '删除时间',
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='资料表';
+
+
+CREATE TABLE `learning_question` (
+  `Id` int NOT NULL AUTO_INCREMENT COMMENT 'Id',
+  `SkillId` int NOT NULL COMMENT '技能 Id',
+  `Name` varchar(512) NOT NULL COMMENT '题目名称',
+  `Type` int NOT NULL COMMENT '题型 1 单选 2 多选 3 判断',
+  `Enable` tinyint(1) NOT NULL COMMENT '是否启用',
+  `Content` text COMMENT '题目内容',
+  `Explanation` text COMMENT '题目解析',
+  `OperateBy` varchar(255) COMMENT '操作人',
+  `CreatedAt` datetime COMMENT '创建时间',
+  `UpdatedAt` datetime COMMENT '更新时间',
+  `DeletedAt` datetime COMMENT '删除时间',
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题目表';
+
+
+CREATE TABLE `learning_testpaper` (
+  `Id` int NOT NULL AUTO_INCREMENT COMMENT 'Id',
+  `SkillId` int NOT NULL COMMENT '技能 Id',
+  `Name` varchar(255) NOT NULL COMMENT '试卷名称',
+  `Enable` tinyint(1) NOT NULL COMMENT '是否启用',
+  `TimeLimit` int COMMENT '答题时间/分钟',
+  `PassLimit` int COMMENT '合格标准/题数',
+  `CreatedAt` datetime COMMENT '创建时间',
+  `UpdatedAt` datetime COMMENT '更新时间',
+  `DeletedAt` datetime COMMENT '删除时间',
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试卷表';
+
+
+CREATE TABLE `learning_question_testpaper` (
+  `Id` int NOT NULL AUTO_INCREMENT COMMENT 'Id',
+  `QuestionId` int NOT NULL COMMENT '题目 Id',
+  `TestpaperId` int NOT NULL COMMENT '试卷 Id',
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='题目试卷绑定表';
+
+
+CREATE TABLE `learning_exam_record` (
+  `Id` int NOT NULL AUTO_INCREMENT COMMENT 'Id',
+  `UserId` int NOT NULL COMMENT '用户 Id',
+  `SkillId` int NOT NULL COMMENT '技能 Id',
+  `TestpaperId` int NOT NULL COMMENT '试卷 Id',
+  `Status` int NOT NULL COMMENT '状态 1 通过 2 未通过',
+  `CreatedAt` datetime COMMENT '创建时间',
+  `UpdatedAt` datetime COMMENT '更新时间',
+  `DeletedAt` datetime COMMENT '删除时间',
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='考试记录表';
+
+
+CREATE TABLE `learning_learning_record` (
+  `Id` int NOT NULL AUTO_INCREMENT COMMENT 'Id',
+  `UserId` int NOT NULL COMMENT '用户 Id',
+  `SkillId` int NOT NULL COMMENT '技能 Id',
+  `MaterialId` int NOT NULL COMMENT '资料 Id',
+  `Status` int NOT NULL COMMENT '状态 1 已学习',
+  `CreatedAt` datetime COMMENT '创建时间',
+  `UpdatedAt` datetime COMMENT '更新时间',
+  `DeletedAt` datetime COMMENT '删除时间',
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学习记录表';
+