OALicenseInfo_services.go 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  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 DistributeLicenseToUserServices(OperatorUniqueID string, OaRequestId int64, UserUniqueIDs, UserAccounts, UserNames []string) (error, []string) {
  105. //检测OARequest是否以及分发过给用户
  106. existUsers, err := checkDistributeToUser(OaRequestId, UserUniqueIDs, UserNames)
  107. if err != nil {
  108. global.Logger.Errorln("license分发请求检测是否已发放给用户失败 %s", err.Error())
  109. return err, nil
  110. }
  111. //返回以及分发过的用户列表
  112. if len(existUsers) != 0 {
  113. return nil, existUsers
  114. }
  115. fmt.Println("DistributeOALicenseServices : ")
  116. //获取一个申请单的多个license信息
  117. LicInfos, _, err := models.GetOALicenseInfo(1, 1, "", "", "", OaRequestId)
  118. if err != nil {
  119. return err, nil
  120. }
  121. //将分发的lic信息插入lic分发用户表中
  122. for _, licInfo := range *LicInfos {
  123. for userIdx, userUID := range UserUniqueIDs {
  124. //如果lic1为空则报错
  125. if licInfo.GenrateInfo.Lic1.String == "" {
  126. global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  127. return errors.New("license生成信息为空"), nil
  128. }
  129. err = models.InsertlicenseRecordByUserRow(OaRequestId, licInfo.LicInfo.UniqueID.String, userUID, UserAccounts[userIdx], OperatorUniqueID)
  130. if err != nil {
  131. global.Logger.Errorln("DistributeOALicenseServices: 数据库插入失败: ", err.Error())
  132. return err, nil
  133. }
  134. }
  135. }
  136. return nil, nil
  137. }
  138. func DistributeLicenseToEmailServices(OperatorUniqueID string, OaRequestId int64, UserUniqueIDs, UserAccounts, UserNames, EmailArray []string) (error, []string) {
  139. //发送邮件
  140. //邮箱不空则发送
  141. //将一个申请单的多个license信息用邮箱发送
  142. if len(EmailArray) == 0 {
  143. return nil, nil
  144. }
  145. //将licenses里的lic串们打包在zip里
  146. // 1. 创建 ZIP 文件并存储在内存中
  147. // var buffer bytes.Buffer
  148. // zipWriter := zip.NewWriter(&buffer)
  149. // for _, lic := range *LicInfos {
  150. // // 将数据添加到 ZIP 中
  151. // file1, err := zipWriter.Create("file1.txt")
  152. // if err != nil {
  153. // global.Logger.Errorln(err)
  154. // }
  155. // _, err = file1.Write(lic)
  156. // if err != nil {
  157. // global.Logger.Errorln(err)
  158. // }
  159. // }
  160. // file2, err := zipWriter.Create("file2.txt")
  161. // if err != nil {
  162. // global.Logger.Errorln(err)
  163. // }
  164. // _, err = file2.Write(data2)
  165. // if err != nil {
  166. // global.Logger.Errorln(err)
  167. // }
  168. //获取一个申请单的多个license信息
  169. LicInfos, _, err := models.GetOALicenseInfo(1, 1, "", "", "", OaRequestId)
  170. if err != nil {
  171. return err, nil
  172. }
  173. fmt.Println("EmailArray : ", EmailArray)
  174. emails := strings.Join(EmailArray, ",")
  175. if !strings.Contains(emails, "@") {
  176. return nil, nil
  177. }
  178. for _, lic := range *LicInfos {
  179. if lic.GenrateInfo.Lic1.String == "" {
  180. global.Logger.Errorln("DistributeOALicenseServices : license生成信息为空 ")
  181. return errors.New("license生成信息为空"), nil
  182. }
  183. //组装邮件
  184. em, err := email.BuildEmail(&lic, EmailArray, lic.GenrateInfo.Lic1.String, lic.GenrateInfo.Lic2.String)
  185. if err != nil {
  186. global.Logger.Errorln("邮件生成失败", err.Error())
  187. return err, nil
  188. }
  189. //发送邮件
  190. err = email.SendEmail(em)
  191. if err != nil {
  192. global.Logger.Errorln("邮件发送失败", err.Error())
  193. return err, nil
  194. }
  195. //将分发的lic信息插入lic分发邮箱表中
  196. err = models.InsertlicenseRecordByEmailRow(OaRequestId, lic.LicInfo.UniqueID.String, emails, OperatorUniqueID)
  197. if err != nil {
  198. global.Logger.Errorln("数据库插入失败: ", err.Error())
  199. return err, nil
  200. }
  201. }
  202. return nil, nil
  203. }
  204. // 生成license
  205. func GenerateOALicenseStrServices(request api.GenerateLicenseStrRequest) (error, bool) {
  206. if request.OARequestId != 0 {
  207. //一个OARequestId会有多条数据UniqueID
  208. OALics, _, err := models.GetOALicenseInfo(0, 0, "", "", "", request.OARequestId)
  209. if err != nil || OALics == nil {
  210. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  211. return errors.Errorf("LicenseInfo数据查询失败 : %v", err.Error()), false
  212. }
  213. //校验license信息是否与oa一致
  214. var isCheck bool
  215. for _, license := range *OALics {
  216. //检测该数据是否与oa库数据库一致 //todo
  217. isCheckTmp, err := models.CheckLicenseInfoInOADB(&license.LicInfo)
  218. if err != nil {
  219. global.Logger.Errorln("LicenseInfo数据对比oa库 校验失败: ", err.Error())
  220. return errors.Errorf("LicenseInfo数据对比oa库 校验失败 %v", err.Error()), false
  221. }
  222. if isCheckTmp {
  223. global.Logger.Errorf("\nLicenseInfo数据对比oa库 不一致: %v\n", license.LicInfo.UniqueID)
  224. isCheck = isCheckTmp
  225. err = models.UpdatelicenseInfoRow(license)
  226. if err != nil {
  227. return err, false
  228. }
  229. }
  230. }
  231. //不一致则返回
  232. if isCheck {
  233. return nil, true
  234. }
  235. //生成license,已生成的不管
  236. for _, v := range *OALics {
  237. if v.GenrateInfo.LicenseFlage.String == "未生成" {
  238. err := generateLicenseStrSub(utils.ToString(v.LicInfo.UniqueID))
  239. if err != nil {
  240. global.Logger.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error())
  241. return errors.Errorf("请联系管理员, LicenseInfo%v生成失败: %v\n", v.LicInfo.UniqueID, err.Error()), false
  242. }
  243. }
  244. }
  245. return nil, false
  246. }
  247. return errors.Errorf("License申请单为空"), false
  248. }
  249. func generateLicenseStrSub(UniqueID string) error {
  250. var applications *[]models.OALicenseInfo
  251. var err error
  252. if UniqueID != "" {
  253. applications, _, err = models.GetOALicenseInfo(0, 1, "", UniqueID, "", 0)
  254. if err != nil {
  255. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  256. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  257. return errors.Errorf("LicenseInfo数据查询失败: %v", err.Error())
  258. }
  259. }
  260. fmt.Printf("applications%#v\n", applications)
  261. //生成副主节点license
  262. if applications == nil {
  263. global.Logger.Errorln("LicenseInfo数据生成失败 ,数据查询为空 ")
  264. //c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("LicenseInfo数据生成失败 ,数据查询为空: ", err.Error())})
  265. return errors.Errorf("LicenseInfo数据生成失败 ,数据查询为空 ")
  266. }
  267. if (*applications)[0].LicInfo.OASecondMAC.String != "" {
  268. // var licStr2 []byte
  269. // ei.MacAddr = applications[0].SecondaryMasterMacAddress
  270. // licStr2 = license.GenerateLicense(pj, ei, lI)
  271. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"))
  272. if err != nil {
  273. global.Logger.Errorln("LicenseInfo生成插入失败: ", err.Error())
  274. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  275. return errors.Errorf("LicenseInfo生成插入失败:: ", err.Error())
  276. }
  277. } else {
  278. //fmt.Println("licStr licStr2", licStr, licStr2)
  279. //插入到数据库
  280. err = models.UpdateOALicenseStr(utils.ToString((*applications)[0].LicInfo.UniqueID), []byte("b4j6z4rE2IfG1av0wIPT7YnvyGZFHxwIBikMGjgCLQILR0xsT1NHiuzoi+Dqq+bmiNDEiuPyitDVgdvlRmYbFAk+MAAGASlPTkdMbE9"), nil)
  281. if err != nil {
  282. global.Logger.Errorln("LicenseInfo2生成插入失败: ", err.Error())
  283. // c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("数据查询失败: ", err.Error())})
  284. return errors.Errorf("LicenseInfo2生成插入失败:: ", err.Error())
  285. }
  286. }
  287. return nil
  288. }
  289. func GetDistributeButtenCheckService(OARequestId int64) (error, bool) {
  290. if OARequestId != 0 {
  291. //一个OARequestId会有多条数据UniqueID
  292. OALics, _, err := models.GetOALicenseInfo(0, 0, "", "", "", OARequestId)
  293. if err != nil || OALics == nil {
  294. global.Logger.Errorln("LicenseInfo数据查询失败: ", err.Error())
  295. return errors.Errorf("LicenseInfo数据查询失败 : %v", err.Error()), false
  296. }
  297. //校验license信息是否与oa一致
  298. var isCheck bool
  299. for _, license := range *OALics {
  300. //检测该数据是否与oa库数据库一致 //todo
  301. isCheckTmp, err := models.CheckLicenseInfoInOADB(&license.LicInfo)
  302. if err != nil {
  303. global.Logger.Errorln("LicenseInfo数据对比oa库 校验失败: ", err.Error())
  304. return errors.Errorf("LicenseInfo数据对比oa库 校验失败 %v", err.Error()), false
  305. }
  306. if isCheckTmp {
  307. global.Logger.Errorf("\nLicenseInfo数据对比oa库 不一致: %v\n", license.LicInfo.UniqueID)
  308. isCheck = isCheckTmp
  309. err = models.UpdatelicenseInfoRow(license)
  310. if err != nil {
  311. return err, false
  312. }
  313. err = models.UpdatelicenseGenerateInfoRow(license)
  314. if err != nil {
  315. return err, false
  316. }
  317. }
  318. }
  319. //不一致则返回
  320. if isCheck {
  321. return nil, true
  322. }
  323. return nil, false
  324. }
  325. return errors.Errorf("该申请单没有oa单号"), false
  326. }
  327. func GetConditionalSearchService(request api.ConditionalSearchRequest) (*[]models.OALicenseInfo, int, error) {
  328. lic, total, err := models.GetConditionalSearch(request)
  329. if err != nil {
  330. return nil, total, err
  331. }
  332. return lic, total, nil
  333. }