diff --git a/api/personalityTest/entry.go b/api/personalityTest/entry.go new file mode 100644 index 0000000..892dcec --- /dev/null +++ b/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) diff --git a/api/personalityTest/rongXin/controller.go b/api/personalityTest/rongXin/controller.go new file mode 100644 index 0000000..c2bdbf9 --- /dev/null +++ b/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) +} diff --git a/api/personalityTest/rongXin/type.go b/api/personalityTest/rongXin/type.go new file mode 100644 index 0000000..81f720b --- /dev/null +++ b/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"` +} diff --git a/api/shiyan/maptostruct/shiyan.go b/api/shiyan/maptostruct/shiyan.go index a2e4212..e79038a 100644 --- a/api/shiyan/maptostruct/shiyan.go +++ b/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) +} diff --git a/api/shiyan/maptostruct/type.go b/api/shiyan/maptostruct/type.go index 5874348..ffc13ae 100644 --- a/api/shiyan/maptostruct/type.go +++ b/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"` +} diff --git a/api/version1/user/type.go b/api/version1/user/type.go index fcaa748..c82b497 100644 --- a/api/version1/user/type.go +++ b/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 +} diff --git a/api/version1/user/userCont.go b/api/version1/user/userCont.go index 696fc2d..86e0426 100644 --- a/api/version1/user/userCont.go +++ b/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) +} diff --git a/apirouter/apishiyan/maptostruct.go b/apirouter/apishiyan/maptostruct.go index 290666f..98bffc9 100644 --- a/apirouter/apishiyan/maptostruct.go +++ b/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) } } diff --git a/apirouter/entry.go b/apirouter/entry.go index 456d6e0..a58e0c2 100644 --- a/apirouter/entry.go +++ b/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) diff --git a/apirouter/personalityAssessment/entry.go b/apirouter/personalityAssessment/entry.go new file mode 100644 index 0000000..de25e97 --- /dev/null +++ b/apirouter/personalityAssessment/entry.go @@ -0,0 +1,3 @@ +package personalityAssessment + +type ApiRouter struct{} diff --git a/apirouter/personalityAssessment/rongxin.go b/apirouter/personalityAssessment/rongxin.go new file mode 100644 index 0000000..85fcc39 --- /dev/null +++ b/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) //登录(内部人员) + } +} diff --git a/apirouter/v1/userRouters/pc.go b/apirouter/v1/userRouters/pc.go index f346433..ee69a1c 100644 --- a/apirouter/v1/userRouters/pc.go +++ b/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) //获取现有模版归属那个组织 } } diff --git a/go.mod b/go.mod index 663088f..612416c 100644 --- a/go.mod +++ b/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 diff --git a/go.sum b/go.sum index cfb55ae..7edd4d2 100644 --- a/go.sum +++ b/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= diff --git a/initialization/route/initRoute.go b/initialization/route/initRoute.go index 1c378c2..b505835 100644 --- a/initialization/route/initRoute.go +++ b/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 { diff --git a/models/modelsschool/answer.go b/models/modelsschool/answer.go new file mode 100644 index 0000000..b164858 --- /dev/null +++ b/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 +} diff --git a/models/modelsschool/subject.go b/models/modelsschool/subject.go new file mode 100644 index 0000000..471df81 --- /dev/null +++ b/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 +} diff --git a/overall/publicmethod/sm4.go b/overall/publicmethod/sm4.go new file mode 100644 index 0000000..184322b --- /dev/null +++ b/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 +}