Browse Source

编写荣信性格测试

li_v1
超级管理员 1 year ago
parent
commit
df1e5ee307
  1. 10
      api/personalityTest/entry.go
  2. 118
      api/personalityTest/rongXin/controller.go
  3. 29
      api/personalityTest/rongXin/type.go
  4. 93
      api/shiyan/maptostruct/shiyan.go
  5. 11
      api/shiyan/maptostruct/type.go
  6. 10
      api/version1/user/type.go
  7. 190
      api/version1/user/userCont.go
  8. 3
      apirouter/apishiyan/maptostruct.go
  9. 34
      apirouter/entry.go
  10. 3
      apirouter/personalityAssessment/entry.go
  11. 19
      apirouter/personalityAssessment/rongxin.go
  12. 4
      apirouter/v1/userRouters/pc.go
  13. 1
      go.mod
  14. 62
      go.sum
  15. 7
      initialization/route/initRoute.go
  16. 66
      models/modelsschool/answer.go
  17. 80
      models/modelsschool/subject.go
  18. 155
      overall/publicmethod/sm4.go

10
api/personalityTest/entry.go

@ -0,0 +1,10 @@
package personalityTest
import rongxin "appPlatform/api/personalityTest/rongXin"
//性格测试相关
type ApiEntry struct {
CharacterTestRongXin rongxin.ApiMethod
}
var AppApiEntry = new(ApiEntry)

118
api/personalityTest/rongXin/controller.go

@ -0,0 +1,118 @@
package rongxin
import (
"appPlatform/models/modelshr"
"appPlatform/overall/publicmethod"
"encoding/json"
"github.com/gin-gonic/gin"
)
/*
*
@ 作者: 秦东
@ 时间: 2024-08-28 16:12:38
@ 功能: 登录(内部人员)
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) Login(c *gin.Context) {
var requestData PersonalityTestIn
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Number == "" {
publicmethod.Result(1, err, c, "请输入工号!")
return
}
if requestData.Name == "" {
publicmethod.Result(1, err, c, "请输入姓名!")
return
}
if requestData.Post == "" {
publicmethod.Result(1, err, c, "请输入岗位!")
return
}
var userCont modelshr.PersonArchives
err = userCont.GetCont(map[string]interface{}{"`number`": requestData.Number}, "`id`", "`name`", "`key`")
if err != nil || userCont.Id == 0 {
publicmethod.Result(1, err, c, "对不起,数据库没有此工号的相关数据!请检查输入是否正确!")
return
}
jsonStr, err := json.Marshal(requestData)
if err != nil {
publicmethod.Result(1, err, c, "对不起,数据库没有此工号的相关数据!请检查输入是否正确!")
return
}
jiaMi, err := publicmethod.SM4Encrypt(string(jsonStr))
if err != nil {
publicmethod.Result(1, err, c, "对不起,数据库没有此工号的相关数据!请检查输入是否正确!")
return
}
sendInfo := publicmethod.MapOut[string]()
sendInfo["sign"] = jiaMi
publicmethod.Result(0, sendInfo, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-28 16:28:48
@ 功能: 外来人员性格测试
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) LoginExternal(c *gin.Context) {
var requestData PersonalityTestOut
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Tel == "" {
publicmethod.Result(1, err, c, "请输入联系电话!")
return
}
if requestData.Name == "" {
publicmethod.Result(1, err, c, "请输入姓名!")
return
}
if requestData.Address == "" {
publicmethod.Result(1, err, c, "请输入联系地址!")
return
}
jsonStr, err := json.Marshal(requestData)
if err != nil {
publicmethod.Result(1, err, c, "对不起,数据库没有此工号的相关数据!请检查输入是否正确!")
return
}
jiaMi, err := publicmethod.SM4Encrypt(string(jsonStr))
if err != nil {
publicmethod.Result(1, err, c, "对不起,数据库没有此工号的相关数据!请检查输入是否正确!")
return
}
sendInfo := publicmethod.MapOut[string]()
sendInfo["sign"] = jiaMi
publicmethod.Result(0, sendInfo, c)
}

29
api/personalityTest/rongXin/type.go

@ -0,0 +1,29 @@
package rongxin
import (
"appPlatform/overall/publicmethod"
"github.com/gin-gonic/gin"
)
//荣信性格测试相关数据处理
type ApiMethod struct{}
// 荣信性格测试入口
func (a *ApiMethod) Index(c *gin.Context) {
outputCont := publicmethod.MapOut[string]()
outputCont["index"] = "荣信性格测试入口"
publicmethod.Result(0, outputCont, c)
}
type PersonalityTestIn struct {
Number string `json:"number"`
Name string `json:"name"`
Post string `json:"post"`
}
type PersonalityTestOut struct {
Tel string `json:"tel"`
Name string `json:"name"`
Address string `json:"address"`
}

93
api/shiyan/maptostruct/shiyan.go

@ -722,3 +722,96 @@ func (a *ApiMethod) GainAppPageInfo(c *gin.Context) {
// sendData["formField"] = fieldList
publicmethod.Result(0, sendData, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-28 13:52:07
@ 功能: 测试过密加解密(SM4)
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) AppSm4(c *gin.Context) {
var requestData PersonalityTestIn
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Number == "" {
publicmethod.Result(1, err, c, "请输入工号!")
return
}
if requestData.Name == "" {
publicmethod.Result(1, err, c, "请输入姓名!")
return
}
if requestData.Post == "" {
publicmethod.Result(1, err, c, "请输入岗位!")
return
}
sendInfo := publicmethod.MapOut[string]()
jsonStr, _ := json.Marshal(requestData)
fmt.Printf("jsonStr:%v\n", string(jsonStr))
jiaMi, err := publicmethod.SM4Encrypt(string(jsonStr))
sendInfo["jiaMi"] = jiaMi
sendInfo["jiaMiErr"] = err
jieMi, err := publicmethod.SM4Decrypt(jiaMi)
sendInfo["jieMi"] = jieMi
sendInfo["jieMiErr"] = err
var jsonInfo PersonalityTestIn
json.Unmarshal([]byte(jieMi), &jsonInfo)
sendInfo["jsonInfo"] = jsonInfo
publicmethod.Result(0, sendInfo, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-28 14:26:33
@ 功能: 删除转现题库内容
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) DelZhuanXiang(c *gin.Context) {
var requestData publicmethod.CommonId[string]
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" {
publicmethod.Result(102, err, c)
return
}
var delKey []int64
err = overall.CONSTANT_DB_Master.Model(&modelsschool.Subject{}).Select("`s_key`").Where("`s_one_exam` = ?", requestData.Id).Find(&delKey).Error
if err != nil {
publicmethod.Result(0, delKey, c)
return
}
if len(delKey) > 0 {
overall.CONSTANT_DB_KPI.Where("`s_one_exam` = ?", requestData.Id).Delete(&modelsschool.Subject{})
overall.CONSTANT_DB_KPI.Where("`a_key` IN ?", delKey).Delete(&modelsschool.Answer{})
}
publicmethod.Result(0, delKey, c)
}

11
api/shiyan/maptostruct/type.go

@ -120,3 +120,14 @@ type CreatFlowView struct {
ConditionList []taskflow.ConditionListInfo `json:"conditionList"` //判断条件主体
NodelPeople []taskflow.NodelPeopleInfo `json:"nodelPeople"` //节点操作人
}
type PersonalityTestIn struct {
Number string `json:"number"`
Name string `json:"name"`
Post string `json:"post"`
}
type PersonalityTestOut struct {
Tel string `json:"tel"`
Name string `json:"name"`
Address string `json:"address"`
}

10
api/version1/user/type.go

@ -64,7 +64,9 @@ type SendPower struct {
// 输出员工资料下载模版
type SendUserTemInfo struct {
modelAppPlatform.UserInfoDownTemplate
OrgName string `json:"orgName" gorm:"-"`
OrgName string `json:"orgName" gorm:"-"`
OrgIdStr string `json:"orgIdStr" gorm:"-"`
IdStr string `json:"idStr" gorm:"-"`
}
// 上传模版保存
@ -74,3 +76,9 @@ type UpLoadTemSave struct {
FilePath string `json:"filePath"`
FileUrl string `json:"fileUrl"`
}
// 编辑模版内容
type EditTemplateCont struct {
publicmethod.PublicId
UpLoadTemSave
}

190
api/version1/user/userCont.go

@ -600,12 +600,14 @@ func (a *ApiMethod) GainUserInfoDownTemplateList(c *gin.Context) {
for i, v := range temList {
var orgCont modelshr.AdministrativeOrganization
if v.OrgId != 0 {
err = orgCont.GetCont(map[string]interface{}{}, "`name`")
err = orgCont.GetCont(map[string]interface{}{"`id`": v.OrgId}, "`name`")
if err != nil {
orgCont.Name = ""
}
}
temList[i].OrgName = orgCont.Name
temList[i].OrgIdStr = strconv.FormatInt(v.OrgId, 10)
temList[i].IdStr = strconv.FormatInt(v.Id, 10)
}
publicmethod.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(temList)), temList, c)
}
@ -657,3 +659,189 @@ func (a *ApiMethod) UploadUserTemplate(c *gin.Context) {
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 11:16:33
@ 功能: 编辑人员模版列表状态
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) EditUserTempr(c *gin.Context) {
var requestData publicmethod.PublicStates
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" || requestData.Id == "0" {
publicmethod.Result(1, err, c, "未知行政组织!不可编辑")
return
}
if requestData.Status == 0 {
requestData.Status = 1
}
saveData := publicmethod.MapOut[string]()
saveData["status"] = requestData.Status
saveData["dateTime"] = time.Now().Unix()
var fileOrg modelAppPlatform.UserInfoDownTemplate
err = fileOrg.EiteCont(map[string]interface{}{"`id`": requestData.Id}, saveData)
if err != nil {
publicmethod.Result(106, err, c)
return
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 11:28:00
@ 功能: 获取员工模版信息
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GainUserTemplateInfo(c *gin.Context) {
var requestData publicmethod.PublicId
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" || requestData.Id == "0" {
publicmethod.Result(1, err, c, "未知行政组织!不可编辑")
return
}
var fileOrg SendUserTemInfo
err = fileOrg.GetCont(map[string]interface{}{"`id`": requestData.Id})
if err != nil {
publicmethod.Result(106, err, c)
return
}
var orgCont modelshr.AdministrativeOrganization
if fileOrg.OrgId != 0 {
err = orgCont.GetCont(map[string]interface{}{"`id`": fileOrg.OrgId}, "`name`")
if err != nil {
orgCont.Name = ""
}
}
fileOrg.OrgName = orgCont.Name
fileOrg.OrgIdStr = strconv.FormatInt(fileOrg.OrgId, 10)
fileOrg.IdStr = strconv.FormatInt(fileOrg.Id, 10)
publicmethod.Result(0, fileOrg, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 11:31:10
@ 功能: 编辑模版内容
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) EditUserTemplateInfo(c *gin.Context) {
var requestData EditTemplateCont
err := c.ShouldBindJSON(&requestData)
if err != nil {
publicmethod.Result(100, err, c)
return
}
if requestData.Id == "" || requestData.Id == "0" {
publicmethod.Result(1, err, c, "未知行政组织!不可编辑")
return
}
var oldInfo modelAppPlatform.UserInfoDownTemplate
err = oldInfo.GetCont(map[string]interface{}{"`id`": requestData.Id})
if err != nil {
publicmethod.Result(107, err, c)
return
}
saveData := publicmethod.MapOut[string]()
if requestData.OrgId != "" {
orgOldId := strconv.FormatInt(oldInfo.OrgId, 10)
if requestData.OrgId != orgOldId {
saveData["orgId"] = requestData.OrgId
}
}
if requestData.FileName != oldInfo.FileName {
saveData["fileName"] = requestData.FileName
}
if requestData.FilePath != oldInfo.FilePath {
saveData["filePath"] = requestData.FilePath
}
if requestData.FileUrl != oldInfo.FileUrl {
saveData["fileUrl"] = requestData.FileUrl
}
if len(saveData) > 0 {
saveData["status"] = 1
saveData["dateTime"] = time.Now().Unix()
var fileOrg modelAppPlatform.UserInfoDownTemplate
err = fileOrg.EiteCont(map[string]interface{}{"`id`": requestData.Id}, saveData)
if err != nil {
publicmethod.Result(106, err, c)
return
}
}
publicmethod.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 13:00:11
@ 功能: 获取现有模版归属那个组织
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (a *ApiMethod) GainTempleateOrgList(c *gin.Context) {
var list []int64
err := overall.CONSTANT_DB_AppPlatform.Model(&modelAppPlatform.UserInfoDownTemplate{}).Select("`orgId`").Where("`status` = 1").Find(&list).Error
if err != nil || len(list) == 0 {
publicmethod.Result(107, err, c)
return
}
var orgList []modelshr.AdministrativeOrganization
err = overall.CONSTANT_DB_HR.Model(&modelshr.AdministrativeOrganization{}).Select("`id`,`name`").Where("`id` IN ?", list).Find(&orgList).Error
if err != nil || len(orgList) == 0 {
publicmethod.Result(107, err, c)
return
}
publicmethod.Result(0, orgList, c)
}

3
apirouter/apishiyan/maptostruct.go

@ -40,6 +40,9 @@ func (a *ApiRouter) RouterGroup(router *gin.RouterGroup) {
apiRouter.POST("gainDateCenter", methodBinding.GainDateCenter) //获取行政组织所有子类
apiRouter.POST("gainAppPageInfo", methodBinding.GainAppPageInfo) //获取行政组织所有子类
apiRouter.POST("delZhuanXiang", methodBinding.DelZhuanXiang) //删除转现题库内容
apiRouter.POST("appSm4", methodBinding.AppSm4) //测试过密加解密(SM4)
}
}

34
apirouter/entry.go

@ -3,6 +3,7 @@ package apirouter
import (
"appPlatform/apirouter/apishiyan"
"appPlatform/apirouter/authenticationroute"
"appPlatform/apirouter/personalityAssessment"
"appPlatform/apirouter/v1/customerformrouter"
datacenterrouter "appPlatform/apirouter/v1/dataCenterRouter"
dictrouters "appPlatform/apirouter/v1/dict_routers"
@ -21,22 +22,23 @@ import (
// 路由结构
type RouterGroup struct {
ShiyanApi apishiyan.ApiRouter
UserRouter userrouters.ApiRouter
MenusRouter menusrouters.ApiRouter
DictRouter dictrouters.ApiRouter
GrantPowerRouter grantsystempower.ApiRouter
MatrixApiRouter matrixrouters.ApiRouter
PublicRouters public.ApiRouter
SignCodeRouter authenticationroute.ApiRouter
CustomerFormRouter customerformrouter.ApiRouter
TaskRouter taskrouter.ApiRouter
NewsClassApiRouter newsclassrouter.ApiRouter
RedisClassApiRouter redisRouter.ApiRouter
MathsRouter mathsrouter.ApiRouter
WorkWechatRouter workwechatrouter.ApiRouter
DataCenterRouter datacenterrouter.ApiRouter
WebSocketRouters websocketrouter.ApiRouter
ShiyanApi apishiyan.ApiRouter
UserRouter userrouters.ApiRouter
MenusRouter menusrouters.ApiRouter
DictRouter dictrouters.ApiRouter
GrantPowerRouter grantsystempower.ApiRouter
MatrixApiRouter matrixrouters.ApiRouter
PublicRouters public.ApiRouter
SignCodeRouter authenticationroute.ApiRouter
CustomerFormRouter customerformrouter.ApiRouter
TaskRouter taskrouter.ApiRouter
NewsClassApiRouter newsclassrouter.ApiRouter
RedisClassApiRouter redisRouter.ApiRouter
MathsRouter mathsrouter.ApiRouter
WorkWechatRouter workwechatrouter.ApiRouter
DataCenterRouter datacenterrouter.ApiRouter
WebSocketRouters websocketrouter.ApiRouter
CharacterTestRongXin personalityAssessment.ApiRouter
}
var RouterGroupEntry = new(RouterGroup)

3
apirouter/personalityAssessment/entry.go

@ -0,0 +1,3 @@
package personalityAssessment
type ApiRouter struct{}

19
apirouter/personalityAssessment/rongxin.go

@ -0,0 +1,19 @@
package personalityAssessment
import (
"appPlatform/api/personalityTest"
"github.com/gin-gonic/gin"
)
func (a *ApiRouter) RouterGroup(router *gin.RouterGroup) {
apiRouter := router.Group("rongxin")
var methodBinding = personalityTest.AppApiEntry.CharacterTestRongXin
{
apiRouter.GET("", methodBinding.Index) //入口
apiRouter.POST("", methodBinding.Index) //入口
apiRouter.POST("login", methodBinding.Login) //登录(内部人员)
apiRouter.POST("loginExternal", methodBinding.LoginExternal) //登录(内部人员)
}
}

4
apirouter/v1/userRouters/pc.go

@ -20,5 +20,9 @@ func (a *ApiRouter) RouterGroupPc(router *gin.RouterGroup) {
apiRouter.POST("gainUserInfoDownTemplateList", methodBinding.GainUserInfoDownTemplateList) //获取人员信息模版列表
apiRouter.POST("uploadUserTemplate", methodBinding.UploadUserTemplate) //上传人员信息模版保存
apiRouter.POST("editUserTempr", methodBinding.EditUserTempr) //编辑人员模版列表状态
apiRouter.POST("gainUserTemplateInfo", methodBinding.GainUserTemplateInfo) //获取员工模版信息
apiRouter.POST("editUserTemplateInfo", methodBinding.EditUserTemplateInfo) //编辑模版内容
apiRouter.POST("gainTempleateOrgList", methodBinding.GainTempleateOrgList) //获取现有模版归属那个组织
}
}

1
go.mod

@ -54,6 +54,7 @@ require (
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tjfoc/gmsm v1.4.1 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
golang.org/x/arch v0.3.0 // indirect

62
go.sum

@ -1,3 +1,4 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
@ -5,11 +6,14 @@ github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM=
github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s=
github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams=
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
@ -21,6 +25,9 @@ github.com/dengsgo/math-engine v0.0.0-20230823154425-78f211b48149 h1:TkVfb0s14IU
github.com/dengsgo/math-engine v0.0.0-20230823154425-78f211b48149/go.mod h1:zkR27k4K0I8FS6rkEd8qBhPeS8i3X2FKfvSPdF64OpQ=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/flipped-aurora/gin-vue-admin/server v0.0.0-20231212025023-e0a8e9370425 h1:XTvBOk+EFcon1fL8gzFRN2N7jGvc2QGZMqWF+evZT10=
github.com/flipped-aurora/gin-vue-admin/server v0.0.0-20231212025023-e0a8e9370425/go.mod h1:zsseaaJleMl86IDc9evuQx6gJYfdG0kW67+MTVxwTAU=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
@ -55,7 +62,22 @@ github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/golang-module/carbon v1.7.3 h1:p5mUZj7Tg62MblrkF7XEoxVPvhVs20N/kimqsZOQ+/U=
github.com/golang-module/carbon v1.7.3/go.mod h1:nUMnXq90Rv8a7h2+YOo2BGKS77Y0w/hMPm4/a8h19N8=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@ -108,6 +130,7 @@ github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6
github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/redis/go-redis/v9 v9.3.0 h1:RiVDjmig62jIWp7Kk4XVLs0hzV6pI3PyTnnL0cnn0u0=
github.com/redis/go-redis/v9 v9.3.0/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
@ -151,6 +174,8 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho=
github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE=
github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI=
github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
@ -163,30 +188,65 @@ golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs=
golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
@ -206,4 +266,6 @@ gorm.io/driver/mysql v1.5.2/go.mod h1:pQLhh1Ut/WUAySdTHwBpBv6+JKcj+ua4ZFx1QQTBzb
gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls=
gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=

7
initialization/route/initRoute.go

@ -38,6 +38,13 @@ func InitialRouter() *gin.Engine {
{
shiyanApi.RouterGroup(appLoadRouterGroup)
}
//性格测试相关
characterTestApi := apirouter.RouterGroupEntry.CharacterTestRongXin
{
characterTestApi.RouterGroup(appLoadRouterGroup)
}
//auto2.0身份验证
signCodeApi := apirouter.RouterGroupEntry.SignCodeRouter
{

66
models/modelsschool/answer.go

@ -0,0 +1,66 @@
package modelsschool
import (
"appPlatform/overall"
"strings"
)
// 试题答案
type Answer struct {
Id int64 `json:"id" gorm:"primaryKey;column:a_id;type:bigint(20) unsigned;not null;comment:ID"`
TitleText string `json:"titleText" gorm:"column:a_text;type:text;comment:答案"`
trueFalse int `json:"trueFalse" gorm:"column:a_true_false;type:int(1) unsigned;default:1;not null;comment:是否为正确答案(1:正确;2:错误)"`
Types int `json:"types" gorm:"column:a_type;type:tinyint(1) unsigned;default:0;not null;comment:类型(1:单选;2:多选;3:判断)"`
Keys int64 `json:"keys" gorm:"column:a_key;type:bigint(50) unsigned;default:0;not null;comment:'唯一识别符"`
}
func (SystemMenu *Answer) TableName() string {
return "answer"
}
// // 菜单管理
// type SystemMenuOperation struct {
// Answer
// MenuPermit []MenuOperation `json:"menupermit"`
// }
// 编辑内容
func (cont *Answer) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
err = overall.CONSTANT_DB_KPI.Model(&cont).Where(whereMap).Updates(saveData).Error
return
}
// 获取内容
func (cont *Answer) GetCont(whereMap interface{}, field ...string) (err error) {
gormDb := overall.CONSTANT_DB_KPI.Model(&cont)
if len(field) > 0 {
fieldStr := strings.Join(field, ",")
gormDb = gormDb.Select(fieldStr)
}
gormDb = gormDb.Where(whereMap)
err = gormDb.First(&cont).Error
return
}
// 根据条件获取总数
func (cont *Answer) CountCont(whereMap interface{}) (countId int64) {
overall.CONSTANT_DB_KPI.Model(&cont).Where(whereMap).Count(&countId)
return
}
// 读取全部信息
func (cont *Answer) ContMap(whereMap interface{}, field ...string) (countAry []Answer, err error) {
gormDb := overall.CONSTANT_DB_KPI.Model(&cont)
if len(field) > 0 {
fieldStr := strings.Join(field, ",")
gormDb = gormDb.Select(fieldStr)
}
err = gormDb.Where(whereMap).Find(&countAry).Error
return
}
// 删除内容
func (cont *Answer) DelCont(whereMap interface{}) (err error) {
err = overall.CONSTANT_DB_KPI.Where(whereMap).Delete(&cont).Error
return
}

80
models/modelsschool/subject.go

@ -0,0 +1,80 @@
package modelsschool
import (
"appPlatform/overall"
"strings"
)
// 试题题目
type Subject struct {
Id int64 `json:"id" gorm:"primaryKey;column:s_id;type:bigint(20) unsigned;not null;comment:ID"`
Title string `json:"title" gorm:"column:s_title;type:varchar(255);not null;comment:题目"`
State int `json:"state" gorm:"column:s_state;type:tinyint(1) unsigned;default:1;not null;comment:是否启用(1:启用;2:禁用;3:删除)"`
Examination int64 `json:"examination" gorm:"column:s_examination;type:bigint(20) unsigned;default:0;not null;comment:'分厂"`
Sset int `json:"sset" gorm:"column:s_set;type:tinyint(1) unsigned;default:1;not null;comment:是否为共享(1:非共享;2:共享)"`
Time int64 `json:"time" gorm:"column:s_time;type:bigint(30) unsigned;default:0;not null;comment:创建时间"`
EiteTime int64 `json:"eiteTime" gorm:"column:s_eite_time;type:bigint(30) unsigned;default:0;not null;comment:修改时间"`
SystemUser int64 `json:"system_user" gorm:"column:s_system_user;type:bigint(50) unsigned;default:0;not null;comment:'创建人"`
Types int `json:"types" gorm:"column:s_type;type:tinyint(1) unsigned;default:0;not null;comment:类型(1:单选;2:多选;3:判断)"`
Work int64 `json:"work" gorm:"column:s_work;type:bigint(20) unsigned;default:0;not null;comment:'工段"`
Postiton int64 `json:"postiton" gorm:"column:s_postiton;type:bigint(20) unsigned;default:0;not null;comment:'职务"`
Weight int `json:"weight" gorm:"column:s_weight;type:tinyint(4) unsigned;default:0;not null;comment:权重"`
Keys int64 `json:"keys" gorm:"column:s_key;type:bigint(20) unsigned;default:0;not null;comment:'唯一识别符"`
TitleText string `json:"titleText" gorm:"column:s_text;type:text;comment:题目解释"`
ShareNumber int64 `json:"share_number" gorm:"column:s_share_number;type:bigint(50) unsigned;default:0;not null;comment:'共享识别符"`
SpaceNum int `json:"space_num" gorm:"column:s_space_num;type:tinyint(3) unsigned;default:0;not null;comment:空格"`
OneExam int64 `json:"one_exam" gorm:"column:s_one_exam;type:bigint(30) unsigned;default:0;not null;comment:'单一考试试题"`
Special int `json:"special" gorm:"column:s_special;type:tinyint(3) unsigned;default:0;not null;comment:专项考试(1:不是;2:是)"`
Groups int `json:"groups" gorm:"column:s_group;type:int(10) unsigned;default:0;not null;comment:归属集团"`
}
func (SystemMenu *Subject) TableName() string {
return "subject"
}
// // 菜单管理
// type SystemMenuOperation struct {
// Subject
// MenuPermit []MenuOperation `json:"menupermit"`
// }
// 编辑内容
func (cont *Subject) EiteCont(whereMap interface{}, saveData interface{}) (err error) {
err = overall.CONSTANT_DB_KPI.Model(&cont).Where(whereMap).Updates(saveData).Error
return
}
// 获取内容
func (cont *Subject) GetCont(whereMap interface{}, field ...string) (err error) {
gormDb := overall.CONSTANT_DB_KPI.Model(&cont)
if len(field) > 0 {
fieldStr := strings.Join(field, ",")
gormDb = gormDb.Select(fieldStr)
}
gormDb = gormDb.Where(whereMap)
err = gormDb.First(&cont).Error
return
}
// 根据条件获取总数
func (cont *Subject) CountCont(whereMap interface{}) (countId int64) {
overall.CONSTANT_DB_KPI.Model(&cont).Where(whereMap).Count(&countId)
return
}
// 读取全部信息
func (cont *Subject) ContMap(whereMap interface{}, field ...string) (countAry []Subject, err error) {
gormDb := overall.CONSTANT_DB_KPI.Model(&cont)
if len(field) > 0 {
fieldStr := strings.Join(field, ",")
gormDb = gormDb.Select(fieldStr)
}
err = gormDb.Where(whereMap).Find(&countAry).Error
return
}
// 删除内容
func (cont *Subject) DelCont(whereMap interface{}) (err error) {
err = overall.CONSTANT_DB_KPI.Where(whereMap).Delete(&cont).Error
return
}

155
overall/publicmethod/sm4.go

@ -0,0 +1,155 @@
package publicmethod
import (
"appPlatform/overall"
"bytes"
"crypto/cipher"
"encoding/hex"
"fmt"
"strings"
"github.com/tjfoc/gmsm/sm4"
)
/*
*
@ 作者: 秦东
@ 时间: 2024-08-28 14:51:02
@ 功能: SM4加密
@ 参数
#data 要加密的字符
#key 附加选项
@ 返回值
#
@ 方法原型
#
*/
func SM4Encrypt(data string, key ...string) (string, error) {
SM4Key := overall.CONSTANT_CONFIG.Appsetup.AppKey
if len(key) > 0 {
SM4Key = strings.Join(key, "-")
}
SM4Key = processString(SM4Key, 16, "s")
//字符串转byte切片
plainText := []byte(data)
SM4Iv := "04TzMuvkHm_EZnHm"
iv := []byte(SM4Iv)
keySm4 := []byte(SM4Key)
//实例化sm4加密对象
block, err := sm4.NewCipher(keySm4)
fmt.Printf("block:%v=====>%v\n", err, string(keySm4))
if err != nil {
return "1", err
}
//明文数据填充
paddingData := paddingLastGroup(plainText, block.BlockSize())
//声明SM4的加密工作模式
blockMode := cipher.NewCBCEncrypter(block, iv)
//为填充后的数据进行加密处理
cipherText := make([]byte, len(paddingData))
//使用CryptBlocks这个核心方法,将paddingData进行加密处理,将加密处理后的值赋值到cipherText中
blockMode.CryptBlocks(cipherText, paddingData)
//加密结果使用hex转成字符串,方便外部调用
cipherString := hex.EncodeToString(cipherText)
return cipherString, nil
}
// 明文数据填充
func paddingLastGroup(plainText []byte, blockSize int) []byte {
//1.计算最后一个分组中明文后需要填充的字节数
padNum := blockSize - len(plainText)%blockSize
//2.将字节数转换为byte类型
char := []byte{byte(padNum)}
//3.创建切片并初始化
newPlain := bytes.Repeat(char, padNum)
//4.将填充数据追加到原始数据后
newText := append(plainText, newPlain...)
return newText
}
// 去掉明文后面的填充数据
func unPaddingLastGroup(plainText []byte) []byte {
//1.拿到切片中的最后一个字节
length := len(plainText)
lastChar := plainText[length-1]
//2.将最后一个数据转换为整数
number := int(lastChar)
return plainText[:length-number]
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-28 14:58:03
@ 功能: SM4解密
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func SM4Decrypt(data string, key ...string) (string, error) {
SM4Key := overall.CONSTANT_CONFIG.Appsetup.AppKey
if len(key) > 0 {
SM4Key = strings.Join(key, "-")
}
SM4Key = processString(SM4Key, 16, "s")
SM4Iv := "04TzMuvkHm_EZnHm"
iv := []byte(SM4Iv)
keySm4 := []byte(SM4Key)
block, err := sm4.NewCipher(keySm4)
if err != nil {
return "", err
}
//使用hex解码
decodeString, err := hex.DecodeString(data)
if err != nil {
return "", err
}
//CBC模式 优点:具有较好的安全性,能够隐藏明文的模式和重复性。 缺点:加密过程是串行的,不适合并行处理。
blockMode := cipher.NewCBCDecrypter(block, iv)
//下文有详解这段代码的含义
blockMode.CryptBlocks(decodeString, decodeString)
//去掉明文后面的填充数据
plainText := unPaddingLastGroup(decodeString)
return string(plainText), nil
}
// 判断字符串长度,多余的删除,不足的补充
func processString(s string, length int, pad string) string {
// 如果字符串长度已经符合要求,直接返回
if len(s) == length {
return s
}
// 如果字符串长度超过了要求,截取指定长度的部分
if len(s) > length {
return s[:length]
}
// 如果字符串长度不足,使用pad字符串进行补充
return s + padString(pad, length-len(s))
}
// 根据需要补充的字符和次数,生成补充字符串
func padString(pad string, times int) string {
var result string
for i := 0; i < times; i++ {
result += pad
}
return result
}
Loading…
Cancel
Save