OALicenseInfo_controllers.go 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896
  1. package controllers
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "net/http"
  6. "sort"
  7. "strconv"
  8. "strings"
  9. "xugu_license/internal/api"
  10. "xugu_license/internal/global"
  11. middlewares "xugu_license/internal/middleware"
  12. "xugu_license/internal/models"
  13. "xugu_license/internal/module/email"
  14. "xugu_license/internal/utils"
  15. "github.com/gin-gonic/gin"
  16. "github.com/pkg/errors"
  17. )
  18. func getLoginInfo(c *gin.Context) (*middlewares.UserAuthInfo, error) {
  19. //获取当前登录用户信息
  20. userAny, exists := c.Get("userInfo")
  21. if !exists {
  22. global.Logger.Errorln("GetLicenseInfo: 用户信息不存在")
  23. return nil, errors.New("GetLicenseInfo: 用户信息不存在")
  24. // c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
  25. // c.Abort()
  26. }
  27. userInfo := userAny.(*middlewares.UserAuthInfo)
  28. return userInfo, nil
  29. }
  30. func GetSingleLicenseInfoController(c *gin.Context) {
  31. // userInfo, err := getLoginInfo(c)
  32. // if err != nil {
  33. // c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
  34. // c.Abort()
  35. // }
  36. //获取请求参数
  37. page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
  38. pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
  39. LicUniqueID := c.DefaultQuery("LicUniqueID", "10")
  40. //获取指定的license信息
  41. applications, total, err := models.GetOALicenseInfo(page, pageSize, "", LicUniqueID, "", "")
  42. if err != nil {
  43. global.Logger.Errorln("指定UniqueID查询错误:", err.Error())
  44. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("指定UniqueID查询错误: ", err.Error())})
  45. return
  46. }
  47. c.JSON(http.StatusOK, gin.H{
  48. "data": *applications,
  49. "page": 1,
  50. "pageSize": 1,
  51. "total": total,
  52. })
  53. }
  54. // func GetAllLicenseInfoControllerToDb(c *gin.Context) {
  55. // // userInfo, err := getLoginInfo(c)
  56. // // if err != nil {
  57. // // c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
  58. // // c.Abort()
  59. // // }
  60. // //获取请求参数
  61. // page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
  62. // pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
  63. // //获取指定的license信息
  64. // applications, total, err := models.GetOALicenseInfo(page, pageSize, "read_all_license", "", "", "")
  65. // if err != nil {
  66. // global.Logger.Errorln("read_all_license查询错误:", err.Error())
  67. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("read_all_license查询错误: ", err.Error())})
  68. // return
  69. // }
  70. // var datas []api.AllLicenseInfoResponse
  71. // for _, v := range *applications {
  72. // data := api.AllLicenseInfoResponse{
  73. // UniqueID: utils.ToString(v.LicInfo.UniqueID),
  74. // OARequestID: utils.ToInt64(v.LicInfo.OARequestID),
  75. // OARequestName: utils.ToString(v.LicInfo.OARequestName),
  76. // OARequestNameNew: utils.ToString(v.LicInfo.OARequestNameNew),
  77. // OARequestNameHTMLNew: utils.ToString(v.LicInfo.OARequestNameHTMLNew),
  78. // OAGLXMId: utils.ToInt64(v.LicInfo.OAGLXMID),
  79. // OAGLXMName: utils.ToString(v.LicInfo.OAGLXMName),
  80. // OASQSJ: utils.ToTimeString(v.LicInfo.OASQSJ),
  81. // OASalespersonName: utils.ToString(v.LicInfo.OASalespersonName),
  82. // OAXSJSYX: utils.ToString(v.LicInfo.OAXSJSYX),
  83. // OAOperationsPersonName: utils.ToString(v.LicInfo.OAOperationsPersonName),
  84. // OAJFJSYX: utils.ToString(v.LicInfo.OAJFJSYX),
  85. // OASYDW: utils.ToString(v.LicInfo.OASYDW),
  86. // OAXMXXMS: utils.ToString(v.LicInfo.OAXMXXMS),
  87. // OAJDS: utils.ToInt64(v.LicInfo.OAJDS),
  88. // OANodeCount: utils.ToInt64(v.LicInfo.OANodeCount),
  89. // OAProductCode: utils.ToString(v.LicInfo.OAProductCode),
  90. // OAProductName: utils.ToString(v.LicInfo.OAProductName),
  91. // OAProductVersion: utils.ToString(v.LicInfo.OAProductVersion),
  92. // OACPU: utils.ToString(v.LicInfo.OACPU),
  93. // OAOperatingSystem: utils.ToString(v.LicInfo.OAOperatingSystem),
  94. // OAMainMAC: utils.ToString(v.LicInfo.OAMainMAC),
  95. // OASecondMAC: utils.ToString(v.LicInfo.OASecondMAC),
  96. // OACreationDate: utils.ToString(v.LicInfo.OACreationDate),
  97. // OACreationTime: utils.ToString(v.LicInfo.OACreationTime),
  98. // OALastOperateDate: utils.ToString(v.LicInfo.OALastOperateDate),
  99. // OALastOperateTime: utils.ToString(v.LicInfo.OALastOperateTime),
  100. // CaptureTime: utils.ToTimeString(v.LicInfo.CaptureTime),
  101. // DelTime: utils.ToTimeString(v.LicInfo.DelTime),
  102. // LastOperateTime: utils.ToTimeString(v.LicInfo.LastOperateTime),
  103. // LicenseUniqueID: utils.ToString(v.GenrateInfo.LicenseUniqueID),
  104. // LicenseFlage: utils.ToString(v.GenrateInfo.LicenseFlage),
  105. // Lic1: utils.ToString(v.GenrateInfo.Lic1),
  106. // Lic2: utils.ToString(v.GenrateInfo.Lic2),
  107. // CreatorGenerate: utils.ToTimeString(v.GenrateInfo.CreatorGenerate),
  108. // }
  109. // datas = append(datas, data)
  110. // }
  111. // c.JSON(http.StatusOK, gin.H{
  112. // "data": datas,
  113. // "page": page,
  114. // "pageSize": pageSize,
  115. // "total": total,
  116. // })
  117. // }
  118. func GetAllLicenseInfoController(c *gin.Context) {
  119. //获取请求参数
  120. page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
  121. pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
  122. //获取用户信息和权限
  123. userInfo, err := getLoginInfo(c)
  124. if err != nil {
  125. c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
  126. c.Abort()
  127. }
  128. // if t := userInfo.Permission[middlewares.ReadAllLicense]; t == middlewares.ReadAllLicense {
  129. // }
  130. var datas [][]api.AllLicenseInfoResponse
  131. var Total int
  132. // 初始化存储 `OARequestID` 相同的 `ApiLicenseInfoTemp` 列表的 map
  133. oaRequestIDMap := make(map[int64][]api.AllLicenseInfoResponse)
  134. if userInfo.Permission[middlewares.ReadAllLicense] == middlewares.ReadAllLicense {
  135. datas1, total, err := models.GetOALicenseInfo(pageSize, page, "read_all_license", "", "", "")
  136. if err != nil {
  137. global.Logger.Errorln("error", err.Error())
  138. c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
  139. return
  140. }
  141. Total = total
  142. //var ApiLicenseInfoTemp []api.AllLicenseInfoResponse
  143. for _, data := range *datas1 {
  144. ApiLicenseInfo := api.AllLicenseInfoResponse{
  145. UniqueID: utils.ToString(data.LicInfo.UniqueID),
  146. OARequestID: utils.ToInt64(data.LicInfo.OARequestID),
  147. OARequestName: utils.ToString(data.LicInfo.OARequestName),
  148. OARequestNameNew: utils.ToString(data.LicInfo.OARequestNameNew),
  149. OARequestNameHTMLNew: utils.ToString(data.LicInfo.OARequestNameHTMLNew),
  150. OAGLXMId: utils.ToInt64(data.LicInfo.OAGLXMID),
  151. OAGLXMName: utils.ToString(data.LicInfo.OAGLXMName),
  152. OASQSJ: utils.ToString(data.LicInfo.OASQSJ),
  153. OASalespersonName: utils.ToString(data.LicInfo.OASalespersonName),
  154. OAXSJSYX: utils.ToString(data.LicInfo.OAXSJSYX),
  155. OAOperationsPersonName: utils.ToString(data.LicInfo.OAOperationsPersonName),
  156. OAJFJSYX: utils.ToString(data.LicInfo.OAJFJSYX),
  157. OASYDW: utils.ToString(data.LicInfo.OASYDW),
  158. OAXMXXMS: utils.ToString(data.LicInfo.OAXMXXMS),
  159. OAJDS: utils.ToInt64(data.LicInfo.OAJDS),
  160. OANodeCount: utils.ToInt64(data.LicInfo.OANodeCount),
  161. OAProductCode: utils.ToString(data.LicInfo.OAProductCode),
  162. OAProductName: utils.ToString(data.LicInfo.OAProductName),
  163. OAProductVersion: utils.ToString(data.LicInfo.OAProductVersion),
  164. OACPU: utils.ToString(data.LicInfo.OACPU),
  165. OAOperatingSystem: utils.ToString(data.LicInfo.OAOperatingSystem),
  166. OAMainMAC: utils.ToString(data.LicInfo.OAMainMAC),
  167. OASecondMAC: utils.ToString(data.LicInfo.OASecondMAC),
  168. OACreationDate: utils.ToString(data.LicInfo.OACreationDate),
  169. OACreationTime: utils.ToString(data.LicInfo.OACreationTime),
  170. OALastOperateDate: utils.ToString(data.LicInfo.OALastOperateDate),
  171. OALastOperateTime: utils.ToString(data.LicInfo.OALastOperateTime),
  172. CaptureTime: utils.ToTimeString(data.LicInfo.CaptureTime),
  173. DelTime: utils.ToTimeString(data.LicInfo.DelTime),
  174. LastOperateTime: utils.ToTimeString(data.LicInfo.LastOperateTime),
  175. LicenseFlage: utils.ToString(data.GenrateInfo.LicenseFlage),
  176. Lic1: utils.ToString(data.GenrateInfo.Lic1),
  177. Lic2: utils.ToString(data.GenrateInfo.Lic2),
  178. CreatorGenerate: utils.ToTimeString(data.GenrateInfo.CreatorGenerate),
  179. }
  180. // 将 `ApiLicenseInfo` 添加到 `OARequestID` 对应的数组中
  181. oaRequestID := utils.ToInt64(data.LicInfo.OARequestID)
  182. oaRequestIDMap[oaRequestID] = append(oaRequestIDMap[oaRequestID], ApiLicenseInfo)
  183. }
  184. } else if userInfo.Permission[middlewares.ReadLicense] == middlewares.ReadLicense {
  185. datas1, total, err := models.GetOALicenseInfo(pageSize, page, "", "", userInfo.UniqueID, "")
  186. if err != nil {
  187. global.Logger.Errorln("error", err.Error())
  188. c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
  189. return
  190. }
  191. Total = total
  192. //var ApiLicenseInfoTemp []api.AllLicenseInfoResponse
  193. for _, data := range *datas1 {
  194. ApiLicenseInfo := api.AllLicenseInfoResponse{
  195. UniqueID: utils.ToString(data.LicInfo.UniqueID),
  196. OARequestID: utils.ToInt64(data.LicInfo.OARequestID),
  197. OARequestName: utils.ToString(data.LicInfo.OARequestName),
  198. OARequestNameNew: utils.ToString(data.LicInfo.OARequestNameNew),
  199. OARequestNameHTMLNew: utils.ToString(data.LicInfo.OARequestNameHTMLNew),
  200. OAGLXMId: utils.ToInt64(data.LicInfo.OAGLXMID),
  201. OAGLXMName: utils.ToString(data.LicInfo.OAGLXMName),
  202. OASQSJ: utils.ToString(data.LicInfo.OASQSJ),
  203. OASalespersonName: utils.ToString(data.LicInfo.OASalespersonName),
  204. OAXSJSYX: utils.ToString(data.LicInfo.OAXSJSYX),
  205. OAOperationsPersonName: utils.ToString(data.LicInfo.OAOperationsPersonName),
  206. OAJFJSYX: utils.ToString(data.LicInfo.OAJFJSYX),
  207. OASYDW: utils.ToString(data.LicInfo.OASYDW),
  208. OAXMXXMS: utils.ToString(data.LicInfo.OAXMXXMS),
  209. OAJDS: utils.ToInt64(data.LicInfo.OAJDS),
  210. OANodeCount: utils.ToInt64(data.LicInfo.OANodeCount),
  211. OAProductCode: utils.ToString(data.LicInfo.OAProductCode),
  212. OAProductName: utils.ToString(data.LicInfo.OAProductName),
  213. OAProductVersion: utils.ToString(data.LicInfo.OAProductVersion),
  214. OACPU: utils.ToString(data.LicInfo.OACPU),
  215. OAOperatingSystem: utils.ToString(data.LicInfo.OAOperatingSystem),
  216. OAMainMAC: utils.ToString(data.LicInfo.OAMainMAC),
  217. OASecondMAC: utils.ToString(data.LicInfo.OASecondMAC),
  218. OACreationDate: utils.ToString(data.LicInfo.OACreationDate),
  219. OACreationTime: utils.ToString(data.LicInfo.OACreationTime),
  220. OALastOperateDate: utils.ToString(data.LicInfo.OALastOperateDate),
  221. OALastOperateTime: utils.ToString(data.LicInfo.OALastOperateTime),
  222. CaptureTime: utils.ToTimeString(data.LicInfo.CaptureTime),
  223. DelTime: utils.ToTimeString(data.LicInfo.DelTime),
  224. LastOperateTime: utils.ToTimeString(data.LicInfo.LastOperateTime),
  225. LicenseFlage: utils.ToString(data.GenrateInfo.LicenseFlage),
  226. Lic1: utils.ToString(data.GenrateInfo.Lic1),
  227. Lic2: utils.ToString(data.GenrateInfo.Lic2),
  228. CreatorGenerate: utils.ToTimeString(data.GenrateInfo.CreatorGenerate),
  229. }
  230. // 将 `ApiLicenseInfo` 添加到 `OARequestID` 对应的数组中
  231. oaRequestID := utils.ToInt64(data.LicInfo.OARequestID)
  232. oaRequestIDMap[oaRequestID] = append(oaRequestIDMap[oaRequestID], ApiLicenseInfo)
  233. }
  234. }
  235. //获取指定的license缓存信息
  236. //data, err := global.LicCache.GetPaginatedData(page, pageSize)
  237. //返回[][]data 的方式
  238. // var datas [][]api.AllLicenseInfoResponse
  239. // for _, lic := range data {
  240. // var dataTemp []api.AllLicenseInfoResponse
  241. // for _, v := range lic {
  242. // data := api.AllLicenseInfoResponse{
  243. // UniqueID: v.UniqueID.String,
  244. // OARequestID: v.OARequestID.Int64,
  245. // OARequestName: utils.ToString(v.OARequestName),
  246. // OARequestNameNew: utils.ToString(v.OARequestNameNew),
  247. // OARequestNameHTMLNew: utils.ToString(v.OARequestNameHTMLNew),
  248. // OAGLXMId: utils.ToInt64(v.OAGLXMId),
  249. // OAGLXMName: utils.ToString(v.OAGLXMName),
  250. // OASQSJ: utils.ToTimeString(v.OASQSJ),
  251. // OASalespersonName: utils.ToString(v.OASalespersonName),
  252. // OAXSJSYX: utils.ToString(v.OAXSJSYX),
  253. // OAOperationsPersonName: utils.ToString(v.OAOperationsPersonName),
  254. // OAJFJSYX: utils.ToString(v.OAJFJSYX),
  255. // OASYDW: utils.ToString(v.OASYDW),
  256. // OAXMXXMS: utils.ToString(v.OAXMXXMS),
  257. // OAJDS: utils.ToInt64(v.OAJDS),
  258. // OANodeCount: utils.ToInt64(v.OANodeCount),
  259. // OAProductCode: utils.ToString(v.OAProductCode),
  260. // OAProductName: utils.ToString(v.OAProductName),
  261. // OAProductVersion: utils.ToString(v.OAProductVersion),
  262. // OACPU: utils.ToString(v.OACPU),
  263. // OAOperatingSystem: utils.ToString(v.OAOperatingSystem),
  264. // OAMainMAC: utils.ToString(v.OAMainMAC),
  265. // OASecondMAC: utils.ToString(v.OASecondMAC),
  266. // OACreationDate: utils.ToString(v.OACreationDate),
  267. // OACreationTime: utils.ToString(v.OACreationTime),
  268. // OALastOperateDate: utils.ToString(v.OALastOperateDate),
  269. // OALastOperateTime: utils.ToString(v.OALastOperateTime),
  270. // CaptureTime: utils.ToTimeString(v.CaptureTime),
  271. // DelTime: utils.ToTimeString(v.DelTime),
  272. // LastOperateTime: utils.ToTimeString(v.LastOperateTime),
  273. // LicenseUniqueID: utils.ToString(v.LicenseUniqueID),
  274. // LicenseFlage: utils.ToString(v.LicenseFlage),
  275. // Lic1: utils.ToString(v.Lic1),
  276. // Lic2: utils.ToString(v.Lic2),
  277. // CreatorGenerate: utils.ToString(v.CreatorGenerate),
  278. // }
  279. // dataTemp = append(dataTemp, data)
  280. // }
  281. // datas = append(datas, dataTemp)
  282. // }
  283. // 将 `oaRequestIDMap` 中的所有 `ApiLicenseInfoTemp` 列表添加到 `datas` 中
  284. for _, apiLicenseInfoTemp := range oaRequestIDMap {
  285. datas = append(datas, apiLicenseInfoTemp)
  286. }
  287. // 对 datas 的第一维进行排序
  288. sort.Slice(datas, func(i, j int) bool {
  289. // 假设你需要根据每个数组第一个元素的 OACreationDate 和 OACreationTime 来排序
  290. if datas[i][0].OACreationDate == datas[j][0].OACreationDate {
  291. return datas[i][0].OACreationTime > datas[j][0].OACreationTime
  292. }
  293. return datas[i][0].OACreationDate > datas[j][0].OACreationDate
  294. })
  295. c.JSON(http.StatusOK, gin.H{
  296. "data": datas,
  297. "page": page,
  298. "pageSize": pageSize,
  299. "total": Total,
  300. })
  301. }
  302. func GenerateOALicenseStrController(c *gin.Context) {
  303. var request api.GenerateLicenseStrRequest
  304. if err := c.ShouldBindJSON(&request); err != nil {
  305. global.Logger.Errorln("解析request失败 : ", err.Error())
  306. c.JSON(400, gin.H{
  307. "error": fmt.Sprintf("解析请求失败: ", err.Error()),
  308. })
  309. return
  310. }
  311. //生成单独的license
  312. if request.UniqueID != "" {
  313. if err := generateLicenseStrSub(request.UniqueID); err != nil {
  314. global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", request.UniqueID, err.Error())
  315. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("请联系管理员, LicenseInfo%v生成失败: %v", request.UniqueID, err.Error())})
  316. return
  317. }
  318. } else if request.OARequestId != "" {
  319. //一个OARequestId会有多条数据UniqueID
  320. OALics, _, err := models.GetOALicenseInfo(0, 0, "", "", "", request.OARequestId)
  321. if err != nil || OALics == nil {
  322. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  323. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  324. return
  325. }
  326. //生成license,已生成的不管
  327. for _, v := range *OALics {
  328. if v.GenrateInfo.LicenseFlage.String == "未生成" {
  329. err := generateLicenseStrSub(utils.ToString(v.LicInfo.UniqueID))
  330. if err != nil {
  331. global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error())
  332. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("请联系管理员, LicenseInfo%v生成失败: %v", v.LicInfo.UniqueID, err.Error())})
  333. return
  334. }
  335. }
  336. }
  337. } else {
  338. global.Logger.Errorln("未指定明确License行 ")
  339. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("未指定明确License行 ")})
  340. return
  341. }
  342. //刷新缓存
  343. // layout := "2006-01-02 15:04:05"
  344. // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
  345. // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
  346. // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
  347. // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
  348. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
  349. // return
  350. // }
  351. // fmt.Printf("LicenseInfo数据刷新缓存成功 %#v\n", global.LicCache.GetData())
  352. // applications, _, err := models.GetOALicenseInfo(0, 1, "", request.UniqueID, "")
  353. // if err != nil {
  354. // global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  355. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  356. // return
  357. // }
  358. // pj := license.ProjectInfo{
  359. // ProjectName: utils.ToString((*applications)[0].LicInfo.OAProductName),
  360. // UserName: utils.ToString((*applications)[0].LicInfo.OAProductVersion),
  361. // UserAddr: "未填写",
  362. // SerialNumber: "未填写",
  363. // }
  364. // ei := license.EnvironmentInfo{
  365. // CpuSN: "未填写",
  366. // BaseboardSN: "未填写",
  367. // MacAddr: utils.ToString((*applications)[0].LicInfo.OAMainMAC),
  368. // DiskID: "未填写",
  369. // IPAddr: "未填写",
  370. // }
  371. // LicType := utils.SwitchLicenseType(utils.ToString((*applications)[0].LicInfo.OAProductName))
  372. // lI := license.LicenseInfo{
  373. // GenDate: "2024-07-15",
  374. // ExpireDate: "9999-12-31",
  375. // LicenseType: LicType,
  376. // LicenseVersion: 1,
  377. // HardType: 3,
  378. // }
  379. //这里调用的是license模块中的生成license的方法
  380. // res := true
  381. // if res {
  382. // //生成副主节点license
  383. // if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  384. // // var licStr2 []byte
  385. // // ei.MacAddr = applications[0].SecondaryMasterMacAddress
  386. // // licStr2 = license.GenerateLicense(pj, ei, lI)
  387. // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
  388. // } else {
  389. // //fmt.Println("licStr licStr2", licStr, licStr2)
  390. // //插入到数据库
  391. // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
  392. // }
  393. // } else {
  394. // licStr := license.GenerateLicense(pj, ei, lI)
  395. // //生成副主节点license
  396. // if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  397. // var licStr2 []byte
  398. // ei.MacAddr = (*applications)[0].LicInfo.OASecondMAC.String
  399. // licStr2 = license.GenerateLicense(pj, ei, lI)
  400. // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), licStr, licStr2)
  401. // } else {
  402. // //插入到数据库
  403. // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), licStr, nil)
  404. // }
  405. // }
  406. // if err != nil {
  407. // fmt.Println(err)
  408. // if err := c.ShouldBindJSON(&request); err != nil {
  409. // c.JSON(400, gin.H{
  410. // "error": err.Error(),
  411. // })
  412. // return
  413. // }
  414. // }
  415. // if err != nil {
  416. // fmt.Println(err)
  417. // if err := c.ShouldBindJSON(&request); err != nil {
  418. // global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  419. // c.JSON(400, gin.H{
  420. // "error": fmt.Sprintf("数据查询失败: ", err.Error()),
  421. // })
  422. // return
  423. // }
  424. // }
  425. c.JSON(http.StatusOK, gin.H{
  426. "success": true,
  427. "message": "License生成成功!",
  428. })
  429. //xlsx.ExcelToMail(lic, licStr, licStr2)
  430. }
  431. func generateLicenseStrSub(UniqueID string) error {
  432. var applications *[]models.OALicenseInfo
  433. var err error
  434. if UniqueID != "" {
  435. applications, _, err = models.GetOALicenseInfo(0, 1, "", UniqueID, "", "")
  436. if err != nil {
  437. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  438. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  439. return errors.Errorf("LicenseInfo数据查询失败:: %v", err.Error())
  440. }
  441. }
  442. // (*applications)[0].LicInfo.UniqueID.String = ""
  443. // (*applications)[0].LicInfo.UniqueID.Valid = false
  444. // (*applications)[0].GenrateInfo.LicenseUniqueID.String = ""
  445. // (*applications)[0].GenrateInfo.LicenseUniqueID.Valid = false
  446. fmt.Printf("applications%#v\n", applications)
  447. //检测该数据是否与oa库数据库一致
  448. isCheck, err := models.CheckLicenseInfoInOADB(&(*applications)[0].LicInfo)
  449. if err != nil {
  450. global.Logger.Errorln("LicenseInfo数据对比oa库 查询失败: ", err.Error())
  451. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  452. return errors.Errorf("LicenseInfo数据对比oa库 查询失败 %v", err.Error())
  453. }
  454. if !isCheck {
  455. global.Logger.Errorln("LicenseInfo数据对比oa库 不一致")
  456. return errors.Errorf("LicenseInfo数据对比oa库 数据不一致 \n")
  457. }
  458. //checkTemp := CompareOALicenseInfo(&(*applications)[0], OALicenseInfo)
  459. //如果不一致,则修改源数据
  460. // if checkTemp != true {
  461. // global.Logger.Errorln("LicenseInfo数据对比oa库 不一致")
  462. // // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  463. // OALicenseInfo.LicInfo.UniqueID = (*applications)[0].LicInfo.UniqueID
  464. // if err := models.UpdatelicenseInfoRow(*OALicenseInfo); err != nil {
  465. // global.Logger.Errorln("LicenseInfo数据对比oa库 不一致,更新数据库失败: ", err.Error())
  466. // return errors.Errorf("LicenseInfo数据对比oa库 不一致,更新数据库失败:%v", err.Error())
  467. // }
  468. // //刷新缓存
  469. // layout := "2006-01-02 15:04:05"
  470. // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
  471. // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
  472. // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
  473. // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
  474. // return errors.Errorf("LicenseInfo数据刷新缓存失败:")
  475. // }
  476. // return errors.Errorf("LicenseInfo数据对比oa库 不一致,清刷新页面")
  477. //}
  478. // pj := license.ProjectInfo{
  479. // ProjectName: utils.ToString((*applications)[0].LicInfo.OAProductName),
  480. // UserName: utils.ToString((*applications)[0].LicInfo.OAProductVersion),
  481. // UserAddr: "未填写",
  482. // SerialNumber: "未填写",
  483. // }
  484. // ei := license.EnvironmentInfo{
  485. // CpuSN: "未填写",
  486. // BaseboardSN: "未填写",
  487. // MacAddr: utils.ToString((*applications)[0].LicInfo.OAMainMAC),
  488. // DiskID: "未填写",
  489. // IPAddr: "未填写",
  490. // }
  491. // LicType := utils.SwitchLicenseType(utils.ToString((*applications)[0].LicInfo.OAProductName))
  492. // lI := license.LicenseInfo{
  493. // GenDate: "2024-07-15",
  494. // ExpireDate: "9999-12-31",
  495. // LicenseType: LicType,
  496. // LicenseVersion: 1,
  497. // HardType: 3,
  498. // }
  499. //生成副主节点license
  500. if applications == nil {
  501. global.Logger.Errorln("LicenseInfo数据生成失败 ,数据查询为空 ")
  502. //c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("LicenseInfo数据生成失败 ,数据查询为空: ", err.Error())})
  503. return errors.Errorf("LicenseInfo数据生成失败 ,数据查询为空 ")
  504. }
  505. if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  506. // var licStr2 []byte
  507. // ei.MacAddr = applications[0].SecondaryMasterMacAddress
  508. // licStr2 = license.GenerateLicense(pj, ei, lI)
  509. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
  510. if err != nil {
  511. global.Logger.Errorln("LicenseInfo生成插入失败: ", err.Error())
  512. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  513. return errors.Errorf("LicenseInfo生成插入失败:: ", err.Error())
  514. }
  515. } else {
  516. //fmt.Println("licStr licStr2", licStr, licStr2)
  517. //插入到数据库
  518. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
  519. if err != nil {
  520. global.Logger.Errorln("LicenseInfo2生成插入失败: ", err.Error())
  521. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  522. return errors.Errorf("LicenseInfo2生成插入失败:: ", err.Error())
  523. }
  524. }
  525. return nil
  526. }
  527. // func CheckDistributeOALicenseToOaDbController(c *gin.Context) {
  528. // var CheckDisLicense struct {
  529. // LicUniqueID string `json:"lic_unique_id"`
  530. // }
  531. // var request CheckDisLicense
  532. // if err := c.ShouldBindJSON(&request); err != nil {
  533. // global.Logger.Errorln("license分发请求解析失败 %s", err.Error())
  534. // c.JSON(400, gin.H{
  535. // "error": fmt.Sprintf("license分发请求解析失败 %s", err.Error()),
  536. // })
  537. // return
  538. // }
  539. // //检测该数据是否与oa库数据库一致
  540. // OALicenseInfo, err := models.CheckLicenseInfoInOADB((*applications)[0].LicInfo.ID)
  541. // if err != nil {
  542. // global.Logger.Errorln("LicenseInfo数据对比oa库 查询失败: ", err.Error())
  543. // // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  544. // return errors.Errorf("LicenseInfo数据对比oa库 查询失败 %v", err.Error())
  545. // }
  546. // checkTemp := CompareOALicenseInfo(&(*applications)[0], OALicenseInfo)
  547. // //如果不一致,则修改源数据
  548. // }
  549. func DistributeOALicenseController(c *gin.Context) {
  550. //判断是否发邮件
  551. //数据库查询license信息
  552. var request api.DistributeLicenseRequest
  553. if err := c.ShouldBindJSON(&request); err != nil {
  554. global.Logger.Errorln("license分发请求解析失败 %s", err.Error())
  555. c.JSON(400, gin.H{
  556. "error": fmt.Sprintf("license分发请求解析失败 %s", err.Error()),
  557. })
  558. return
  559. }
  560. fmt.Println("DistributeLicenseRequest", request)
  561. //查询该license是否已经分发给了该用户
  562. var licToUser []string
  563. for i, v := range request.UserUniqueIDs {
  564. fmt.Println("request.UserUniqueIDs", request.LicenseUniqueID, v)
  565. if isTurn, err := models.CheckLicenseToUser(request.LicenseUniqueID, v); err != nil {
  566. global.Logger.Errorln("该license查询是否分发给用户失败 ", v, err.Error())
  567. c.JSON(400, gin.H{
  568. "success": false,
  569. "error": fmt.Sprintf("该license查询是否分发给用户失败: %s", v, err.Error()),
  570. })
  571. return
  572. } else if isTurn {
  573. global.Logger.Info("该license已经分发给了该用户 ", v)
  574. licToUser = append(licToUser, request.UserNames[i])
  575. }
  576. }
  577. //返回已经分发过的用户
  578. if len(licToUser) != 0 {
  579. c.JSON(400, gin.H{
  580. "success": false,
  581. "error": fmt.Sprintf("该license已经分发给了该用户: %s\n", licToUser),
  582. })
  583. return
  584. }
  585. applications, _, err := models.GetOALicenseInfo(1, 1, "", request.LicenseUniqueID, "", "")
  586. if err != nil {
  587. c.JSON(http.StatusBadRequest, gin.H{"success": false,
  588. "error": err.Error()})
  589. return
  590. }
  591. //如果lic1为空则报错
  592. if (*applications)[0].GenrateInfo.Lic1.String == "" {
  593. global.Logger.Errorln("license未生成 ")
  594. c.JSON(http.StatusBadRequest, gin.H{"success": false,
  595. "error": "license未生成"})
  596. return
  597. }
  598. //邮箱不空则发送
  599. var EmailArray []string
  600. if request.Emails != "" {
  601. fmt.Println("request.Emails", request.Emails)
  602. EmailArray = strings.Split(request.Emails, ",")
  603. fmt.Println("EmailArray", EmailArray)
  604. em, err := email.BuildEmail(&(*applications)[0], EmailArray, (*applications)[0].GenrateInfo.Lic1.String, (*applications)[0].GenrateInfo.Lic2.String)
  605. if err != nil {
  606. global.Logger.Errorln("邮件生成失败", err.Error())
  607. c.JSON(400, gin.H{
  608. "success": false,
  609. "error": fmt.Sprintf("邮件生成失败: ", err.Error()),
  610. })
  611. return
  612. }
  613. err = email.SendEmail(em)
  614. if err != nil {
  615. global.Logger.Errorln("邮件发送失败", err.Error())
  616. c.JSON(400, gin.H{
  617. "success": false,
  618. "error": fmt.Sprintf("邮件发送失败: ", err.Error()),
  619. })
  620. return
  621. }
  622. }
  623. for i, v := range request.UserUniqueIDs {
  624. err = models.InsertlicenseRecordByUserRow((*applications)[0].LicInfo.UniqueID.String, v, request.UserAccounts[i], request.OperatorUniqueID)
  625. if err != nil {
  626. global.Logger.Errorln("数据库插入失败: ", err.Error())
  627. c.JSON(400, gin.H{
  628. "success": false,
  629. "error": fmt.Sprintf("插入失败: ", err.Error()),
  630. })
  631. return
  632. }
  633. }
  634. if len(EmailArray) != 0 {
  635. for _, v := range EmailArray {
  636. err = models.InsertlicenseRecordByEmailRow((*applications)[0].LicInfo.UniqueID.String, v, request.OperatorUniqueID)
  637. if err != nil {
  638. global.Logger.Errorln("数据库插入失败: ", err.Error())
  639. c.JSON(400, gin.H{
  640. "error": fmt.Sprintf("插入失败: ", err.Error()),
  641. })
  642. return
  643. }
  644. }
  645. }
  646. //刷新缓存
  647. // layout := "2006-01-02 15:04:05"
  648. // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
  649. // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
  650. // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
  651. // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
  652. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
  653. // return
  654. // }
  655. c.JSON(http.StatusOK, gin.H{
  656. "success": true,
  657. "data": "分发成功!",
  658. })
  659. }
  660. // 获取分发历史
  661. func GetlicenseRecordInfo(c *gin.Context) {
  662. // type licenseRecordInfoRequest struct {
  663. // UniqueID string `json:"uniqueID"`
  664. // Id int `json:"id"`
  665. // }
  666. var request api.GetDistributeHistoryRequest
  667. if err := c.ShouldBindJSON(&request); err != nil {
  668. global.Logger.Errorln("解析请求失败 ", err.Error())
  669. c.JSON(400, gin.H{
  670. "error": fmt.Sprintf("解析请求失败: ", err.Error()),
  671. })
  672. return
  673. }
  674. LicUers, err := models.GetlicenseRecordByUser(request.UniqueID)
  675. if err != nil {
  676. global.Logger.Errorln("数据查询失败 ", err.Error())
  677. c.JSON(400, gin.H{
  678. "error": fmt.Sprintf("数据查询失败: ", err.Error()),
  679. })
  680. return
  681. }
  682. LicEmails, err := models.GetlicenseRecordByEmail(request.UniqueID)
  683. if err != nil {
  684. global.Logger.Errorln("数据查询失败 ", err.Error())
  685. c.JSON(400, gin.H{
  686. "error": fmt.Sprintf("数据查询失败: ", err.Error()),
  687. })
  688. return
  689. }
  690. licR := models.LicenseRecord{
  691. LicenseRecordToUser: LicUers,
  692. LicenseRecordToEmails: LicEmails,
  693. }
  694. fmt.Println("分发历史applications", licR)
  695. c.JSON(http.StatusOK, gin.H{
  696. "success": true,
  697. "data": licR,
  698. })
  699. }
  700. // 更新license信息
  701. func UpdateLicense(c *gin.Context) {
  702. var license api.UpdateLicenseInfoRequest
  703. // 绑定JSON数据到License结构体
  704. if err := c.ShouldBindJSON(&license); err != nil {
  705. c.JSON(http.StatusBadRequest, gin.H{
  706. "success": false,
  707. "error": err.Error(),
  708. })
  709. return
  710. }
  711. // fmt.Printf(" license.ApplicationDate: %#v ", license)
  712. err := models.UpdatelicenseInfoRow(models.OALicenseInfo{
  713. LicInfo: models.TargetOALicenseInfo{
  714. UniqueID: sql.NullString{
  715. String: license.UniqueID,
  716. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  717. },
  718. OARequestName: sql.NullString{
  719. String: license.Creator,
  720. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  721. },
  722. OACreationDate: sql.NullString{
  723. String: license.ApplicationDate,
  724. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  725. },
  726. OAGLXMName: sql.NullString{
  727. String: license.AssociatedProject,
  728. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  729. },
  730. OANodeCount: sql.NullInt64{
  731. Int64: license.NodeCount,
  732. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  733. },
  734. OASalespersonName: sql.NullString{
  735. String: license.SalesPerson,
  736. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  737. },
  738. OAOperationsPersonName: sql.NullString{
  739. String: license.SupportPerson,
  740. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  741. },
  742. OAXSJSYX: sql.NullString{
  743. String: license.SalesEmail,
  744. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  745. },
  746. OAJFJSYX: sql.NullString{
  747. String: license.SupportEmail,
  748. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  749. },
  750. OAJDS: sql.NullInt64{
  751. Int64: license.TotalNodes,
  752. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  753. },
  754. OAProductName: sql.NullString{
  755. String: license.ProductName,
  756. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  757. },
  758. OAProductVersion: sql.NullString{
  759. String: license.Version,
  760. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  761. },
  762. OASYDW: sql.NullString{
  763. String: license.Company,
  764. Valid: true, // 因为你有一个有效的字符串,所以设置为 true
  765. },
  766. },
  767. })
  768. if err != nil {
  769. global.Logger.Errorln("数据插入失败 ", err.Error())
  770. c.JSON(http.StatusBadRequest, gin.H{"success": false, "error": fmt.Sprintf("数据插入失败: ", err.Error())})
  771. return
  772. }
  773. //刷新缓存
  774. // layout := "2006-01-02 15:04:05"
  775. // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
  776. // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
  777. // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
  778. // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
  779. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
  780. // return
  781. // }
  782. c.JSON(http.StatusOK, gin.H{
  783. "success": true,
  784. })
  785. }
  786. // 删除一行lincese信息
  787. func DelLicenseInfoRow(c *gin.Context) {
  788. // 解析 JSON 请求体
  789. var request UniqueIDRequest
  790. if err := c.ShouldBindJSON(&request); err != nil {
  791. c.JSON(400, gin.H{
  792. "error": err.Error(),
  793. })
  794. return
  795. }
  796. err := models.DelLicenseInfoRow(request.UniqueID)
  797. if err != nil {
  798. global.Logger.Errorln("删除一行License信息失败 ", err.Error())
  799. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("删除失败: ", err.Error())})
  800. return
  801. }
  802. //刷新缓存
  803. // layout := "2006-01-02 15:04:05"
  804. // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
  805. // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
  806. // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
  807. // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
  808. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
  809. // return
  810. // }
  811. c.JSON(http.StatusOK, gin.H{
  812. "success": true,
  813. "data": "删除成功",
  814. })
  815. }