123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896 |
- package controllers
- import (
- "database/sql"
- "fmt"
- "net/http"
- "sort"
- "strconv"
- "strings"
- "xugu_license/internal/api"
- "xugu_license/internal/global"
- middlewares "xugu_license/internal/middleware"
- "xugu_license/internal/models"
- "xugu_license/internal/module/email"
- "xugu_license/internal/utils"
- "github.com/gin-gonic/gin"
- "github.com/pkg/errors"
- )
- func getLoginInfo(c *gin.Context) (*middlewares.UserAuthInfo, error) {
- //获取当前登录用户信息
- userAny, exists := c.Get("userInfo")
- if !exists {
- global.Logger.Errorln("GetLicenseInfo: 用户信息不存在")
- return nil, errors.New("GetLicenseInfo: 用户信息不存在")
- // c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
- // c.Abort()
- }
- userInfo := userAny.(*middlewares.UserAuthInfo)
- return userInfo, nil
- }
- func GetSingleLicenseInfoController(c *gin.Context) {
- // userInfo, err := getLoginInfo(c)
- // if err != nil {
- // c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
- // c.Abort()
- // }
- //获取请求参数
- page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
- pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
- LicUniqueID := c.DefaultQuery("LicUniqueID", "10")
- //获取指定的license信息
- applications, total, err := models.GetOALicenseInfo(page, pageSize, "", LicUniqueID, "", "")
- if err != nil {
- global.Logger.Errorln("指定UniqueID查询错误:", err.Error())
- c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("指定UniqueID查询错误: ", err.Error())})
- return
- }
- c.JSON(http.StatusOK, gin.H{
- "data": *applications,
- "page": 1,
- "pageSize": 1,
- "total": total,
- })
- }
- // func GetAllLicenseInfoControllerToDb(c *gin.Context) {
- // // userInfo, err := getLoginInfo(c)
- // // if err != nil {
- // // c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
- // // c.Abort()
- // // }
- // //获取请求参数
- // page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
- // pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
- // //获取指定的license信息
- // applications, total, err := models.GetOALicenseInfo(page, pageSize, "read_all_license", "", "", "")
- // if err != nil {
- // global.Logger.Errorln("read_all_license查询错误:", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("read_all_license查询错误: ", err.Error())})
- // return
- // }
- // var datas []api.AllLicenseInfoResponse
- // for _, v := range *applications {
- // data := api.AllLicenseInfoResponse{
- // UniqueID: utils.ToString(v.LicInfo.UniqueID),
- // OARequestID: utils.ToInt64(v.LicInfo.OARequestID),
- // OARequestName: utils.ToString(v.LicInfo.OARequestName),
- // OARequestNameNew: utils.ToString(v.LicInfo.OARequestNameNew),
- // OARequestNameHTMLNew: utils.ToString(v.LicInfo.OARequestNameHTMLNew),
- // OAGLXMId: utils.ToInt64(v.LicInfo.OAGLXMID),
- // OAGLXMName: utils.ToString(v.LicInfo.OAGLXMName),
- // OASQSJ: utils.ToTimeString(v.LicInfo.OASQSJ),
- // OASalespersonName: utils.ToString(v.LicInfo.OASalespersonName),
- // OAXSJSYX: utils.ToString(v.LicInfo.OAXSJSYX),
- // OAOperationsPersonName: utils.ToString(v.LicInfo.OAOperationsPersonName),
- // OAJFJSYX: utils.ToString(v.LicInfo.OAJFJSYX),
- // OASYDW: utils.ToString(v.LicInfo.OASYDW),
- // OAXMXXMS: utils.ToString(v.LicInfo.OAXMXXMS),
- // OAJDS: utils.ToInt64(v.LicInfo.OAJDS),
- // OANodeCount: utils.ToInt64(v.LicInfo.OANodeCount),
- // OAProductCode: utils.ToString(v.LicInfo.OAProductCode),
- // OAProductName: utils.ToString(v.LicInfo.OAProductName),
- // OAProductVersion: utils.ToString(v.LicInfo.OAProductVersion),
- // OACPU: utils.ToString(v.LicInfo.OACPU),
- // OAOperatingSystem: utils.ToString(v.LicInfo.OAOperatingSystem),
- // OAMainMAC: utils.ToString(v.LicInfo.OAMainMAC),
- // OASecondMAC: utils.ToString(v.LicInfo.OASecondMAC),
- // OACreationDate: utils.ToString(v.LicInfo.OACreationDate),
- // OACreationTime: utils.ToString(v.LicInfo.OACreationTime),
- // OALastOperateDate: utils.ToString(v.LicInfo.OALastOperateDate),
- // OALastOperateTime: utils.ToString(v.LicInfo.OALastOperateTime),
- // CaptureTime: utils.ToTimeString(v.LicInfo.CaptureTime),
- // DelTime: utils.ToTimeString(v.LicInfo.DelTime),
- // LastOperateTime: utils.ToTimeString(v.LicInfo.LastOperateTime),
- // LicenseUniqueID: utils.ToString(v.GenrateInfo.LicenseUniqueID),
- // LicenseFlage: utils.ToString(v.GenrateInfo.LicenseFlage),
- // Lic1: utils.ToString(v.GenrateInfo.Lic1),
- // Lic2: utils.ToString(v.GenrateInfo.Lic2),
- // CreatorGenerate: utils.ToTimeString(v.GenrateInfo.CreatorGenerate),
- // }
- // datas = append(datas, data)
- // }
- // c.JSON(http.StatusOK, gin.H{
- // "data": datas,
- // "page": page,
- // "pageSize": pageSize,
- // "total": total,
- // })
- // }
- func GetAllLicenseInfoController(c *gin.Context) {
- //获取请求参数
- page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
- pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
- //获取用户信息和权限
- userInfo, err := getLoginInfo(c)
- if err != nil {
- c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
- c.Abort()
- }
- // if t := userInfo.Permission[middlewares.ReadAllLicense]; t == middlewares.ReadAllLicense {
- // }
- var datas [][]api.AllLicenseInfoResponse
- var Total int
- // 初始化存储 `OARequestID` 相同的 `ApiLicenseInfoTemp` 列表的 map
- oaRequestIDMap := make(map[int64][]api.AllLicenseInfoResponse)
- if userInfo.Permission[middlewares.ReadAllLicense] == middlewares.ReadAllLicense {
- datas1, total, err := models.GetOALicenseInfo(pageSize, page, "read_all_license", "", "", "")
- if err != nil {
- global.Logger.Errorln("error", err.Error())
- c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
- return
- }
- Total = total
- //var ApiLicenseInfoTemp []api.AllLicenseInfoResponse
- for _, data := range *datas1 {
- ApiLicenseInfo := api.AllLicenseInfoResponse{
- UniqueID: utils.ToString(data.LicInfo.UniqueID),
- OARequestID: utils.ToInt64(data.LicInfo.OARequestID),
- OARequestName: utils.ToString(data.LicInfo.OARequestName),
- OARequestNameNew: utils.ToString(data.LicInfo.OARequestNameNew),
- OARequestNameHTMLNew: utils.ToString(data.LicInfo.OARequestNameHTMLNew),
- OAGLXMId: utils.ToInt64(data.LicInfo.OAGLXMID),
- OAGLXMName: utils.ToString(data.LicInfo.OAGLXMName),
- OASQSJ: utils.ToString(data.LicInfo.OASQSJ),
- OASalespersonName: utils.ToString(data.LicInfo.OASalespersonName),
- OAXSJSYX: utils.ToString(data.LicInfo.OAXSJSYX),
- OAOperationsPersonName: utils.ToString(data.LicInfo.OAOperationsPersonName),
- OAJFJSYX: utils.ToString(data.LicInfo.OAJFJSYX),
- OASYDW: utils.ToString(data.LicInfo.OASYDW),
- OAXMXXMS: utils.ToString(data.LicInfo.OAXMXXMS),
- OAJDS: utils.ToInt64(data.LicInfo.OAJDS),
- OANodeCount: utils.ToInt64(data.LicInfo.OANodeCount),
- OAProductCode: utils.ToString(data.LicInfo.OAProductCode),
- OAProductName: utils.ToString(data.LicInfo.OAProductName),
- OAProductVersion: utils.ToString(data.LicInfo.OAProductVersion),
- OACPU: utils.ToString(data.LicInfo.OACPU),
- OAOperatingSystem: utils.ToString(data.LicInfo.OAOperatingSystem),
- OAMainMAC: utils.ToString(data.LicInfo.OAMainMAC),
- OASecondMAC: utils.ToString(data.LicInfo.OASecondMAC),
- OACreationDate: utils.ToString(data.LicInfo.OACreationDate),
- OACreationTime: utils.ToString(data.LicInfo.OACreationTime),
- OALastOperateDate: utils.ToString(data.LicInfo.OALastOperateDate),
- OALastOperateTime: utils.ToString(data.LicInfo.OALastOperateTime),
- CaptureTime: utils.ToTimeString(data.LicInfo.CaptureTime),
- DelTime: utils.ToTimeString(data.LicInfo.DelTime),
- LastOperateTime: utils.ToTimeString(data.LicInfo.LastOperateTime),
- LicenseFlage: utils.ToString(data.GenrateInfo.LicenseFlage),
- Lic1: utils.ToString(data.GenrateInfo.Lic1),
- Lic2: utils.ToString(data.GenrateInfo.Lic2),
- CreatorGenerate: utils.ToTimeString(data.GenrateInfo.CreatorGenerate),
- }
- // 将 `ApiLicenseInfo` 添加到 `OARequestID` 对应的数组中
- oaRequestID := utils.ToInt64(data.LicInfo.OARequestID)
- oaRequestIDMap[oaRequestID] = append(oaRequestIDMap[oaRequestID], ApiLicenseInfo)
- }
- } else if userInfo.Permission[middlewares.ReadLicense] == middlewares.ReadLicense {
- datas1, total, err := models.GetOALicenseInfo(pageSize, page, "", "", userInfo.UniqueID, "")
- if err != nil {
- global.Logger.Errorln("error", err.Error())
- c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
- return
- }
- Total = total
- //var ApiLicenseInfoTemp []api.AllLicenseInfoResponse
- for _, data := range *datas1 {
- ApiLicenseInfo := api.AllLicenseInfoResponse{
- UniqueID: utils.ToString(data.LicInfo.UniqueID),
- OARequestID: utils.ToInt64(data.LicInfo.OARequestID),
- OARequestName: utils.ToString(data.LicInfo.OARequestName),
- OARequestNameNew: utils.ToString(data.LicInfo.OARequestNameNew),
- OARequestNameHTMLNew: utils.ToString(data.LicInfo.OARequestNameHTMLNew),
- OAGLXMId: utils.ToInt64(data.LicInfo.OAGLXMID),
- OAGLXMName: utils.ToString(data.LicInfo.OAGLXMName),
- OASQSJ: utils.ToString(data.LicInfo.OASQSJ),
- OASalespersonName: utils.ToString(data.LicInfo.OASalespersonName),
- OAXSJSYX: utils.ToString(data.LicInfo.OAXSJSYX),
- OAOperationsPersonName: utils.ToString(data.LicInfo.OAOperationsPersonName),
- OAJFJSYX: utils.ToString(data.LicInfo.OAJFJSYX),
- OASYDW: utils.ToString(data.LicInfo.OASYDW),
- OAXMXXMS: utils.ToString(data.LicInfo.OAXMXXMS),
- OAJDS: utils.ToInt64(data.LicInfo.OAJDS),
- OANodeCount: utils.ToInt64(data.LicInfo.OANodeCount),
- OAProductCode: utils.ToString(data.LicInfo.OAProductCode),
- OAProductName: utils.ToString(data.LicInfo.OAProductName),
- OAProductVersion: utils.ToString(data.LicInfo.OAProductVersion),
- OACPU: utils.ToString(data.LicInfo.OACPU),
- OAOperatingSystem: utils.ToString(data.LicInfo.OAOperatingSystem),
- OAMainMAC: utils.ToString(data.LicInfo.OAMainMAC),
- OASecondMAC: utils.ToString(data.LicInfo.OASecondMAC),
- OACreationDate: utils.ToString(data.LicInfo.OACreationDate),
- OACreationTime: utils.ToString(data.LicInfo.OACreationTime),
- OALastOperateDate: utils.ToString(data.LicInfo.OALastOperateDate),
- OALastOperateTime: utils.ToString(data.LicInfo.OALastOperateTime),
- CaptureTime: utils.ToTimeString(data.LicInfo.CaptureTime),
- DelTime: utils.ToTimeString(data.LicInfo.DelTime),
- LastOperateTime: utils.ToTimeString(data.LicInfo.LastOperateTime),
- LicenseFlage: utils.ToString(data.GenrateInfo.LicenseFlage),
- Lic1: utils.ToString(data.GenrateInfo.Lic1),
- Lic2: utils.ToString(data.GenrateInfo.Lic2),
- CreatorGenerate: utils.ToTimeString(data.GenrateInfo.CreatorGenerate),
- }
- // 将 `ApiLicenseInfo` 添加到 `OARequestID` 对应的数组中
- oaRequestID := utils.ToInt64(data.LicInfo.OARequestID)
- oaRequestIDMap[oaRequestID] = append(oaRequestIDMap[oaRequestID], ApiLicenseInfo)
- }
- }
- //获取指定的license缓存信息
- //data, err := global.LicCache.GetPaginatedData(page, pageSize)
- //返回[][]data 的方式
- // var datas [][]api.AllLicenseInfoResponse
- // for _, lic := range data {
- // var dataTemp []api.AllLicenseInfoResponse
- // for _, v := range lic {
- // data := api.AllLicenseInfoResponse{
- // UniqueID: v.UniqueID.String,
- // OARequestID: v.OARequestID.Int64,
- // OARequestName: utils.ToString(v.OARequestName),
- // OARequestNameNew: utils.ToString(v.OARequestNameNew),
- // OARequestNameHTMLNew: utils.ToString(v.OARequestNameHTMLNew),
- // OAGLXMId: utils.ToInt64(v.OAGLXMId),
- // OAGLXMName: utils.ToString(v.OAGLXMName),
- // OASQSJ: utils.ToTimeString(v.OASQSJ),
- // OASalespersonName: utils.ToString(v.OASalespersonName),
- // OAXSJSYX: utils.ToString(v.OAXSJSYX),
- // OAOperationsPersonName: utils.ToString(v.OAOperationsPersonName),
- // OAJFJSYX: utils.ToString(v.OAJFJSYX),
- // OASYDW: utils.ToString(v.OASYDW),
- // OAXMXXMS: utils.ToString(v.OAXMXXMS),
- // OAJDS: utils.ToInt64(v.OAJDS),
- // OANodeCount: utils.ToInt64(v.OANodeCount),
- // OAProductCode: utils.ToString(v.OAProductCode),
- // OAProductName: utils.ToString(v.OAProductName),
- // OAProductVersion: utils.ToString(v.OAProductVersion),
- // OACPU: utils.ToString(v.OACPU),
- // OAOperatingSystem: utils.ToString(v.OAOperatingSystem),
- // OAMainMAC: utils.ToString(v.OAMainMAC),
- // OASecondMAC: utils.ToString(v.OASecondMAC),
- // OACreationDate: utils.ToString(v.OACreationDate),
- // OACreationTime: utils.ToString(v.OACreationTime),
- // OALastOperateDate: utils.ToString(v.OALastOperateDate),
- // OALastOperateTime: utils.ToString(v.OALastOperateTime),
- // CaptureTime: utils.ToTimeString(v.CaptureTime),
- // DelTime: utils.ToTimeString(v.DelTime),
- // LastOperateTime: utils.ToTimeString(v.LastOperateTime),
- // LicenseUniqueID: utils.ToString(v.LicenseUniqueID),
- // LicenseFlage: utils.ToString(v.LicenseFlage),
- // Lic1: utils.ToString(v.Lic1),
- // Lic2: utils.ToString(v.Lic2),
- // CreatorGenerate: utils.ToString(v.CreatorGenerate),
- // }
- // dataTemp = append(dataTemp, data)
- // }
- // datas = append(datas, dataTemp)
- // }
- // 将 `oaRequestIDMap` 中的所有 `ApiLicenseInfoTemp` 列表添加到 `datas` 中
- for _, apiLicenseInfoTemp := range oaRequestIDMap {
- datas = append(datas, apiLicenseInfoTemp)
- }
- // 对 datas 的第一维进行排序
- sort.Slice(datas, func(i, j int) bool {
- // 假设你需要根据每个数组第一个元素的 OACreationDate 和 OACreationTime 来排序
- if datas[i][0].OACreationDate == datas[j][0].OACreationDate {
- return datas[i][0].OACreationTime > datas[j][0].OACreationTime
- }
- return datas[i][0].OACreationDate > datas[j][0].OACreationDate
- })
- c.JSON(http.StatusOK, gin.H{
- "data": datas,
- "page": page,
- "pageSize": pageSize,
- "total": Total,
- })
- }
- func GenerateOALicenseStrController(c *gin.Context) {
- var request api.GenerateLicenseStrRequest
- if err := c.ShouldBindJSON(&request); err != nil {
- global.Logger.Errorln("解析request失败 : ", err.Error())
- c.JSON(400, gin.H{
- "error": fmt.Sprintf("解析请求失败: ", err.Error()),
- })
- return
- }
- //生成单独的license
- if request.UniqueID != "" {
- if err := generateLicenseStrSub(request.UniqueID); err != nil {
- global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", request.UniqueID, err.Error())
- c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("请联系管理员, LicenseInfo%v生成失败: %v", request.UniqueID, err.Error())})
- return
- }
- } else if request.OARequestId != "" {
- //一个OARequestId会有多条数据UniqueID
- OALics, _, err := models.GetOALicenseInfo(0, 0, "", "", "", request.OARequestId)
- if err != nil || OALics == nil {
- global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
- c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
- return
- }
- //生成license,已生成的不管
- for _, v := range *OALics {
- if v.GenrateInfo.LicenseFlage.String == "未生成" {
- err := generateLicenseStrSub(utils.ToString(v.LicInfo.UniqueID))
- if err != nil {
- global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error())
- c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("请联系管理员, LicenseInfo%v生成失败: %v", v.LicInfo.UniqueID, err.Error())})
- return
- }
- }
- }
- } else {
- global.Logger.Errorln("未指定明确License行 ")
- c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("未指定明确License行 ")})
- return
- }
- //刷新缓存
- // layout := "2006-01-02 15:04:05"
- // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
- // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
- // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
- // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
- // return
- // }
- // fmt.Printf("LicenseInfo数据刷新缓存成功 %#v\n", global.LicCache.GetData())
- // applications, _, err := models.GetOALicenseInfo(0, 1, "", request.UniqueID, "")
- // if err != nil {
- // global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
- // return
- // }
- // pj := license.ProjectInfo{
- // ProjectName: utils.ToString((*applications)[0].LicInfo.OAProductName),
- // UserName: utils.ToString((*applications)[0].LicInfo.OAProductVersion),
- // UserAddr: "未填写",
- // SerialNumber: "未填写",
- // }
- // ei := license.EnvironmentInfo{
- // CpuSN: "未填写",
- // BaseboardSN: "未填写",
- // MacAddr: utils.ToString((*applications)[0].LicInfo.OAMainMAC),
- // DiskID: "未填写",
- // IPAddr: "未填写",
- // }
- // LicType := utils.SwitchLicenseType(utils.ToString((*applications)[0].LicInfo.OAProductName))
- // lI := license.LicenseInfo{
- // GenDate: "2024-07-15",
- // ExpireDate: "9999-12-31",
- // LicenseType: LicType,
- // LicenseVersion: 1,
- // HardType: 3,
- // }
- //这里调用的是license模块中的生成license的方法
- // res := true
- // if res {
- // //生成副主节点license
- // if (*applications)[0].LicInfo.OASecondMAC.String != "" {
- // // var licStr2 []byte
- // // ei.MacAddr = applications[0].SecondaryMasterMacAddress
- // // licStr2 = license.GenerateLicense(pj, ei, lI)
- // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
- // } else {
- // //fmt.Println("licStr licStr2", licStr, licStr2)
- // //插入到数据库
- // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
- // }
- // } else {
- // licStr := license.GenerateLicense(pj, ei, lI)
- // //生成副主节点license
- // if (*applications)[0].LicInfo.OASecondMAC.String != "" {
- // var licStr2 []byte
- // ei.MacAddr = (*applications)[0].LicInfo.OASecondMAC.String
- // licStr2 = license.GenerateLicense(pj, ei, lI)
- // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), licStr, licStr2)
- // } else {
- // //插入到数据库
- // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), licStr, nil)
- // }
- // }
- // if err != nil {
- // fmt.Println(err)
- // if err := c.ShouldBindJSON(&request); err != nil {
- // c.JSON(400, gin.H{
- // "error": err.Error(),
- // })
- // return
- // }
- // }
- // if err != nil {
- // fmt.Println(err)
- // if err := c.ShouldBindJSON(&request); err != nil {
- // global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
- // c.JSON(400, gin.H{
- // "error": fmt.Sprintf("数据查询失败: ", err.Error()),
- // })
- // return
- // }
- // }
- c.JSON(http.StatusOK, gin.H{
- "success": true,
- "message": "License生成成功!",
- })
- //xlsx.ExcelToMail(lic, licStr, licStr2)
- }
- func generateLicenseStrSub(UniqueID string) error {
- var applications *[]models.OALicenseInfo
- var err error
- if UniqueID != "" {
- applications, _, err = models.GetOALicenseInfo(0, 1, "", UniqueID, "", "")
- if err != nil {
- global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
- return errors.Errorf("LicenseInfo数据查询失败:: %v", err.Error())
- }
- }
- // (*applications)[0].LicInfo.UniqueID.String = ""
- // (*applications)[0].LicInfo.UniqueID.Valid = false
- // (*applications)[0].GenrateInfo.LicenseUniqueID.String = ""
- // (*applications)[0].GenrateInfo.LicenseUniqueID.Valid = false
- fmt.Printf("applications%#v\n", applications)
- //检测该数据是否与oa库数据库一致
- isCheck, err := models.CheckLicenseInfoInOADB(&(*applications)[0].LicInfo)
- if err != nil {
- global.Logger.Errorln("LicenseInfo数据对比oa库 查询失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
- return errors.Errorf("LicenseInfo数据对比oa库 查询失败 %v", err.Error())
- }
- if !isCheck {
- global.Logger.Errorln("LicenseInfo数据对比oa库 不一致")
- return errors.Errorf("LicenseInfo数据对比oa库 数据不一致 \n")
- }
- //checkTemp := CompareOALicenseInfo(&(*applications)[0], OALicenseInfo)
- //如果不一致,则修改源数据
- // if checkTemp != true {
- // global.Logger.Errorln("LicenseInfo数据对比oa库 不一致")
- // // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
- // OALicenseInfo.LicInfo.UniqueID = (*applications)[0].LicInfo.UniqueID
- // if err := models.UpdatelicenseInfoRow(*OALicenseInfo); err != nil {
- // global.Logger.Errorln("LicenseInfo数据对比oa库 不一致,更新数据库失败: ", err.Error())
- // return errors.Errorf("LicenseInfo数据对比oa库 不一致,更新数据库失败:%v", err.Error())
- // }
- // //刷新缓存
- // layout := "2006-01-02 15:04:05"
- // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
- // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
- // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
- // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
- // return errors.Errorf("LicenseInfo数据刷新缓存失败:")
- // }
- // return errors.Errorf("LicenseInfo数据对比oa库 不一致,清刷新页面")
- //}
- // pj := license.ProjectInfo{
- // ProjectName: utils.ToString((*applications)[0].LicInfo.OAProductName),
- // UserName: utils.ToString((*applications)[0].LicInfo.OAProductVersion),
- // UserAddr: "未填写",
- // SerialNumber: "未填写",
- // }
- // ei := license.EnvironmentInfo{
- // CpuSN: "未填写",
- // BaseboardSN: "未填写",
- // MacAddr: utils.ToString((*applications)[0].LicInfo.OAMainMAC),
- // DiskID: "未填写",
- // IPAddr: "未填写",
- // }
- // LicType := utils.SwitchLicenseType(utils.ToString((*applications)[0].LicInfo.OAProductName))
- // lI := license.LicenseInfo{
- // GenDate: "2024-07-15",
- // ExpireDate: "9999-12-31",
- // LicenseType: LicType,
- // LicenseVersion: 1,
- // HardType: 3,
- // }
- //生成副主节点license
- if applications == nil {
- global.Logger.Errorln("LicenseInfo数据生成失败 ,数据查询为空 ")
- //c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("LicenseInfo数据生成失败 ,数据查询为空: ", err.Error())})
- return errors.Errorf("LicenseInfo数据生成失败 ,数据查询为空 ")
- }
- if (*applications)[0].LicInfo.OASecondMAC.String != "" {
- // var licStr2 []byte
- // ei.MacAddr = applications[0].SecondaryMasterMacAddress
- // licStr2 = license.GenerateLicense(pj, ei, lI)
- err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
- if err != nil {
- global.Logger.Errorln("LicenseInfo生成插入失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
- return errors.Errorf("LicenseInfo生成插入失败:: ", err.Error())
- }
- } else {
- //fmt.Println("licStr licStr2", licStr, licStr2)
- //插入到数据库
- err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
- if err != nil {
- global.Logger.Errorln("LicenseInfo2生成插入失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
- return errors.Errorf("LicenseInfo2生成插入失败:: ", err.Error())
- }
- }
- return nil
- }
- // func CheckDistributeOALicenseToOaDbController(c *gin.Context) {
- // var CheckDisLicense struct {
- // LicUniqueID string `json:"lic_unique_id"`
- // }
- // var request CheckDisLicense
- // if err := c.ShouldBindJSON(&request); err != nil {
- // global.Logger.Errorln("license分发请求解析失败 %s", err.Error())
- // c.JSON(400, gin.H{
- // "error": fmt.Sprintf("license分发请求解析失败 %s", err.Error()),
- // })
- // return
- // }
- // //检测该数据是否与oa库数据库一致
- // OALicenseInfo, err := models.CheckLicenseInfoInOADB((*applications)[0].LicInfo.ID)
- // if err != nil {
- // global.Logger.Errorln("LicenseInfo数据对比oa库 查询失败: ", err.Error())
- // // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
- // return errors.Errorf("LicenseInfo数据对比oa库 查询失败 %v", err.Error())
- // }
- // checkTemp := CompareOALicenseInfo(&(*applications)[0], OALicenseInfo)
- // //如果不一致,则修改源数据
- // }
- func DistributeOALicenseController(c *gin.Context) {
- //判断是否发邮件
- //数据库查询license信息
- var request api.DistributeLicenseRequest
- if err := c.ShouldBindJSON(&request); err != nil {
- global.Logger.Errorln("license分发请求解析失败 %s", err.Error())
- c.JSON(400, gin.H{
- "error": fmt.Sprintf("license分发请求解析失败 %s", err.Error()),
- })
- return
- }
- fmt.Println("DistributeLicenseRequest", request)
- //查询该license是否已经分发给了该用户
- var licToUser []string
- for i, v := range request.UserUniqueIDs {
- fmt.Println("request.UserUniqueIDs", request.LicenseUniqueID, v)
- if isTurn, err := models.CheckLicenseToUser(request.LicenseUniqueID, v); err != nil {
- global.Logger.Errorln("该license查询是否分发给用户失败 ", v, err.Error())
- c.JSON(400, gin.H{
- "success": false,
- "error": fmt.Sprintf("该license查询是否分发给用户失败: %s", v, err.Error()),
- })
- return
- } else if isTurn {
- global.Logger.Info("该license已经分发给了该用户 ", v)
- licToUser = append(licToUser, request.UserNames[i])
- }
- }
- //返回已经分发过的用户
- if len(licToUser) != 0 {
- c.JSON(400, gin.H{
- "success": false,
- "error": fmt.Sprintf("该license已经分发给了该用户: %s\n", licToUser),
- })
- return
- }
- applications, _, err := models.GetOALicenseInfo(1, 1, "", request.LicenseUniqueID, "", "")
- if err != nil {
- c.JSON(http.StatusBadRequest, gin.H{"success": false,
- "error": err.Error()})
- return
- }
- //如果lic1为空则报错
- if (*applications)[0].GenrateInfo.Lic1.String == "" {
- global.Logger.Errorln("license未生成 ")
- c.JSON(http.StatusBadRequest, gin.H{"success": false,
- "error": "license未生成"})
- return
- }
- //邮箱不空则发送
- var EmailArray []string
- if request.Emails != "" {
- fmt.Println("request.Emails", request.Emails)
- EmailArray = strings.Split(request.Emails, ",")
- fmt.Println("EmailArray", EmailArray)
- em, err := email.BuildEmail(&(*applications)[0], EmailArray, (*applications)[0].GenrateInfo.Lic1.String, (*applications)[0].GenrateInfo.Lic2.String)
- if err != nil {
- global.Logger.Errorln("邮件生成失败", err.Error())
- c.JSON(400, gin.H{
- "success": false,
- "error": fmt.Sprintf("邮件生成失败: ", err.Error()),
- })
- return
- }
- err = email.SendEmail(em)
- if err != nil {
- global.Logger.Errorln("邮件发送失败", err.Error())
- c.JSON(400, gin.H{
- "success": false,
- "error": fmt.Sprintf("邮件发送失败: ", err.Error()),
- })
- return
- }
- }
- for i, v := range request.UserUniqueIDs {
- err = models.InsertlicenseRecordByUserRow((*applications)[0].LicInfo.UniqueID.String, v, request.UserAccounts[i], request.OperatorUniqueID)
- if err != nil {
- global.Logger.Errorln("数据库插入失败: ", err.Error())
- c.JSON(400, gin.H{
- "success": false,
- "error": fmt.Sprintf("插入失败: ", err.Error()),
- })
- return
- }
- }
- if len(EmailArray) != 0 {
- for _, v := range EmailArray {
- err = models.InsertlicenseRecordByEmailRow((*applications)[0].LicInfo.UniqueID.String, v, request.OperatorUniqueID)
- if err != nil {
- global.Logger.Errorln("数据库插入失败: ", err.Error())
- c.JSON(400, gin.H{
- "error": fmt.Sprintf("插入失败: ", err.Error()),
- })
- return
- }
- }
- }
- //刷新缓存
- // layout := "2006-01-02 15:04:05"
- // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
- // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
- // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
- // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
- // return
- // }
- c.JSON(http.StatusOK, gin.H{
- "success": true,
- "data": "分发成功!",
- })
- }
- // 获取分发历史
- func GetlicenseRecordInfo(c *gin.Context) {
- // type licenseRecordInfoRequest struct {
- // UniqueID string `json:"uniqueID"`
- // Id int `json:"id"`
- // }
- var request api.GetDistributeHistoryRequest
- if err := c.ShouldBindJSON(&request); err != nil {
- global.Logger.Errorln("解析请求失败 ", err.Error())
- c.JSON(400, gin.H{
- "error": fmt.Sprintf("解析请求失败: ", err.Error()),
- })
- return
- }
- LicUers, err := models.GetlicenseRecordByUser(request.UniqueID)
- if err != nil {
- global.Logger.Errorln("数据查询失败 ", err.Error())
- c.JSON(400, gin.H{
- "error": fmt.Sprintf("数据查询失败: ", err.Error()),
- })
- return
- }
- LicEmails, err := models.GetlicenseRecordByEmail(request.UniqueID)
- if err != nil {
- global.Logger.Errorln("数据查询失败 ", err.Error())
- c.JSON(400, gin.H{
- "error": fmt.Sprintf("数据查询失败: ", err.Error()),
- })
- return
- }
- licR := models.LicenseRecord{
- LicenseRecordToUser: LicUers,
- LicenseRecordToEmails: LicEmails,
- }
- fmt.Println("分发历史applications", licR)
- c.JSON(http.StatusOK, gin.H{
- "success": true,
- "data": licR,
- })
- }
- // 更新license信息
- func UpdateLicense(c *gin.Context) {
- var license api.UpdateLicenseInfoRequest
- // 绑定JSON数据到License结构体
- if err := c.ShouldBindJSON(&license); err != nil {
- c.JSON(http.StatusBadRequest, gin.H{
- "success": false,
- "error": err.Error(),
- })
- return
- }
- // fmt.Printf(" license.ApplicationDate: %#v ", license)
- err := models.UpdatelicenseInfoRow(models.OALicenseInfo{
- LicInfo: models.TargetOALicenseInfo{
- UniqueID: sql.NullString{
- String: license.UniqueID,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OARequestName: sql.NullString{
- String: license.Creator,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OACreationDate: sql.NullString{
- String: license.ApplicationDate,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OAGLXMName: sql.NullString{
- String: license.AssociatedProject,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OANodeCount: sql.NullInt64{
- Int64: license.NodeCount,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OASalespersonName: sql.NullString{
- String: license.SalesPerson,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OAOperationsPersonName: sql.NullString{
- String: license.SupportPerson,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OAXSJSYX: sql.NullString{
- String: license.SalesEmail,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OAJFJSYX: sql.NullString{
- String: license.SupportEmail,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OAJDS: sql.NullInt64{
- Int64: license.TotalNodes,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OAProductName: sql.NullString{
- String: license.ProductName,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OAProductVersion: sql.NullString{
- String: license.Version,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- OASYDW: sql.NullString{
- String: license.Company,
- Valid: true, // 因为你有一个有效的字符串,所以设置为 true
- },
- },
- })
- if err != nil {
- global.Logger.Errorln("数据插入失败 ", err.Error())
- c.JSON(http.StatusBadRequest, gin.H{"success": false, "error": fmt.Sprintf("数据插入失败: ", err.Error())})
- return
- }
- //刷新缓存
- // layout := "2006-01-02 15:04:05"
- // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
- // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
- // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
- // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
- // return
- // }
- c.JSON(http.StatusOK, gin.H{
- "success": true,
- })
- }
- // 删除一行lincese信息
- func DelLicenseInfoRow(c *gin.Context) {
- // 解析 JSON 请求体
- var request UniqueIDRequest
- if err := c.ShouldBindJSON(&request); err != nil {
- c.JSON(400, gin.H{
- "error": err.Error(),
- })
- return
- }
- err := models.DelLicenseInfoRow(request.UniqueID)
- if err != nil {
- global.Logger.Errorln("删除一行License信息失败 ", err.Error())
- c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("删除失败: ", err.Error())})
- return
- }
- //刷新缓存
- // layout := "2006-01-02 15:04:05"
- // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
- // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
- // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
- // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
- // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
- // return
- // }
- c.JSON(http.StatusOK, gin.H{
- "success": true,
- "data": "删除成功",
- })
- }
|