OALicenseInfo_services.go 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  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. if len(EmailArray) == 0 {
  48. return nil, nil
  49. }
  50. //将licenses里的lic串们打包在zip里
  51. // 1. 创建 ZIP 文件并存储在内存中
  52. // var buffer bytes.Buffer
  53. // zipWriter := zip.NewWriter(&buffer)
  54. // for _, lic := range *LicInfos {
  55. // // 将数据添加到 ZIP 中
  56. // file1, err := zipWriter.Create("file1.txt")
  57. // if err != nil {
  58. // global.Logger.Errorln(err)
  59. // }
  60. // _, err = file1.Write(lic)
  61. // if err != nil {
  62. // global.Logger.Errorln(err)
  63. // }
  64. // }
  65. // file2, err := zipWriter.Create("file2.txt")
  66. // if err != nil {
  67. // global.Logger.Errorln(err)
  68. // }
  69. // _, err = file2.Write(data2)
  70. // if err != nil {
  71. // global.Logger.Errorln(err)
  72. // }
  73. fmt.Println("EmailArray : ", EmailArray)
  74. emails := strings.Join(EmailArray, ",")
  75. if !strings.Contains(emails, "@") {
  76. return nil, nil
  77. }
  78. for _, lic := range *LicInfos {
  79. if lic.GenrateInfo.Lic1.String == "" {
  80. global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  81. return errors.New("license生成信息为空"), nil
  82. }
  83. //组装邮件
  84. em, err := email.BuildEmail(&lic, EmailArray, lic.GenrateInfo.Lic1.String, lic.GenrateInfo.Lic2.String)
  85. if err != nil {
  86. global.Logger.Errorln("邮件生成失败", err.Error())
  87. return err, nil
  88. }
  89. //发送邮件
  90. err = email.SendEmail(em)
  91. if err != nil {
  92. global.Logger.Errorln("邮件发送失败", err.Error())
  93. return err, nil
  94. }
  95. //将分发的lic信息插入lic分发邮箱表中
  96. err = models.InsertlicenseRecordByEmailRow(OaRequestId, lic.LicInfo.UniqueID.String, emails, OperatorUniqueID)
  97. if err != nil {
  98. global.Logger.Errorln("数据库插入失败: ", err.Error())
  99. return err, nil
  100. }
  101. }
  102. return nil, nil
  103. }
  104. func GenerateOALicenseStrServices(request api.GenerateLicenseStrRequest) (error, bool) {
  105. if request.OARequestId != "" {
  106. //一个OARequestId会有多条数据UniqueID
  107. OALics, _, err := models.GetOALicenseInfo(0, 0, "", "", "", request.OARequestId)
  108. if err != nil || OALics == nil {
  109. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  110. return errors.Errorf("LicenseInfo数据查询失败 : %v", err.Error()), false
  111. }
  112. //校验license信息是否与oa一致
  113. var isCheck bool
  114. for _, license := range *OALics {
  115. //检测该数据是否与oa库数据库一致 //todo
  116. isCheckTmp, err := models.CheckLicenseInfoInOADB(&license.LicInfo)
  117. if err != nil {
  118. global.Logger.Errorln("LicenseInfo数据对比oa库 校验失败: ", err.Error())
  119. return errors.Errorf("LicenseInfo数据对比oa库 校验失败 %v", err.Error()), false
  120. }
  121. if isCheckTmp {
  122. global.Logger.Errorf("\nLicenseInfo数据对比oa库 不一致: %v\n", license.LicInfo.UniqueID)
  123. isCheck = isCheckTmp
  124. err = models.UpdatelicenseInfoRow(license)
  125. if err != nil {
  126. return err, false
  127. }
  128. }
  129. }
  130. //不一致则返回
  131. if isCheck {
  132. return nil, true
  133. }
  134. //生成license,已生成的不管
  135. for _, v := range *OALics {
  136. if v.GenrateInfo.LicenseFlage.String == "未生成" {
  137. err := generateLicenseStrSub(utils.ToString(v.LicInfo.UniqueID))
  138. if err != nil {
  139. global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error())
  140. return errors.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error()), false
  141. }
  142. }
  143. }
  144. return nil, false
  145. }
  146. return errors.Errorf("License申请单为空"), false
  147. }
  148. func generateLicenseStrSub(UniqueID string) error {
  149. var applications *[]models.OALicenseInfo
  150. var err error
  151. if UniqueID != "" {
  152. applications, _, err = models.GetOALicenseInfo(0, 1, "", UniqueID, "", "")
  153. if err != nil {
  154. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  155. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  156. return errors.Errorf("LicenseInfo数据查询失败: %v", err.Error())
  157. }
  158. }
  159. fmt.Printf("applications%#v\n", applications)
  160. //生成副主节点license
  161. if applications == nil {
  162. global.Logger.Errorln("LicenseInfo数据生成失败 ,数据查询为空 ")
  163. //c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("LicenseInfo数据生成失败 ,数据查询为空: ", err.Error())})
  164. return errors.Errorf("LicenseInfo数据生成失败 ,数据查询为空 ")
  165. }
  166. if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  167. // var licStr2 []byte
  168. // ei.MacAddr = applications[0].SecondaryMasterMacAddress
  169. // licStr2 = license.GenerateLicense(pj, ei, lI)
  170. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
  171. if err != nil {
  172. global.Logger.Errorln("LicenseInfo生成插入失败: ", err.Error())
  173. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  174. return errors.Errorf("LicenseInfo生成插入失败:: ", err.Error())
  175. }
  176. } else {
  177. //fmt.Println("licStr licStr2", licStr, licStr2)
  178. //插入到数据库
  179. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
  180. if err != nil {
  181. global.Logger.Errorln("LicenseInfo2生成插入失败: ", err.Error())
  182. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  183. return errors.Errorf("LicenseInfo2生成插入失败:: ", err.Error())
  184. }
  185. }
  186. return nil
  187. }
  188. func GetDistributeButtenCheckService(OARequestId string) (error, bool) {
  189. if OARequestId != "" {
  190. //一个OARequestId会有多条数据UniqueID
  191. OALics, _, err := models.GetOALicenseInfo(0, 0, "", "", "", OARequestId)
  192. if err != nil || OALics == nil {
  193. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  194. return errors.Errorf("LicenseInfo数据查询失败 : %v", err.Error()), false
  195. }
  196. //校验license信息是否与oa一致
  197. var isCheck bool
  198. for _, license := range *OALics {
  199. //检测该数据是否与oa库数据库一致 //todo
  200. isCheckTmp, err := models.CheckLicenseInfoInOADB(&license.LicInfo)
  201. if err != nil {
  202. global.Logger.Errorln("LicenseInfo数据对比oa库 校验失败: ", err.Error())
  203. return errors.Errorf("LicenseInfo数据对比oa库 校验失败 %v", err.Error()), false
  204. }
  205. if isCheckTmp {
  206. global.Logger.Errorf("\nLicenseInfo数据对比oa库 不一致: %v\n", license.LicInfo.UniqueID)
  207. isCheck = isCheckTmp
  208. err = models.UpdatelicenseInfoRow(license)
  209. if err != nil {
  210. return err, false
  211. }
  212. err = models.UpdatelicenseGenerateInfoRow(license)
  213. if err != nil {
  214. return err, false
  215. }
  216. }
  217. }
  218. //不一致则返回
  219. if isCheck {
  220. return nil, true
  221. }
  222. return nil, false
  223. }
  224. return errors.Errorf("该申请单没有oa单号"), false
  225. }