OALicenseInfo_services.go 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. package services
  2. import (
  3. "fmt"
  4. "strings"
  5. "xugu_license/internal/api"
  6. "xugu_license/internal/global"
  7. "xugu_license/internal/models"
  8. "xugu_license/internal/module/email"
  9. "xugu_license/internal/utils"
  10. "github.com/pkg/errors"
  11. )
  12. func DistributeOALicenseServices(OperatorUniqueID, OaRequestId string, UserUniqueIDs, UserAccounts, UserNames, EmailArray []string) (error, []string) {
  13. //检测OARequest是否以及分发过给用户
  14. existUsers, err := checkDistributeToUser(OaRequestId, UserUniqueIDs, UserNames)
  15. if err != nil {
  16. global.Logger.Errorln("license分发请求检测是否已发放给用户失败 %s", err.Error())
  17. return err, nil
  18. }
  19. //返回以及分发过的用户列表
  20. if len(existUsers) != 0 {
  21. return nil, existUsers
  22. }
  23. fmt.Println("DistributeOALicenseServices : ")
  24. //获取一个申请单的多个license信息
  25. LicInfos, _, err := models.GetOALicenseInfo(1, 1, "", "", "", OaRequestId)
  26. if err != nil {
  27. return err, nil
  28. }
  29. //将分发的lic信息插入lic分发用户表中
  30. for _, licInfo := range *LicInfos {
  31. for userIdx, userUID := range UserUniqueIDs {
  32. //如果lic1为空则报错
  33. if licInfo.GenrateInfo.Lic1.String == "" {
  34. global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  35. return errors.New("license生成信息为空"), nil
  36. }
  37. err = models.InsertlicenseRecordByUserRow(OaRequestId, licInfo.LicInfo.UniqueID.String, userUID, UserAccounts[userIdx], OperatorUniqueID)
  38. if err != nil {
  39. global.Logger.Errorln("DistributeOALicenseServices: 数据库插入失败: ", err.Error())
  40. return err, nil
  41. }
  42. }
  43. }
  44. //发送邮件
  45. //邮箱不空则发送
  46. //将一个申请单的多个license信息用邮箱发送
  47. fmt.Println("len(EmailArray) == ")
  48. if len(EmailArray) == 0 {
  49. return nil, nil
  50. }
  51. fmt.Println("EmailArray : ", EmailArray)
  52. emails := strings.Join(EmailArray, ",")
  53. if !strings.Contains(emails, "@") {
  54. return nil, nil
  55. }
  56. for _, lic := range *LicInfos {
  57. if lic.GenrateInfo.Lic1.String == "" {
  58. global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  59. return errors.New("license生成信息为空"), nil
  60. }
  61. //组装邮件
  62. em, err := email.BuildEmail(&lic, EmailArray, lic.GenrateInfo.Lic1.String, lic.GenrateInfo.Lic2.String)
  63. if err != nil {
  64. global.Logger.Errorln("邮件生成失败", err.Error())
  65. return err, nil
  66. }
  67. //发送邮件
  68. err = email.SendEmail(em)
  69. if err != nil {
  70. global.Logger.Errorln("邮件发送失败", err.Error())
  71. return err, nil
  72. }
  73. //将分发的lic信息插入lic分发邮箱表中
  74. err = models.InsertlicenseRecordByEmailRow(OaRequestId, lic.LicInfo.UniqueID.String, emails, OperatorUniqueID)
  75. if err != nil {
  76. global.Logger.Errorln("数据库插入失败: ", err.Error())
  77. return err, nil
  78. }
  79. }
  80. return nil, nil
  81. }
  82. func GenerateOALicenseStrServices(request api.GenerateLicenseStrRequest) error {
  83. //生成单独的license
  84. if request.UniqueID != "" {
  85. if err, isCheck := generateLicenseStrSub(request.UniqueID); err != nil {
  86. global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", request.UniqueID, err.Error())
  87. return errors.Errorf("请联系管理员, LicenseInfo%v生成失败: %v", err.Error())
  88. } else if isCheck {
  89. return errors.Errorf("该申请信息与OA库不一致,请刷新页面")
  90. }
  91. } else if request.OARequestId != "" {
  92. //一个OARequestId会有多条数据UniqueID
  93. OALics, _, err := models.GetOALicenseInfo(0, 0, "", "", "", request.OARequestId)
  94. if err != nil || OALics == nil {
  95. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  96. return errors.Errorf("LicenseInfo数据查询失败 : %v", err.Error())
  97. }
  98. //生成license,已生成的不管
  99. for _, v := range *OALics {
  100. if v.GenrateInfo.LicenseFlage.String == "未生成" {
  101. err, isCheck := generateLicenseStrSub(utils.ToString(v.LicInfo.UniqueID))
  102. if err != nil {
  103. global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error())
  104. return errors.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error())
  105. } else if isCheck {
  106. return errors.Errorf("该申请信息与OA库不一致,请刷新页面")
  107. }
  108. }
  109. }
  110. } else {
  111. global.Logger.Errorln("未指定明确License行生成 ")
  112. return errors.Errorf("未指定明确License行生成\n")
  113. }
  114. return nil
  115. }
  116. func generateLicenseStrSub(UniqueID string) (error, bool) {
  117. var applications *[]models.OALicenseInfo
  118. var err error
  119. if UniqueID != "" {
  120. applications, _, err = models.GetOALicenseInfo(0, 1, "", UniqueID, "", "")
  121. if err != nil {
  122. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  123. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  124. return errors.Errorf("LicenseInfo数据查询失败: %v", err.Error()), false
  125. }
  126. }
  127. // (*applications)[0].LicInfo.UniqueID.String = ""
  128. // (*applications)[0].LicInfo.UniqueID.Valid = false
  129. // (*applications)[0].GenrateInfo.LicenseUniqueID.String = ""
  130. // (*applications)[0].GenrateInfo.LicenseUniqueID.Valid = false
  131. fmt.Printf("applications%#v\n", applications)
  132. //检测该数据是否与oa库数据库一致 //todo
  133. // isCheck, err := models.CheckLicenseInfoInOADB(&(*applications)[0].LicInfo)
  134. // if err != nil {
  135. // global.Logger.Errorln("LicenseInfo数据对比oa库 查询失败: ", err.Error())
  136. // // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  137. // return errors.Errorf("LicenseInfo数据对比oa库 查询失败 %v", err.Error()), false
  138. // }
  139. // if isCheck {
  140. // global.Logger.Errorln("LicenseInfo数据对比oa库 不一致")
  141. // err := models.UpdatelicenseInfoRow(models.OALicenseInfo{
  142. // LicInfo: (*applications)[0].LicInfo,
  143. // })
  144. // if err != nil {
  145. // return err, false
  146. // }
  147. // return nil, true
  148. // }
  149. //生成副主节点license
  150. if applications == nil {
  151. global.Logger.Errorln("LicenseInfo数据生成失败 ,数据查询为空 ")
  152. //c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("LicenseInfo数据生成失败 ,数据查询为空: ", err.Error())})
  153. return errors.Errorf("LicenseInfo数据生成失败 ,数据查询为空 "), false
  154. }
  155. if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  156. // var licStr2 []byte
  157. // ei.MacAddr = applications[0].SecondaryMasterMacAddress
  158. // licStr2 = license.GenerateLicense(pj, ei, lI)
  159. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
  160. if err != nil {
  161. global.Logger.Errorln("LicenseInfo生成插入失败: ", err.Error())
  162. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  163. return errors.Errorf("LicenseInfo生成插入失败:: ", err.Error()), false
  164. }
  165. } else {
  166. //fmt.Println("licStr licStr2", licStr, licStr2)
  167. //插入到数据库
  168. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
  169. if err != nil {
  170. global.Logger.Errorln("LicenseInfo2生成插入失败: ", err.Error())
  171. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  172. return errors.Errorf("LicenseInfo2生成插入失败:: ", err.Error()), false
  173. }
  174. }
  175. return nil, false
  176. }