company_report_permission.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package services
  2. import (
  3. "context"
  4. "fmt"
  5. "hongze/hongze_task/models"
  6. "hongze/hongze_task/utils"
  7. "time"
  8. )
  9. // CompanyReportPermissionTryOut 产品正式权限 -> 产品权限试用
  10. func CompanyReportPermissionTryOut(cont context.Context) (err error) {
  11. //fmt.Println("开始进入产品试用权限 -> 产品权限关闭")
  12. endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
  13. items, err := models.GetCompanyReportPermissionNeedTryOut(endDate)
  14. if err != nil {
  15. utils.FileLog.Info("GetCompanyReportPermissionNeedTryOut Err:%s" + err.Error())
  16. return
  17. }
  18. for _, v := range items {
  19. //fmt.Println(k, v)
  20. //continue
  21. //查看是否有审批单,如果有审批单,那么就退出当前循环,进入下一循环
  22. //count, err := models.GetCompanyApprovalCount(v.CompanyId, v.ProductId)
  23. //if err != nil {
  24. // continue
  25. //}
  26. //if count > 0 {
  27. // continue
  28. //}
  29. //正式转试用用户产品权限
  30. err = models.CompanyReportPermissionTryOut(v.CompanyReportPermissionId, v.CompanyId, v.ProductId)
  31. if err != nil {
  32. utils.FileLog.Info("CompanyReportPermissionTryOut Err:%s" + err.Error())
  33. continue
  34. }
  35. //添加正式转试用用户产品权限日志
  36. _ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, "正式转试用", "try_out", v.Status)
  37. }
  38. return
  39. }
  40. //产品试用权限 -> 产品权限关闭
  41. func CompanyReportPermissionClose(cont context.Context) (err error) {
  42. //fmt.Println("开始进入产品试用权限 -> 产品权限关闭")
  43. endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
  44. items, err := models.GetCompanyReportPermissionNeedClose(endDate)
  45. if err != nil {
  46. utils.FileLog.Info("GetCompanyReportPermissionNeedClose Err:%s" + err.Error())
  47. return
  48. }
  49. //待处理的用户产品权限列表(主要目的是为了多个产品项的去重,避免冻结产品时的多余sql操作)
  50. freezeCompanyProductList := make(map[string]*models.CompanyReportPermission)
  51. for _, v := range items {
  52. //fmt.Println(k, v)
  53. //continue
  54. //查看是否有审批单,如果有审批单,那么就退出当前循环,进入下一循环
  55. count, err := models.GetCompanyApprovalCount(v.CompanyId, v.ProductId)
  56. if err != nil {
  57. continue
  58. }
  59. if count > 0 {
  60. continue
  61. }
  62. //关闭用户产品权限
  63. err = models.CompanyReportPermissionClose(v.CompanyReportPermissionId, v.CompanyId, v.ProductId)
  64. if err != nil {
  65. utils.FileLog.Info("CompanyReportPermissionClose Err:%s" + err.Error())
  66. continue
  67. }
  68. //添加关闭用户产品权限日志
  69. _ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, "试用转关闭", "close", v.Status)
  70. //如果不存在该数据,那么将该数据放入待处理用户产品权限列表
  71. mapKey := fmt.Sprintf("%v_%v", v.CompanyId, v.ProductId)
  72. if _, ok := freezeCompanyProductList[mapKey]; ok == false {
  73. freezeCompanyProductList[mapKey] = v
  74. }
  75. }
  76. //遍历待处理的用户产品权限列表,查询用户产品权限信息并冻结用户产品
  77. for _, companyReportPermission := range freezeCompanyProductList {
  78. go queryAndFreezeCompanyProduct(companyReportPermission)
  79. }
  80. return
  81. }
  82. //查询用户产品权限信息并冻结用户产品
  83. func queryAndFreezeCompanyProduct(companyReportPermission *models.CompanyReportPermission) {
  84. //查询该用户名下是否存在还在使用的权限
  85. count, err := models.GetCompanyReportPermissionCount(companyReportPermission.CompanyId, companyReportPermission.ProductId)
  86. if err != nil {
  87. utils.FileLog.Info("CompanyReportPermissionClose query other permission Err:%s" + err.Error())
  88. }
  89. //如果还存在使用(不管是正式还是试用)的权限,那么都直接退出当前循环,不冻结用户产品
  90. if count > 0 {
  91. return
  92. }
  93. //冻结该用户产品
  94. _, err = models.CompanyFreeze(companyReportPermission.CompanyId, companyReportPermission.ProductId)
  95. if err != nil {
  96. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";冻结该用户产品", "services:queryAndFreezeCompanyProduct;Err"+err.Error(), utils.EmailSendToUsers)
  97. return
  98. }
  99. //查询用户产品信息
  100. companyProduct, err := models.GetCompanyProduct(companyReportPermission.CompanyId, companyReportPermission.ProductId)
  101. //if err!=nil && err.Error() != utils.ErrNoRow() {
  102. if err != nil {
  103. if err.Error() != utils.ErrNoRow() {
  104. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";查询用户产品信息", fmt.Sprint("services:queryAndFreezeCompanyProduct;Err"+err.Error(), "CompanyId:", companyReportPermission.CompanyId, ";ProductId:", companyReportPermission.ProductId), utils.EmailSendToUsers)
  105. }
  106. //go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";查询用户产品信息", fmt.Sprint("services:queryAndFreezeCompanyProduct;Err"+err.Error(),"CompanyId:",companyReportPermission.CompanyId,";ProductId:",companyReportPermission.ProductId), utils.EmailSendToUsers)
  107. return
  108. }
  109. //添加操作日志
  110. remark := "试用转冻结"
  111. operation := "freeze"
  112. approveContent := "冻结"
  113. err = AddCompanyOperationRecord(companyReportPermission.CompanyId, utils.AdminId, companyReportPermission.ProductId, utils.AdminId, companyProduct.CompanyName,
  114. companyProduct.ProductName, utils.RealName, remark, operation, approveContent, utils.RealName, "", companyProduct.Status)
  115. if err != nil {
  116. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";添加冻结操作日志", "services:queryAndFreezeCompanyProduct;Err"+err.Error(), utils.EmailSendToUsers)
  117. return
  118. }
  119. return
  120. }
  121. //添加用户权限操作日志
  122. func AddCompanyReportPermissionLog(companyReportPermissionId int64, companyId, productId, sysUserId int, productName string, sysUserName, remark, operation, status string) (err error) {
  123. record := models.CompanyReportPermissionLog{
  124. CompanyReportPermissionId: companyReportPermissionId,
  125. CompanyId: companyId,
  126. ProductId: productId,
  127. ProductName: productName,
  128. SysUserId: sysUserId,
  129. SysUserName: sysUserName,
  130. Remark: remark,
  131. Operation: operation,
  132. Status: status,
  133. CreateTime: time.Now(),
  134. }
  135. _, err = models.AddCompanyReportPermissionLog(&record)
  136. if err != nil {
  137. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "services:AddCompanyReportPermissionLog;Err"+err.Error(), utils.EmailSendToUsers)
  138. }
  139. return
  140. }