company_report_permission.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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. // 根据客户id分组相关品种权限
  19. companyReportPermissionGroupMap := make(map[string][]*models.CompanyReportPermission)
  20. for _, v := range items {
  21. companyPermissionList, ok := companyReportPermissionGroupMap[fmt.Sprint(v.CompanyId, "-", v.ProductId)]
  22. if !ok {
  23. companyPermissionList = make([]*models.CompanyReportPermission, 0)
  24. }
  25. companyPermissionList = append(companyPermissionList, v)
  26. companyReportPermissionGroupMap[fmt.Sprint(v.CompanyId, "-", v.ProductId)] = companyPermissionList
  27. }
  28. // 根据客户id分组处理对应的品种权限
  29. for _, companyReportPermissionList := range companyReportPermissionGroupMap {
  30. startDateTime := time.Now()
  31. endDateTime := startDateTime.AddDate(0, 2, 0)
  32. var companyId, productId int
  33. for _, v := range companyReportPermissionList {
  34. companyId = v.CompanyId
  35. productId = v.ProductId
  36. //正式转试用用户产品权限
  37. v.Status = "试用"
  38. v.StartDate = startDateTime.Format(utils.FormatDate)
  39. v.EndDate = endDateTime.Format(utils.FormatDate)
  40. v.ModifyTime = time.Now().Format(utils.FormatDate)
  41. err = v.Update([]string{"Status", "StartDate", "EndDate", "ModifyTime"})
  42. //err = models.CompanyReportPermissionTryOut(v.CompanyReportPermissionId, v.CompanyId, v.ProductId)
  43. if err != nil {
  44. utils.FileLog.Info("CompanyReportPermissionTryOut Err:%s" + err.Error())
  45. continue
  46. }
  47. //添加正式转试用用户产品权限日志
  48. _ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, "正式转试用", "try_out", "正式")
  49. }
  50. //获取客户信息
  51. companyInfo, err := models.GetCompanyProduct(companyId, productId)
  52. if err != nil {
  53. utils.FileLog.Info("CompanyReportPermissionTryOut 查找客户信息 Err:%s" + err.Error())
  54. continue
  55. }
  56. // 添加试用记录
  57. {
  58. companyProductTryOutUpdateLog := &models.CompanyProductTryOutUpdateLog{
  59. Id: 0,
  60. CompanyId: companyId,
  61. ProductId: productId,
  62. Source: "formal_to_try_out",
  63. SellerId: companyInfo.SellerId,
  64. SellerName: companyInfo.SellerName,
  65. StartDate: startDateTime,
  66. EndDate: endDateTime,
  67. RealEndDate: startDateTime,
  68. IsStop: 0,
  69. CreateTime: time.Now(),
  70. }
  71. go models.AddCompanyProductTryOutUpdateLog(companyProductTryOutUpdateLog, companyReportPermissionList)
  72. }
  73. }
  74. return
  75. }
  76. //产品试用权限 -> 产品权限关闭
  77. func CompanyReportPermissionClose(cont context.Context) (err error) {
  78. //fmt.Println("开始进入产品试用权限 -> 产品权限关闭")
  79. endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
  80. items, err := models.GetCompanyReportPermissionNeedClose(endDate)
  81. if err != nil {
  82. utils.FileLog.Info("GetCompanyReportPermissionNeedClose Err:%s" + err.Error())
  83. return
  84. }
  85. //待处理的用户产品权限列表(主要目的是为了多个产品项的去重,避免冻结产品时的多余sql操作)
  86. freezeCompanyProductList := make(map[string]*models.CompanyReportPermission)
  87. for _, v := range items {
  88. //fmt.Println(k, v)
  89. //continue
  90. //查看是否有审批单,如果有审批单,那么就退出当前循环,进入下一循环
  91. count, err := models.GetCompanyApprovalCount(v.CompanyId, v.ProductId)
  92. if err != nil {
  93. continue
  94. }
  95. if count > 0 {
  96. continue
  97. }
  98. //关闭用户产品权限
  99. err = models.CompanyReportPermissionClose(v.CompanyReportPermissionId, v.CompanyId, v.ProductId)
  100. if err != nil {
  101. utils.FileLog.Info("CompanyReportPermissionClose Err:%s" + err.Error())
  102. continue
  103. }
  104. //添加关闭用户产品权限日志
  105. _ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, "试用转关闭", "close", v.Status)
  106. //如果不存在该数据,那么将该数据放入待处理用户产品权限列表
  107. mapKey := fmt.Sprintf("%v_%v", v.CompanyId, v.ProductId)
  108. if _, ok := freezeCompanyProductList[mapKey]; ok == false {
  109. freezeCompanyProductList[mapKey] = v
  110. }
  111. }
  112. //遍历待处理的用户产品权限列表,查询用户产品权限信息并冻结用户产品
  113. for _, companyReportPermission := range freezeCompanyProductList {
  114. go queryAndFreezeCompanyProduct(companyReportPermission)
  115. }
  116. return
  117. }
  118. //查询用户产品权限信息并冻结用户产品
  119. func queryAndFreezeCompanyProduct(companyReportPermission *models.CompanyReportPermission) {
  120. //查询该用户名下是否存在还在使用的权限
  121. count, err := models.GetCompanyReportPermissionCount(companyReportPermission.CompanyId, companyReportPermission.ProductId)
  122. if err != nil {
  123. utils.FileLog.Info("CompanyReportPermissionClose query other permission Err:%s" + err.Error())
  124. }
  125. //如果还存在使用(不管是正式还是试用)的权限,那么都直接退出当前循环,不冻结用户产品
  126. if count > 0 {
  127. return
  128. }
  129. //冻结该用户产品
  130. _, err = models.CompanyFreeze(companyReportPermission.CompanyId, companyReportPermission.ProductId)
  131. if err != nil {
  132. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";冻结该用户产品", "services:queryAndFreezeCompanyProduct;Err"+err.Error(), utils.EmailSendToUsers)
  133. return
  134. }
  135. //查询用户产品信息
  136. companyProduct, err := models.GetCompanyProduct(companyReportPermission.CompanyId, companyReportPermission.ProductId)
  137. //if err!=nil && err.Error() != utils.ErrNoRow() {
  138. if err != nil {
  139. if err.Error() != utils.ErrNoRow() {
  140. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";查询用户产品信息", fmt.Sprint("services:queryAndFreezeCompanyProduct;Err"+err.Error(), "CompanyId:", companyReportPermission.CompanyId, ";ProductId:", companyReportPermission.ProductId), utils.EmailSendToUsers)
  141. }
  142. //go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";查询用户产品信息", fmt.Sprint("services:queryAndFreezeCompanyProduct;Err"+err.Error(),"CompanyId:",companyReportPermission.CompanyId,";ProductId:",companyReportPermission.ProductId), utils.EmailSendToUsers)
  143. return
  144. }
  145. //添加操作日志
  146. remark := "试用转冻结"
  147. operation := "freeze"
  148. approveContent := "冻结"
  149. err = AddCompanyOperationRecord(companyReportPermission.CompanyId, utils.AdminId, companyReportPermission.ProductId, utils.AdminId, companyProduct.CompanyName,
  150. companyProduct.ProductName, utils.RealName, remark, operation, approveContent, utils.RealName, "", companyProduct.Status)
  151. if err != nil {
  152. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";添加冻结操作日志", "services:queryAndFreezeCompanyProduct;Err"+err.Error(), utils.EmailSendToUsers)
  153. return
  154. }
  155. return
  156. }
  157. //添加用户权限操作日志
  158. func AddCompanyReportPermissionLog(companyReportPermissionId int64, companyId, productId, sysUserId int, productName string, sysUserName, remark, operation, status string) (err error) {
  159. record := models.CompanyReportPermissionLog{
  160. CompanyReportPermissionId: companyReportPermissionId,
  161. CompanyId: companyId,
  162. ProductId: productId,
  163. ProductName: productName,
  164. SysUserId: sysUserId,
  165. SysUserName: sysUserName,
  166. Remark: remark,
  167. Operation: operation,
  168. Status: status,
  169. CreateTime: time.Now(),
  170. }
  171. _, err = models.AddCompanyReportPermissionLog(&record)
  172. if err != nil {
  173. go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "services:AddCompanyReportPermissionLog;Err"+err.Error(), utils.EmailSendToUsers)
  174. }
  175. return
  176. }