company_report_permission.go 5.0 KB

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