OALicenseInfo_controllers.go 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768
  1. package controllers
  2. import (
  3. "fmt"
  4. "net/http"
  5. "sort"
  6. "strconv"
  7. "strings"
  8. "xugu_license/internal/api"
  9. "xugu_license/internal/global"
  10. middlewares "xugu_license/internal/middleware"
  11. "xugu_license/internal/models"
  12. "xugu_license/internal/module/capture"
  13. "xugu_license/internal/services"
  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, "", 0)
  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 GetAllLicenseInfoController(c *gin.Context) {
  55. //获取请求参数
  56. page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
  57. pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))
  58. //获取用户信息和权限
  59. userInfo, err := getLoginInfo(c)
  60. if err != nil {
  61. c.JSON(http.StatusUnauthorized, gin.H{"error": "用户信息不存在"})
  62. c.Abort()
  63. }
  64. // if t := userInfo.Permission[middlewares.ReadAllLicense]; t == middlewares.ReadAllLicense {
  65. // }
  66. var datas [][]api.AllLicenseInfoResponse
  67. var Total int
  68. // 初始化存储 `OARequestID` 相同的 `ApiLicenseInfoTemp` 列表的 map
  69. oaRequestIDMap := make(map[int64][]api.AllLicenseInfoResponse)
  70. if userInfo.Permission[middlewares.ReadAllLicense] == middlewares.ReadAllLicense {
  71. datas1, total, err := models.GetOALicenseInfo(pageSize, page, "read_all_license", "", "", 0)
  72. if err != nil {
  73. global.Logger.Errorln("error", err.Error())
  74. c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
  75. return
  76. }
  77. Total = total
  78. //var ApiLicenseInfoTemp []api.AllLicenseInfoResponse
  79. for _, data := range *datas1 {
  80. ApiLicenseInfo := api.AllLicenseInfoResponse{
  81. UniqueID: utils.ToString(data.LicInfo.UniqueID),
  82. OAId: utils.ToInt64(data.LicInfo.OAId),
  83. OARequestID: utils.ToInt64(data.LicInfo.OARequestID),
  84. OARequestName: utils.ToString(data.LicInfo.OARequestName),
  85. OARequestNameNew: utils.ToString(data.LicInfo.OARequestNameNew),
  86. OARequestNameHTMLNew: utils.ToString(data.LicInfo.OARequestNameHTMLNew),
  87. OAGLXMId: utils.ToInt64(data.LicInfo.OAGLXMID),
  88. OAGLXMName: utils.ToString(data.LicInfo.OAGLXMName),
  89. OASQSJ: utils.ToString(data.LicInfo.OASQSJ),
  90. OASalespersonName: utils.ToString(data.LicInfo.OASalespersonName),
  91. OAXSJSYX: utils.ToString(data.LicInfo.OAXSJSYX),
  92. OAOperationsPersonName: utils.ToString(data.LicInfo.OAOperationsPersonName),
  93. OAJFJSYX: utils.ToString(data.LicInfo.OAJFJSYX),
  94. OASYDW: utils.ToString(data.LicInfo.OASYDW),
  95. OAXMXXMS: utils.ToString(data.LicInfo.OAXMXXMS),
  96. OAJDS: utils.ToInt64(data.LicInfo.OAJDS),
  97. OANodeCount: utils.ToInt64(data.LicInfo.OANodeCount),
  98. OAProductCode: utils.ToString(data.LicInfo.OAProductCode),
  99. OAProductName: utils.ToString(data.LicInfo.OAProductName),
  100. OAProductVersion: utils.ToString(data.LicInfo.OAProductVersion),
  101. OACPU: utils.ToString(data.LicInfo.OACPU),
  102. OAOperatingSystem: utils.ToString(data.LicInfo.OAOperatingSystem),
  103. OAMainMAC: utils.ToString(data.LicInfo.OAMainMAC),
  104. OASecondMAC: utils.ToString(data.LicInfo.OASecondMAC),
  105. OACreationDate: utils.ToString(data.LicInfo.OACreationDate),
  106. OACreationTime: utils.ToString(data.LicInfo.OACreationTime),
  107. OALastOperateDate: utils.ToString(data.LicInfo.OALastOperateDate),
  108. OALastOperateTime: utils.ToString(data.LicInfo.OALastOperateTime),
  109. CaptureTime: utils.ToTimeString(data.LicInfo.CaptureTime),
  110. DelTime: utils.ToTimeString(data.LicInfo.DelTime),
  111. LastOperateTime: utils.ToTimeString(data.LicInfo.LastOperateTime),
  112. LicenseFlage: utils.ToString(data.GenrateInfo.LicenseFlage),
  113. Lic1: utils.ToString(data.GenrateInfo.Lic1),
  114. Lic2: utils.ToString(data.GenrateInfo.Lic2),
  115. CreatorGenerate: utils.ToTimeString(data.GenrateInfo.CreatorGenerate),
  116. }
  117. // 将 `ApiLicenseInfo` 添加到 `OARequestID` 对应的数组中
  118. oaRequestID := utils.ToInt64(data.LicInfo.OARequestID)
  119. oaRequestIDMap[oaRequestID] = append(oaRequestIDMap[oaRequestID], ApiLicenseInfo)
  120. }
  121. } else if userInfo.Permission[middlewares.ReadLicense] == middlewares.ReadLicense {
  122. datas1, total, err := models.GetOALicenseInfo(pageSize, page, "", "", userInfo.UniqueID, 0)
  123. if err != nil {
  124. global.Logger.Errorln("error", err.Error())
  125. c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
  126. return
  127. }
  128. Total = total
  129. //var ApiLicenseInfoTemp []api.AllLicenseInfoResponse
  130. for _, data := range *datas1 {
  131. ApiLicenseInfo := api.AllLicenseInfoResponse{
  132. UniqueID: utils.ToString(data.LicInfo.UniqueID),
  133. OARequestID: utils.ToInt64(data.LicInfo.OARequestID),
  134. OARequestName: utils.ToString(data.LicInfo.OARequestName),
  135. OARequestNameNew: utils.ToString(data.LicInfo.OARequestNameNew),
  136. OARequestNameHTMLNew: utils.ToString(data.LicInfo.OARequestNameHTMLNew),
  137. OAGLXMId: utils.ToInt64(data.LicInfo.OAGLXMID),
  138. OAGLXMName: utils.ToString(data.LicInfo.OAGLXMName),
  139. OASQSJ: utils.ToString(data.LicInfo.OASQSJ),
  140. OASalespersonName: utils.ToString(data.LicInfo.OASalespersonName),
  141. OAXSJSYX: utils.ToString(data.LicInfo.OAXSJSYX),
  142. OAOperationsPersonName: utils.ToString(data.LicInfo.OAOperationsPersonName),
  143. OAJFJSYX: utils.ToString(data.LicInfo.OAJFJSYX),
  144. OASYDW: utils.ToString(data.LicInfo.OASYDW),
  145. OAXMXXMS: utils.ToString(data.LicInfo.OAXMXXMS),
  146. OAJDS: utils.ToInt64(data.LicInfo.OAJDS),
  147. OANodeCount: utils.ToInt64(data.LicInfo.OANodeCount),
  148. OAProductCode: utils.ToString(data.LicInfo.OAProductCode),
  149. OAProductName: utils.ToString(data.LicInfo.OAProductName),
  150. OAProductVersion: utils.ToString(data.LicInfo.OAProductVersion),
  151. OACPU: utils.ToString(data.LicInfo.OACPU),
  152. OAOperatingSystem: utils.ToString(data.LicInfo.OAOperatingSystem),
  153. OAMainMAC: utils.ToString(data.LicInfo.OAMainMAC),
  154. OASecondMAC: utils.ToString(data.LicInfo.OASecondMAC),
  155. OACreationDate: utils.ToString(data.LicInfo.OACreationDate),
  156. OACreationTime: utils.ToString(data.LicInfo.OACreationTime),
  157. OALastOperateDate: utils.ToString(data.LicInfo.OALastOperateDate),
  158. OALastOperateTime: utils.ToString(data.LicInfo.OALastOperateTime),
  159. CaptureTime: utils.ToTimeString(data.LicInfo.CaptureTime),
  160. DelTime: utils.ToTimeString(data.LicInfo.DelTime),
  161. LastOperateTime: utils.ToTimeString(data.LicInfo.LastOperateTime),
  162. LicenseFlage: utils.ToString(data.GenrateInfo.LicenseFlage),
  163. Lic1: utils.ToString(data.GenrateInfo.Lic1),
  164. Lic2: utils.ToString(data.GenrateInfo.Lic2),
  165. CreatorGenerate: utils.ToTimeString(data.GenrateInfo.CreatorGenerate),
  166. }
  167. // 将 `ApiLicenseInfo` 添加到 `OARequestID` 对应的数组中
  168. oaRequestID := utils.ToInt64(data.LicInfo.OARequestID)
  169. oaRequestIDMap[oaRequestID] = append(oaRequestIDMap[oaRequestID], ApiLicenseInfo)
  170. }
  171. }
  172. // 将 `oaRequestIDMap` 中的所有 `ApiLicenseInfoTemp` 列表添加到 `datas` 中
  173. for _, apiLicenseInfoTemp := range oaRequestIDMap {
  174. datas = append(datas, apiLicenseInfoTemp)
  175. }
  176. // 对 datas 的第一维进行排序
  177. // sort.Slice(datas, func(i, j int) bool {
  178. // // 假设你需要根据每个数组第一个元素的 OACreationDate 和 OACreationTime 来排序
  179. // if datas[i][0].OACreationDate == datas[j][0].OACreationDate {
  180. // return datas[i][0].OACreationTime > datas[j][0].OACreationTime
  181. // }
  182. // return datas[i][0].OACreationDate > datas[j][0].OACreationDate
  183. // })
  184. // 对 datas 的第一维进行排序
  185. sort.Slice(datas, func(i, j int) bool {
  186. // 先按 OACreationDate 和 OACreationTime 排序
  187. if datas[i][0].OACreationDate == datas[j][0].OACreationDate {
  188. if datas[i][0].OACreationTime == datas[j][0].OACreationTime {
  189. // 如果 OACreationDate 和 OACreationTime 相同,则按 OARequestID 从大到小排序
  190. return datas[i][0].OARequestID > datas[j][0].OARequestID
  191. }
  192. return datas[i][0].OACreationTime > datas[j][0].OACreationTime
  193. }
  194. return datas[i][0].OACreationDate > datas[j][0].OACreationDate
  195. })
  196. c.JSON(http.StatusOK, gin.H{
  197. "data": datas,
  198. "page": page,
  199. "pageSize": pageSize,
  200. "total": Total,
  201. })
  202. }
  203. func GenerateOALicenseStrController(c *gin.Context) {
  204. var request api.GenerateLicenseStrRequest
  205. if err := c.ShouldBindJSON(&request); err != nil {
  206. global.Logger.Errorln("解析request失败 : ", err.Error())
  207. c.JSON(400, gin.H{
  208. "error": fmt.Sprintf("解析请求失败: ", err.Error()),
  209. })
  210. return
  211. }
  212. err, isCheck := services.GenerateOALicenseStrServices(request)
  213. if err != nil {
  214. c.JSON(http.StatusOK, gin.H{
  215. "error": fmt.Sprintf("生成错误: ", err.Error()),
  216. })
  217. return
  218. }
  219. if isCheck {
  220. c.JSON(http.StatusOK, gin.H{
  221. "error": fmt.Sprintf("该条信息校验不一致,请刷新页面: "),
  222. })
  223. return
  224. }
  225. c.JSON(http.StatusOK, gin.H{
  226. "success": true,
  227. "message": "License生成成功!",
  228. })
  229. // applications, _, err := models.GetOALicenseInfo(0, 1, "", request.UniqueID, "")
  230. // if err != nil {
  231. // global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  232. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  233. // return
  234. // }
  235. // pj := license.ProjectInfo{
  236. // ProjectName: utils.ToString((*applications)[0].LicInfo.OAProductName),
  237. // UserName: utils.ToString((*applications)[0].LicInfo.OAProductVersion),
  238. // UserAddr: "未填写",
  239. // SerialNumber: "未填写",
  240. // }
  241. // ei := license.EnvironmentInfo{
  242. // CpuSN: "未填写",
  243. // BaseboardSN: "未填写",
  244. // MacAddr: utils.ToString((*applications)[0].LicInfo.OAMainMAC),
  245. // DiskID: "未填写",
  246. // IPAddr: "未填写",
  247. // }
  248. // LicType := utils.SwitchLicenseType(utils.ToString((*applications)[0].LicInfo.OAProductName))
  249. // lI := license.LicenseInfo{
  250. // GenDate: "2024-07-15",
  251. // ExpireDate: "9999-12-31",
  252. // LicenseType: LicType,
  253. // LicenseVersion: 1,
  254. // HardType: 3,
  255. // }
  256. //这里调用的是license模块中的生成license的方法
  257. // res := true
  258. // if res {
  259. // //生成副主节点license
  260. // if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  261. // // var licStr2 []byte
  262. // // ei.MacAddr = applications[0].SecondaryMasterMacAddress
  263. // // licStr2 = license.GenerateLicense(pj, ei, lI)
  264. // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
  265. // } else {
  266. // //fmt.Println("licStr licStr2", licStr, licStr2)
  267. // //插入到数据库
  268. // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
  269. // }
  270. // } else {
  271. // licStr := license.GenerateLicense(pj, ei, lI)
  272. // //生成副主节点license
  273. // if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  274. // var licStr2 []byte
  275. // ei.MacAddr = (*applications)[0].LicInfo.OASecondMAC.String
  276. // licStr2 = license.GenerateLicense(pj, ei, lI)
  277. // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), licStr, licStr2)
  278. // } else {
  279. // //插入到数据库
  280. // err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), licStr, nil)
  281. // }
  282. // }
  283. // if err != nil {
  284. // fmt.Println(err)
  285. // if err := c.ShouldBindJSON(&request); err != nil {
  286. // c.JSON(400, gin.H{
  287. // "error": err.Error(),
  288. // })
  289. // return
  290. // }
  291. // }
  292. // if err != nil {
  293. // fmt.Println(err)
  294. // if err := c.ShouldBindJSON(&request); err != nil {
  295. // global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  296. // c.JSON(400, gin.H{
  297. // "error": fmt.Sprintf("数据查询失败: ", err.Error()),
  298. // })
  299. // return
  300. // }
  301. // }
  302. //xlsx.ExcelToMail(lic, licStr, licStr2)
  303. }
  304. // func CheckDistributeOALicenseToOaDbController(c *gin.Context) {
  305. // var CheckDisLicense struct {
  306. // LicUniqueID string `json:"lic_unique_id"`
  307. // }
  308. // var request CheckDisLicense
  309. // if err := c.ShouldBindJSON(&request); err != nil {
  310. // global.Logger.Errorln("license分发请求解析失败 %s", err.Error())
  311. // c.JSON(400, gin.H{
  312. // "error": fmt.Sprintf("license分发请求解析失败 %s", err.Error()),
  313. // })
  314. // return
  315. // }
  316. // //检测该数据是否与oa库数据库一致
  317. // OALicenseInfo, err := models.CheckLicenseInfoInOADB((*applications)[0].LicInfo.ID)
  318. // if err != nil {
  319. // global.Logger.Errorln("LicenseInfo数据对比oa库 查询失败: ", err.Error())
  320. // // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  321. // return errors.Errorf("LicenseInfo数据对比oa库 查询失败 %v", err.Error())
  322. // }
  323. // checkTemp := CompareOALicenseInfo(&(*applications)[0], OALicenseInfo)
  324. // //如果不一致,则修改源数据
  325. // }
  326. /*
  327. 对单条lic或是申请单的处理
  328. 检测lic是否以及分发过给用户
  329. */
  330. func DistributeOALicenseController(c *gin.Context) {
  331. // //判断是否发邮件
  332. // //数据库查询license信息
  333. // var request api.DistributeLicenseRequest
  334. // if err := c.ShouldBindJSON(&request); err != nil {
  335. // global.Logger.Errorln("license分发请求解析失败 %s", err.Error())
  336. // c.JSON(400, gin.H{
  337. // "error": fmt.Sprintf("license分发请求解析失败 %s", err.Error()),
  338. // })
  339. // return
  340. // }
  341. // EmailArray := strings.Split(request.Emails, ",")
  342. // err, existUsers := services.DistributeOALicenseServices(request.OperatorUniqueID, request.OaRequestId, request.UserUniqueIDs, request.UserAccounts, request.UserNames, EmailArray)
  343. // if err != nil {
  344. // global.Logger.Errorln("license分发失败 %s", err.Error())
  345. // c.JSON(400, gin.H{
  346. // "error": fmt.Sprintf("license分发失败 %s", err.Error()),
  347. // })
  348. // return
  349. // }
  350. // if existUsers != nil {
  351. // global.Logger.Errorf("license分发失败,以下用户已经分发过 %s")
  352. // c.JSON(400, gin.H{
  353. // "error": fmt.Sprintf("以下用户已经分发过 %s", existUsers),
  354. // })
  355. // return
  356. // }
  357. // c.JSON(http.StatusOK, gin.H{
  358. // "success": true,
  359. // "data": "分发成功!",
  360. // })
  361. }
  362. func DistributeLicenseToUsersController(c *gin.Context) {
  363. var request api.DistributeLicenseRequest
  364. if err := c.ShouldBindJSON(&request); err != nil {
  365. global.Logger.Errorln("license分发请求解析失败 %s", err.Error())
  366. c.JSON(400, gin.H{
  367. "error": fmt.Sprintf("license分发请求解析失败 %s", err.Error()),
  368. })
  369. return
  370. }
  371. err, existUsers := services.DistributeLicenseToUserServices(request.OperatorUniqueID, request.OaRequestId, request.UserUniqueIDs, request.UserAccounts, request.UserNames)
  372. if err != nil {
  373. global.Logger.Errorln("license分发失败 %s", err.Error())
  374. c.JSON(400, gin.H{
  375. "error": fmt.Sprintf("license分发失败 %s", err.Error()),
  376. })
  377. return
  378. }
  379. if existUsers != nil {
  380. global.Logger.Errorf("license分发失败,以下用户已经分发过 %s")
  381. c.JSON(400, gin.H{
  382. "error": fmt.Sprintf("以下用户已经分发过 %s", existUsers),
  383. })
  384. return
  385. }
  386. c.JSON(http.StatusOK, gin.H{
  387. "success": true,
  388. "data": "分发成功!",
  389. })
  390. }
  391. func DistributeLicenseToEmailController(c *gin.Context) {
  392. //判断是否发邮件
  393. //数据库查询license信息
  394. var request api.DistributeLicenseRequest
  395. if err := c.ShouldBindJSON(&request); err != nil {
  396. global.Logger.Errorln("license分发请求解析失败 %s", err.Error())
  397. c.JSON(400, gin.H{
  398. "error": fmt.Sprintf("license分发请求解析失败 %s", err.Error()),
  399. })
  400. return
  401. }
  402. EmailArray := strings.Split(request.Emails, ",")
  403. err, existUsers := services.DistributeLicenseToEmailServices(request.OperatorUniqueID, request.OaRequestId, request.UserUniqueIDs, request.UserAccounts, request.UserNames, EmailArray)
  404. if err != nil {
  405. global.Logger.Errorln("license分发失败 %s", err.Error())
  406. c.JSON(400, gin.H{
  407. "error": fmt.Sprintf("license分发失败 %s", err.Error()),
  408. })
  409. return
  410. }
  411. if existUsers != nil {
  412. global.Logger.Errorf("license分发失败,以下用户已经分发过 %s")
  413. c.JSON(400, gin.H{
  414. "error": fmt.Sprintf("以下用户已经分发过 %s", existUsers),
  415. })
  416. return
  417. }
  418. c.JSON(http.StatusOK, gin.H{
  419. "success": true,
  420. "data": "分发成功!",
  421. })
  422. }
  423. // 获取分发历史
  424. func GetlicenseRecordInfo(c *gin.Context) {
  425. // type licenseRecordInfoRequest struct {
  426. // UniqueID string `json:"uniqueID"`
  427. // Id int `json:"id"`
  428. // }
  429. var request api.GetDistributeHistoryRequest
  430. if err := c.ShouldBindJSON(&request); err != nil {
  431. global.Logger.Errorln("解析请求失败 ", err.Error())
  432. c.JSON(400, gin.H{
  433. "error": fmt.Sprintf("解析请求失败: ", err.Error()),
  434. })
  435. return
  436. }
  437. LicUers, err := models.GetlicenseRecordByUser(request.OaRequestId, request.UniqueID)
  438. if err != nil {
  439. global.Logger.Errorln("数据查询失败 ", err.Error())
  440. c.JSON(400, gin.H{
  441. "error": fmt.Sprintf("数据查询失败: ", err.Error()),
  442. })
  443. return
  444. }
  445. LicEmails, err := models.GetlicenseRecordByEmail(request.OaRequestId, request.UniqueID)
  446. if err != nil {
  447. global.Logger.Errorln("数据查询失败 ", err.Error())
  448. c.JSON(400, gin.H{
  449. "error": fmt.Sprintf("数据查询失败: ", err.Error()),
  450. })
  451. return
  452. }
  453. licR := models.LicenseRecord{
  454. LicenseRecordToUser: LicUers,
  455. LicenseRecordToEmails: LicEmails,
  456. }
  457. fmt.Println("分发历史applications", licR)
  458. c.JSON(http.StatusOK, gin.H{
  459. "success": true,
  460. "data": licR,
  461. })
  462. }
  463. // 更新license信息
  464. func UpdateLicense(c *gin.Context) {
  465. var license api.UpdateLicenseInfoRequest
  466. // 绑定JSON数据到License结构体
  467. if err := c.ShouldBindJSON(&license); err != nil {
  468. c.JSON(http.StatusBadRequest, gin.H{
  469. "success": false,
  470. "error": err.Error(),
  471. })
  472. return
  473. }
  474. // fmt.Printf(" license.ApplicationDate: %#v ", license)
  475. err := models.UpdatelicenseInfoRow(models.OALicenseInfo{
  476. LicInfo: models.TargetOALicenseInfo{
  477. UniqueID: utils.StringToNullString(license.UniqueID),
  478. OARequestName: utils.StringToNullString(license.Creator),
  479. OACreationDate: utils.StringToNullString(license.ApplicationDate),
  480. OAGLXMName: utils.StringToNullString(license.AssociatedProject),
  481. OANodeCount: utils.IntToNullInt64(license.NodeCount),
  482. OASalespersonName: utils.StringToNullString(license.SalesPerson),
  483. OAOperationsPersonName: utils.StringToNullString(license.SupportPerson),
  484. OAXSJSYX: utils.StringToNullString(license.SalesEmail),
  485. OAJFJSYX: utils.StringToNullString(license.SupportEmail),
  486. OAJDS: utils.IntToNullInt64(license.TotalNodes),
  487. OAProductName: utils.StringToNullString(license.ProductName),
  488. OAProductVersion: utils.StringToNullString(license.Version),
  489. OASYDW: utils.StringToNullString(license.Company),
  490. },
  491. })
  492. if err != nil {
  493. global.Logger.Errorln("数据插入失败 ", err.Error())
  494. c.JSON(http.StatusBadRequest, gin.H{"success": false, "error": fmt.Sprintf("数据插入失败: ", err.Error())})
  495. return
  496. }
  497. //刷新缓存
  498. // layout := "2006-01-02 15:04:05"
  499. // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
  500. // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
  501. // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
  502. // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
  503. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
  504. // return
  505. // }
  506. c.JSON(http.StatusOK, gin.H{
  507. "success": true,
  508. })
  509. }
  510. // 删除一行lincese信息
  511. func DelLicenseInfoRow(c *gin.Context) {
  512. // 解析 JSON 请求体
  513. var request UniqueIDRequest
  514. if err := c.ShouldBindJSON(&request); err != nil {
  515. c.JSON(400, gin.H{
  516. "error": err.Error(),
  517. })
  518. return
  519. }
  520. err := models.DelLicenseInfoRow(request.UniqueID)
  521. if err != nil {
  522. global.Logger.Errorln("删除一行License信息失败 ", err.Error())
  523. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("删除失败: ", err.Error())})
  524. return
  525. }
  526. //刷新缓存
  527. // layout := "2006-01-02 15:04:05"
  528. // startTime, _ := time.Parse(layout, "2023-07-30 14:00:00")
  529. // endTime, _ := time.Parse(layout, "2023-08-26 16:00:00")
  530. // if err := global.LicCache.RefreshCache(global.XuguDB, startTime, endTime, 0, 20); err != nil {
  531. // global.Logger.Errorln("LicenseInfo数据刷新缓存失败: ", err.Error())
  532. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据刷新缓存失败: ", err.Error())})
  533. // return
  534. // }
  535. c.JSON(http.StatusOK, gin.H{
  536. "success": true,
  537. "data": "删除成功",
  538. })
  539. }
  540. // 主动抓取一次license信息到支撑库
  541. func CaptureLicenseOnceToDb(c *gin.Context) {
  542. if err := capture.CaptureOnce(global.OaDB, global.XuguDB); err != nil {
  543. global.Logger.Errorln("主动抓取license信息到支撑库失败: ", err.Error())
  544. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("主动抓取license信息数据失败: %s", err.Error())})
  545. return
  546. }
  547. c.JSON(http.StatusOK, gin.H{
  548. "success": true,
  549. })
  550. }
  551. func GetDistributeButtenCheckController(c *gin.Context) {
  552. //获取oa申请单号
  553. name := c.Query("oa_request_id")
  554. oaRequestID, err := strconv.ParseInt(name, 10, 64)
  555. //查询oa单号的每一行license信息
  556. err, isCheck := services.GetDistributeButtenCheckService(oaRequestID)
  557. if err != nil {
  558. c.JSON(http.StatusOK, gin.H{
  559. "error": fmt.Sprintf("生成错误: ", err.Error()),
  560. })
  561. return
  562. }
  563. if isCheck {
  564. c.JSON(http.StatusOK, gin.H{
  565. "error": fmt.Sprintf("该条信息校验不一致,请刷新页面: "),
  566. })
  567. return
  568. }
  569. c.JSON(http.StatusOK, gin.H{
  570. "success": true,
  571. "message": "License校验成功!",
  572. })
  573. }
  574. func SearchLicInfoToDb(c *gin.Context) {
  575. // var request string
  576. // if err := c.ShouldBindJSON(&request); err != nil {
  577. // c.JSON(400, gin.H{
  578. // "error": err.Error(),
  579. // })
  580. // return
  581. // }
  582. request := c.Param("data")
  583. if datas, err := models.SearchLicInfoToDb(request); err != nil {
  584. global.Logger.Errorln("搜索license信息失败: ", err.Error())
  585. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("搜索license信息失败失败: %s", err.Error())})
  586. return
  587. } else {
  588. c.JSON(http.StatusOK, gin.H{
  589. "success": true,
  590. "data": datas,
  591. })
  592. }
  593. }
  594. func ConditionalSearchController(c *gin.Context) {
  595. // 解析 JSON 请求体
  596. var request api.ConditionalSearchRequest
  597. if err := c.ShouldBindJSON(&request); err != nil {
  598. c.JSON(400, gin.H{
  599. "error": err.Error(),
  600. })
  601. return
  602. }
  603. if request.AnySearch == "" && request.EndDate == "" && request.StartingDate == "" && request.LicenseFlag == "" {
  604. c.JSON(400, gin.H{
  605. "error": "请求参数不能为空",
  606. })
  607. return
  608. }
  609. licInfos, _, err := services.GetConditionalSearchService(request)
  610. if err != nil {
  611. c.JSON(400, gin.H{
  612. "error": errors.Errorf("查询失败: %s", err.Error()),
  613. })
  614. return
  615. }
  616. if ret, err := returnLicenseInfo(licInfos); err != nil {
  617. c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintln("数据转换失败: ", err.Error())})
  618. } else {
  619. c.JSON(http.StatusOK, gin.H{
  620. "success": true,
  621. "data": ret,
  622. })
  623. }
  624. }
  625. func returnLicenseInfo(datas1 *[]models.OALicenseInfo) ([][]api.AllLicenseInfoResponse, error) {
  626. // 初始化存储 `OARequestID` 相同的 `ApiLicenseInfoTemp` 列表的 map
  627. oaRequestIDMap := make(map[int64][]api.AllLicenseInfoResponse)
  628. for _, data := range *datas1 {
  629. ApiLicenseInfo := api.AllLicenseInfoResponse{
  630. UniqueID: utils.ToString(data.LicInfo.UniqueID),
  631. OAId: utils.ToInt64(data.LicInfo.OAId),
  632. OARequestID: utils.ToInt64(data.LicInfo.OARequestID),
  633. OARequestName: utils.ToString(data.LicInfo.OARequestName),
  634. OARequestNameNew: utils.ToString(data.LicInfo.OARequestNameNew),
  635. OARequestNameHTMLNew: utils.ToString(data.LicInfo.OARequestNameHTMLNew),
  636. OAGLXMId: utils.ToInt64(data.LicInfo.OAGLXMID),
  637. OAGLXMName: utils.ToString(data.LicInfo.OAGLXMName),
  638. OASQSJ: utils.ToString(data.LicInfo.OASQSJ),
  639. OASalespersonName: utils.ToString(data.LicInfo.OASalespersonName),
  640. OAXSJSYX: utils.ToString(data.LicInfo.OAXSJSYX),
  641. OAOperationsPersonName: utils.ToString(data.LicInfo.OAOperationsPersonName),
  642. OAJFJSYX: utils.ToString(data.LicInfo.OAJFJSYX),
  643. OASYDW: utils.ToString(data.LicInfo.OASYDW),
  644. OAXMXXMS: utils.ToString(data.LicInfo.OAXMXXMS),
  645. OAJDS: utils.ToInt64(data.LicInfo.OAJDS),
  646. OANodeCount: utils.ToInt64(data.LicInfo.OANodeCount),
  647. OAProductCode: utils.ToString(data.LicInfo.OAProductCode),
  648. OAProductName: utils.ToString(data.LicInfo.OAProductName),
  649. OAProductVersion: utils.ToString(data.LicInfo.OAProductVersion),
  650. OACPU: utils.ToString(data.LicInfo.OACPU),
  651. OAOperatingSystem: utils.ToString(data.LicInfo.OAOperatingSystem),
  652. OAMainMAC: utils.ToString(data.LicInfo.OAMainMAC),
  653. OASecondMAC: utils.ToString(data.LicInfo.OASecondMAC),
  654. OACreationDate: utils.ToString(data.LicInfo.OACreationDate),
  655. OACreationTime: utils.ToString(data.LicInfo.OACreationTime),
  656. OALastOperateDate: utils.ToString(data.LicInfo.OALastOperateDate),
  657. OALastOperateTime: utils.ToString(data.LicInfo.OALastOperateTime),
  658. CaptureTime: utils.ToTimeString(data.LicInfo.CaptureTime),
  659. DelTime: utils.ToTimeString(data.LicInfo.DelTime),
  660. LastOperateTime: utils.ToTimeString(data.LicInfo.LastOperateTime),
  661. LicenseFlage: utils.ToString(data.GenrateInfo.LicenseFlage),
  662. Lic1: utils.ToString(data.GenrateInfo.Lic1),
  663. Lic2: utils.ToString(data.GenrateInfo.Lic2),
  664. CreatorGenerate: utils.ToTimeString(data.GenrateInfo.CreatorGenerate),
  665. }
  666. // 将 `ApiLicenseInfo` 添加到 `OARequestID` 对应的数组中
  667. oaRequestID := utils.ToInt64(data.LicInfo.OARequestID)
  668. oaRequestIDMap[oaRequestID] = append(oaRequestIDMap[oaRequestID], ApiLicenseInfo)
  669. }
  670. var datas [][]api.AllLicenseInfoResponse
  671. // 将 `oaRequestIDMap` 中的所有 `ApiLicenseInfoTemp` 列表添加到 `datas` 中
  672. for _, apiLicenseInfoTemp := range oaRequestIDMap {
  673. datas = append(datas, apiLicenseInfoTemp)
  674. }
  675. // 对 datas 的第一维进行排序
  676. // sort.Slice(datas, func(i, j int) bool {
  677. // // 假设你需要根据每个数组第一个元素的 OACreationDate 和 OACreationTime 来排序
  678. // if datas[i][0].OACreationDate == datas[j][0].OACreationDate {
  679. // return datas[i][0].OACreationTime > datas[j][0].OACreationTime
  680. // }
  681. // return datas[i][0].OACreationDate > datas[j][0].OACreationDate
  682. // })
  683. // 对 datas 的第一维进行排序
  684. sort.Slice(datas, func(i, j int) bool {
  685. // 先按 OACreationDate 和 OACreationTime 排序
  686. if datas[i][0].OACreationDate == datas[j][0].OACreationDate {
  687. if datas[i][0].OACreationTime == datas[j][0].OACreationTime {
  688. // 如果 OACreationDate 和 OACreationTime 相同,则按 OARequestID 从大到小排序
  689. return datas[i][0].OARequestID > datas[j][0].OARequestID
  690. }
  691. return datas[i][0].OACreationTime > datas[j][0].OACreationTime
  692. }
  693. return datas[i][0].OACreationDate > datas[j][0].OACreationDate
  694. })
  695. return datas, nil
  696. }