OALicenseInfo_services.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. package services
  2. import (
  3. "archive/zip"
  4. "bytes"
  5. "fmt"
  6. "strings"
  7. "xugu_license/internal/api"
  8. "xugu_license/internal/global"
  9. "xugu_license/internal/models"
  10. "xugu_license/internal/module/email"
  11. "xugu_license/internal/utils"
  12. "github.com/pkg/errors"
  13. )
  14. func DistributeOALicenseServices(OperatorUniqueID, OaRequestId string, UserUniqueIDs, UserAccounts, UserNames, EmailArray []string) (error, []string) {
  15. // //检测OARequest是否以及分发过给用户
  16. // existUsers, err := checkDistributeToUser(OaRequestId, UserUniqueIDs, UserNames)
  17. // if err != nil {
  18. // global.Logger.Errorln("license分发请求检测是否已发放给用户失败 %s", err.Error())
  19. // return err, nil
  20. // }
  21. // //返回以及分发过的用户列表
  22. // if len(existUsers) != 0 {
  23. // return nil, existUsers
  24. // }
  25. // fmt.Println("DistributeOALicenseServices : ")
  26. // //获取一个申请单的多个license信息
  27. // LicInfos, _, err := models.GetOALicenseInfo(1, 1, "", "", "", OaRequestId)
  28. // if err != nil {
  29. // return err, nil
  30. // }
  31. // //将分发的lic信息插入lic分发用户表中
  32. // for _, licInfo := range *LicInfos {
  33. // for userIdx, userUID := range UserUniqueIDs {
  34. // //如果lic1为空则报错
  35. // if licInfo.GenrateInfo.Lic1.String == "" {
  36. // global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  37. // return errors.New("license生成信息为空"), nil
  38. // }
  39. // err = models.InsertlicenseRecordByUserRow(OaRequestId, licInfo.LicInfo.UniqueID.String, userUID, UserAccounts[userIdx], OperatorUniqueID)
  40. // if err != nil {
  41. // global.Logger.Errorln("DistributeOALicenseServices: 数据库插入失败: ", err.Error())
  42. // return err, nil
  43. // }
  44. // }
  45. // }
  46. // //发送邮件
  47. // //邮箱不空则发送
  48. // //将一个申请单的多个license信息用邮箱发送
  49. // if len(EmailArray) == 0 {
  50. // return nil, nil
  51. // }
  52. // //将licenses里的lic串们打包在zip里
  53. // // 1. 创建 ZIP 文件并存储在内存中
  54. // // var buffer bytes.Buffer
  55. // // zipWriter := zip.NewWriter(&buffer)
  56. // // for _, lic := range *LicInfos {
  57. // // // 将数据添加到 ZIP 中
  58. // // file1, err := zipWriter.Create("file1.txt")
  59. // // if err != nil {
  60. // // global.Logger.Errorln(err)
  61. // // }
  62. // // _, err = file1.Write(lic)
  63. // // if err != nil {
  64. // // global.Logger.Errorln(err)
  65. // // }
  66. // // }
  67. // // file2, err := zipWriter.Create("file2.txt")
  68. // // if err != nil {
  69. // // global.Logger.Errorln(err)
  70. // // }
  71. // // _, err = file2.Write(data2)
  72. // // if err != nil {
  73. // // global.Logger.Errorln(err)
  74. // // }
  75. // fmt.Println("EmailArray : ", EmailArray)
  76. // emails := strings.Join(EmailArray, ",")
  77. // if !strings.Contains(emails, "@") {
  78. // return nil, nil
  79. // }
  80. // for _, lic := range *LicInfos {
  81. // if lic.GenrateInfo.Lic1.String == "" {
  82. // global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  83. // return errors.New("license生成信息为空"), nil
  84. // }
  85. // //组装邮件
  86. // em, err := email.BuildEmail(&lic, EmailArray, lic.GenrateInfo.Lic1.String, lic.GenrateInfo.Lic2.String)
  87. // if err != nil {
  88. // global.Logger.Errorln("邮件生成失败", err.Error())
  89. // return err, nil
  90. // }
  91. // //发送邮件
  92. // err = email.SendEmail(em)
  93. // if err != nil {
  94. // global.Logger.Errorln("邮件发送失败", err.Error())
  95. // return err, nil
  96. // }
  97. // //将分发的lic信息插入lic分发邮箱表中
  98. // err = models.InsertlicenseRecordByEmailRow(OaRequestId, lic.LicInfo.UniqueID.String, emails, OperatorUniqueID)
  99. // if err != nil {
  100. // global.Logger.Errorln("数据库插入失败: ", err.Error())
  101. // return err, nil
  102. // }
  103. // }
  104. return nil, nil
  105. }
  106. func DistributeLicenseToUserServices(OperatorUniqueID string, OaRequestId int64, UserUniqueIDs, UserAccounts, UserNames []string) (error, []string) {
  107. //检测OARequest是否以及分发过给用户
  108. existUsers, err := checkDistributeToUser(OaRequestId, UserUniqueIDs, UserNames)
  109. if err != nil {
  110. global.Logger.Errorln("license分发请求检测是否已发放给用户失败 %s", err.Error())
  111. return err, nil
  112. }
  113. //返回以及分发过的用户列表
  114. if len(existUsers) != 0 {
  115. return nil, existUsers
  116. }
  117. fmt.Println("DistributeOALicenseServices : ")
  118. //获取一个申请单的多个license信息
  119. LicInfos, _, err := models.GetOALicenseInfo(1, 1, "", "", "", OaRequestId)
  120. if err != nil {
  121. return err, nil
  122. }
  123. //将分发的lic信息插入lic分发用户表中
  124. for _, licInfo := range *LicInfos {
  125. for userIdx, userUID := range UserUniqueIDs {
  126. //如果lic1为空则报错
  127. if licInfo.GenrateInfo.Lic1.String == "" {
  128. global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  129. return errors.New("license生成信息为空"), nil
  130. }
  131. err = models.InsertlicenseRecordByUserRow(OaRequestId, licInfo.LicInfo.UniqueID.String, userUID, UserAccounts[userIdx], OperatorUniqueID)
  132. if err != nil {
  133. global.Logger.Errorln("DistributeOALicenseServices: 数据库插入失败: ", err.Error())
  134. return err, nil
  135. }
  136. }
  137. }
  138. return nil, nil
  139. }
  140. func DistributeLicenseToEmailServices(OperatorUniqueID string, OaRequestId int64, UserUniqueIDs, UserAccounts, UserNames, EmailArray []string) (error, []string) {
  141. //发送邮件
  142. //邮箱不空则发送
  143. //将一个申请单的多个license信息用邮箱发送
  144. if len(EmailArray) == 0 {
  145. return nil, nil
  146. }
  147. //获取一个申请单的多个license信息
  148. LicInfos, _, err := models.GetOALicenseInfo(1, 1, "", "", "", OaRequestId)
  149. if err != nil {
  150. return err, nil
  151. }
  152. //将licenses里的lic串们打包在zip里
  153. //1. 创建 ZIP 文件并存储在内存中
  154. var buffer bytes.Buffer
  155. zipWriter := zip.NewWriter(&buffer)
  156. for i, lic := range *LicInfos {
  157. ii := i + 1
  158. num := 1
  159. filetestName := fmt.Sprintf("%d_%s_license_jdCount%d_%d", ii, lic.LicInfo.OAGLXMName.String, lic.LicInfo.OANodeCount.Int64, num)
  160. num++
  161. // 将数据添加到 ZIP 中
  162. file1, err := zipWriter.Create(fmt.Sprintf(filetestName+"_%s", lic.LicInfo.OAMainMAC.String))
  163. if err != nil {
  164. global.Logger.Errorln(err)
  165. }
  166. if lic.GenrateInfo.Lic1.Valid {
  167. _, err = file1.Write([]byte(lic.GenrateInfo.Lic1.String))
  168. if err != nil {
  169. global.Logger.Errorln(err)
  170. }
  171. }
  172. file2, err := zipWriter.Create(fmt.Sprintf(filetestName+"_%s", lic.LicInfo.OASecondMAC.String))
  173. if lic.GenrateInfo.Lic2.Valid {
  174. if err != nil {
  175. global.Logger.Errorln(err)
  176. }
  177. _, err = file2.Write([]byte(lic.GenrateInfo.Lic2.String))
  178. if err != nil {
  179. global.Logger.Errorln(err)
  180. }
  181. }
  182. }
  183. // 关闭 zip.Writer
  184. if err := zipWriter.Close(); err != nil {
  185. global.Logger.Errorln(err)
  186. }
  187. // 将 ZIP 内容转换为 []byte
  188. zipBytes := buffer.Bytes()
  189. fmt.Println("EmailArray : ", EmailArray)
  190. emails := strings.Join(EmailArray, ",")
  191. if !strings.Contains(emails, "@") {
  192. return nil, nil
  193. }
  194. // if lic.GenrateInfo.Lic1.String == "" {
  195. // global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  196. // return errors.New("license生成信息为空"), nil
  197. // }
  198. lic := &(*LicInfos)[0]
  199. //组装邮件
  200. em, err := email.BuildEmail(lic, EmailArray, zipBytes, "")
  201. if err != nil {
  202. global.Logger.Errorln("邮件生成失败", err.Error())
  203. return err, nil
  204. }
  205. //发送邮件
  206. err = email.SendEmail(em)
  207. if err != nil {
  208. global.Logger.Errorln("邮件发送失败", err.Error())
  209. return err, nil
  210. }
  211. for _, lic := range *LicInfos {
  212. //将分发的lic信息插入lic分发邮箱表中
  213. err = models.InsertlicenseRecordByEmailRow(OaRequestId, lic.LicInfo.UniqueID.String, emails, OperatorUniqueID)
  214. if err != nil {
  215. global.Logger.Errorln("数据库插入失败: ", err.Error())
  216. return err, nil
  217. }
  218. }
  219. // for _, lic := range *LicInfos {
  220. // if lic.GenrateInfo.Lic1.String == "" {
  221. // global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  222. // return errors.New("license生成信息为空"), nil
  223. // }
  224. // //组装邮件
  225. // em, err := email.BuildEmail(&lic, EmailArray, lic.GenrateInfo.Lic1.String, lic.GenrateInfo.Lic2.String)
  226. // if err != nil {
  227. // global.Logger.Errorln("邮件生成失败", err.Error())
  228. // return err, nil
  229. // }
  230. // //发送邮件
  231. // err = email.SendEmail(em)
  232. // if err != nil {
  233. // global.Logger.Errorln("邮件发送失败", err.Error())
  234. // return err, nil
  235. // }
  236. // //将分发的lic信息插入lic分发邮箱表中
  237. // err = models.InsertlicenseRecordByEmailRow(OaRequestId, lic.LicInfo.UniqueID.String, emails, OperatorUniqueID)
  238. // if err != nil {
  239. // global.Logger.Errorln("数据库插入失败: ", err.Error())
  240. // return err, nil
  241. // }
  242. // }
  243. return nil, nil
  244. }
  245. // 生成license
  246. func GenerateOALicenseStrServices(request api.GenerateLicenseStrRequest) (error, bool) {
  247. if request.OARequestId != 0 {
  248. //一个OARequestId会有多条数据UniqueID
  249. OALics, _, err := models.GetOALicenseInfo(0, 0, "", "", "", request.OARequestId)
  250. if err != nil || OALics == nil {
  251. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  252. return errors.Errorf("LicenseInfo数据查询失败 : %v", err.Error()), false
  253. }
  254. //校验license信息是否与oa一致
  255. var isCheck bool
  256. for _, license := range *OALics {
  257. //检测该数据是否与oa库数据库一致 //todo
  258. isCheckTmp, err := models.CheckLicenseInfoInOADB(&license.LicInfo)
  259. if err != nil {
  260. global.Logger.Errorln("LicenseInfo数据对比oa库 校验失败: ", err.Error())
  261. return errors.Errorf("LicenseInfo数据对比oa库 校验失败 %v", err.Error()), false
  262. }
  263. if isCheckTmp {
  264. global.Logger.Errorf("\nLicenseInfo数据对比oa库 不一致: %v\n", license.LicInfo.UniqueID)
  265. isCheck = isCheckTmp
  266. err = models.UpdatelicenseInfoRow(license)
  267. if err != nil {
  268. return err, false
  269. }
  270. }
  271. }
  272. //不一致则返回
  273. if isCheck {
  274. return nil, true
  275. }
  276. //生成license,已生成的不管
  277. for _, v := range *OALics {
  278. if v.GenrateInfo.LicenseFlage.String == "未生成" {
  279. err := generateLicenseStrSub(utils.ToString(v.LicInfo.UniqueID))
  280. if err != nil {
  281. global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error())
  282. return errors.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error()), false
  283. }
  284. }
  285. }
  286. return nil, false
  287. }
  288. return errors.Errorf("License申请单为空"), false
  289. }
  290. func generateLicenseStrSub(UniqueID string) error {
  291. var applications *[]models.OALicenseInfo
  292. var err error
  293. if UniqueID != "" {
  294. applications, _, err = models.GetOALicenseInfo(0, 1, "", UniqueID, "", 0)
  295. if err != nil {
  296. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  297. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  298. return errors.Errorf("LicenseInfo数据查询失败: %v", err.Error())
  299. }
  300. }
  301. fmt.Printf("applications%#v\n", applications)
  302. //生成副主节点license
  303. if applications == nil {
  304. global.Logger.Errorln("LicenseInfo数据生成失败 ,数据查询为空 ")
  305. //c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("LicenseInfo数据生成失败 ,数据查询为空: ", err.Error())})
  306. return errors.Errorf("LicenseInfo数据生成失败 ,数据查询为空 ")
  307. }
  308. if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  309. // var licStr2 []byte
  310. // ei.MacAddr = applications[0].SecondaryMasterMacAddress
  311. // licStr2 = license.GenerateLicense(pj, ei, lI)
  312. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
  313. if err != nil {
  314. global.Logger.Errorln("LicenseInfo生成插入失败: ", err.Error())
  315. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  316. return errors.Errorf("LicenseInfo生成插入失败:: ", err.Error())
  317. }
  318. } else {
  319. //fmt.Println("licStr licStr2", licStr, licStr2)
  320. //插入到数据库
  321. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
  322. if err != nil {
  323. global.Logger.Errorln("LicenseInfo2生成插入失败: ", err.Error())
  324. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  325. return errors.Errorf("LicenseInfo2生成插入失败:: ", err.Error())
  326. }
  327. }
  328. return nil
  329. }