Эх сурвалжийг харах

feat(定时任务):新增每日用户产品权限检测,定时将试用的产品权限状态做变更

Roc 4 жил өмнө
parent
commit
1ca47ff410

+ 1 - 0
.gitignore

@@ -6,3 +6,4 @@
 /*.xlsx
 /go.sum
 /go.mod
+/hongze_task

BIN
hongze_task


+ 3 - 3
models/company_approval.go

@@ -2,9 +2,9 @@ package models
 
 import "rdluck_tools/orm"
 
-func GetCompanyApprovalCount(companyId int) (count int, err error) {
-	sql:=`SELECT COUNT(1) AS count FROM company_approval WHERE company_id=?  AND approve_status='待审批' `
+func GetCompanyApprovalCount(companyId int,productId int) (count int, err error) {
+	sql:=`SELECT COUNT(1) AS count FROM company_approval WHERE company_id = ? AND product_id = ?  AND approve_status='待审批' `
 	o:=orm.NewOrm()
-	err=o.Raw(sql,companyId).QueryRow(&count)
+	err=o.Raw(sql,companyId,productId).QueryRow(&count)
 	return
 }

+ 9 - 0
models/company_product.go

@@ -121,6 +121,15 @@ type CompanyProduct struct {
 	CompanyType      string    `description:"客户类型"`
 }
 
+//获取产品详情
+func GetCompanyProduct(companyId int,productId int)(companyProduct *CompanyProduct,err error){
+	o := orm.NewOrm()
+	sql := `SELECT *
+				FROM company_product WHERE company_id= ? AND product_id = ? `
+	err = o.Raw(sql,companyId,productId).QueryRow(&companyProduct)
+	return
+}
+
 //新增客户产品
 func AddCompanyProduct(item *CompanyProduct) (newId int64, err error) {
 	o := orm.NewOrm()

+ 48 - 0
models/company_report_permission.go

@@ -1,6 +1,7 @@
 package models
 
 import (
+	"hongze/hongze_task/utils"
 	"rdluck_tools/orm"
 	"time"
 )
@@ -8,10 +9,16 @@ import (
 type CompanyReportPermission struct {
 	CompanyReportPermissionId int64     `orm:"column(company_report_permission_id);pk"`
 	CompanyId                 int       `description:"公司id"`
+	ProductId                 int       `description:"产品id"`
+	ProductName               string    `description:"产品名称"`
 	ReportPermissionId        int       `description:"权限id(作废)"`
+	Status          		  string	`description:"状态"`
 	CreatedTime               time.Time `description:"创建时间"`
 	LastUpdatedTime           time.Time `description:"更新时间"`
 	ChartPermissionId         int       `description:"大分类ID"`
+	StartDate       string    `description:"合同开始日期"`
+	EndDate         string    `description:"合同结束日期"`
+	ModifyTime         string    `description:"更新时间"`
 }
 
 func GetCompanyReportPermission(companyId int) (items []*CompanyReportPermission, err error) {
@@ -32,3 +39,44 @@ func ModifyCompanyOldPermission(startDate, endDate, productName string, companyI
 	_,err=o.Raw(sql, startDate, endDate, productId, productName, companyId).Exec()
 	return
 }
+
+
+//获取需要关闭的产品权益
+func GetCompanyReportPermissionNeedClose(endDate string) (items []*CompanyReportPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT *
+          FROM company_report_permission
+			WHERE status='试用' AND end_date<=?`
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+
+	//testSql
+	//sql := `SELECT *
+    //       FROM company_report_permission
+	//		WHERE company_id in (194,197,200,201,202) and status='试用'`
+	//_, err = o.Raw(sql).QueryRows(&items)
+	return
+}
+
+//关闭用户权限
+func CompanyReportPermissionClose(companyReportPermissionId int64,companyId, productId int) (err error) {
+	o := orm.NewOrm()
+	//修改产品权限状态为关闭
+	sql := `UPDATE company_report_permission SET status='关闭',modify_time=NOW() WHERE company_report_permission_id = ? AND company_id= ? AND product_id = ? `
+	_, err = o.Raw(sql, companyReportPermissionId,companyId, productId).Exec()
+	if err != nil {
+		return err
+	}
+	return
+}
+
+//查询是否存在还未过期的产品权限
+func GetCompanyReportPermissionCount(companyId, productId int) (count int,err error) {
+	o := orm.NewOrm()
+	startDate := time.Now().Format(utils.FormatDate)
+	countSql := `SELECT
+			COUNT(company_report_permission_id ) AS COUNT
+			FROM company_report_permission WHERE status in ('试用','正式') AND end_date >= ? AND company_id= ? AND product_id = ? `
+
+	err = o.Raw(countSql, startDate,companyId,productId).QueryRow(&count)
+	return
+}

+ 28 - 0
models/company_report_permission_log.go

@@ -0,0 +1,28 @@
+package models
+
+import (
+	"rdluck_tools/orm"
+	"time"
+)
+
+//用户权限操作日志表
+type CompanyReportPermissionLog struct {
+	Id 							int64	`orm:"column(id);pk"`
+	CompanyReportPermissionId 	int64		`description:"用户权限id"`
+	CompanyId                 	int		`description:"公司id"`
+	ProductId                 	int		`description:"产品id"`
+	ProductName					string	`description:"产品名称"`
+	SysUserId       			int		`description:"操作者id"`
+	SysUserName     			string	`description:"操作者名称"`
+	Remark          			string	`description:"备注"`
+	Operation       			string	`description:"操作"`
+	Status          			string	`description:"状态"`
+	CreateTime               	time.Time	`description:"操作时间"`
+}
+
+//添加用户权限操作日志
+func AddCompanyReportPermissionLog(item *CompanyReportPermissionLog) (lastId int64, err error) {
+	o := orm.NewOrm()
+	lastId, err = o.Insert(item)
+	return
+}

+ 1 - 0
models/db.go

@@ -38,6 +38,7 @@ func init() {
 		new(EdbinfoSendMsgRecord),
 		new(Company),
 		new(CompanyReportPermission),
+		new(CompanyReportPermissionLog),
 		new(DataSourceLongzhong),
 		new(Longzhonginfo),
 		new(Longzhongdata),

+ 3 - 3
services/company_product.go

@@ -24,7 +24,7 @@ func CompanyFreeze() (err error) {
 	}
 	for k, v := range items {
 		fmt.Println(k, v.CompanyId)
-		count, err := models.GetCompanyApprovalCount(v.CompanyId)
+		count, err := models.GetCompanyApprovalCount(v.CompanyId,v.ProductId)
 		if err != nil {
 			return err
 		}
@@ -64,7 +64,7 @@ func CompanyLoss() (err error) {
 	}
 	for k, v := range items {
 		fmt.Println(k, v.CompanyId)
-		count, err := models.GetCompanyApprovalCount(v.CompanyId)
+		count, err := models.GetCompanyApprovalCount(v.CompanyId,v.ProductId)
 		if err != nil {
 			return err
 		}
@@ -103,7 +103,7 @@ func CompanyTryOut() (err error) {
 		return
 	}
 	for k, v := range items {
-		count, err := models.GetCompanyApprovalCount(v.CompanyId)
+		count, err := models.GetCompanyApprovalCount(v.CompanyId,v.ProductId)
 		if err != nil {
 			return err
 		}

+ 119 - 0
services/company_report_permission.go

@@ -0,0 +1,119 @@
+package services
+
+import (
+	"fmt"
+	"hongze/hongze_task/models"
+	"hongze/hongze_task/utils"
+	"time"
+)
+
+
+//产品试用权限  ->  产品权限关闭
+func CompanyReportPermissionClose() (err error) {
+	//fmt.Println("开始进入产品试用权限  ->  产品权限关闭")
+	endDate := time.Now().AddDate(0,0,-1).Format(utils.FormatDate)
+	items, err := models.GetCompanyReportPermissionNeedClose(endDate)
+
+	if err != nil {
+		utils.FileLog.Info("GetCompanyReportPermissionNeedClose Err:%s" + err.Error())
+		return
+	}
+
+	//待处理的用户产品权限列表(主要目的是为了多个产品项的去重,避免冻结产品时的多余sql操作)
+	freezeCompanyProductList := make(map[string]*models.CompanyReportPermission)
+
+	for _, v := range items {
+		//fmt.Println(k, v)
+		//continue
+		//查看是否有审批单,如果有审批单,那么就退出当前循环,进入下一循环
+		count, err := models.GetCompanyApprovalCount(v.CompanyId,v.ProductId)
+		if err != nil {
+			continue
+		}
+		if count > 0 {
+			continue
+		}
+
+		//关闭用户产品权限
+		err = models.CompanyReportPermissionClose(v.CompanyReportPermissionId,v.CompanyId, v.ProductId)
+		if err != nil {
+			utils.FileLog.Info("CompanyReportPermissionClose Err:%s" + err.Error())
+			continue
+		}
+		//添加关闭用户产品权限日志
+		_ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId,v.CompanyId,v.ProductId,utils.AdminId,v.ProductName,utils.RealName,"试用转关闭","close",v.Status)
+
+		//如果不存在该数据,那么将该数据放入待处理用户产品权限列表
+		mapKey := fmt.Sprintf("%v_%v",v.CompanyId,v.ProductId)
+		if _,ok := freezeCompanyProductList[mapKey];ok==false{
+			freezeCompanyProductList[mapKey] = v
+		}
+
+	}
+
+	//遍历待处理的用户产品权限列表,查询用户产品权限信息并冻结用户产品
+	for _,companyReportPermission := range freezeCompanyProductList{
+		go queryAndFreezeCompanyProduct(companyReportPermission)
+	}
+	return
+}
+
+//查询用户产品权限信息并冻结用户产品
+func queryAndFreezeCompanyProduct(companyReportPermission *models.CompanyReportPermission){
+	//查询该用户名下是否存在还在使用的权限
+	count,err := models.GetCompanyReportPermissionCount(companyReportPermission.CompanyId, companyReportPermission.ProductId)
+	if err != nil {
+		utils.FileLog.Info("CompanyReportPermissionClose query other permission Err:%s" + err.Error())
+	}
+	//如果还存在使用(不管是正式还是试用)的权限,那么都直接退出当前循环,不冻结用户产品
+	if count > 0 {
+		return
+	}
+
+	//冻结该用户产品
+	err = models.CompanyFreeze(companyReportPermission.CompanyId, companyReportPermission.ProductId)
+	if err != nil {
+		go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";冻结该用户产品", "services:queryAndFreezeCompanyProduct;Err"+err.Error(), utils.EmailSendToUsers)
+		return
+	}
+
+	//查询用户产品信息
+	companyProduct ,err := models.GetCompanyProduct(companyReportPermission.CompanyId,companyReportPermission.ProductId)
+	//if err!=nil && err.Error() != utils.ErrNoRow() {
+	if err != nil {
+		go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";查询用户产品信息", "services:queryAndFreezeCompanyProduct;Err"+err.Error(), utils.EmailSendToUsers)
+		return
+	}
+	//添加操作日志
+	remark := "试用转冻结"
+	operation := "freeze"
+	approveContent := "冻结"
+	err = AddCompanyOperationRecord(companyReportPermission.CompanyId, utils.AdminId, companyReportPermission.ProductId, utils.AdminId, companyProduct.CompanyName,
+		companyProduct.ProductName, utils.RealName, remark, operation, approveContent, utils.RealName, "", companyProduct.Status)
+	if err != nil {
+		go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode+";添加冻结操作日志", "services:queryAndFreezeCompanyProduct;Err"+err.Error(), utils.EmailSendToUsers)
+		return
+	}
+	return
+}
+
+//添加用户权限操作日志
+func AddCompanyReportPermissionLog(companyReportPermissionId int64,companyId,productId,sysUserId int,productName string,sysUserName,remark,operation,status string) (err error) {
+	record := models.CompanyReportPermissionLog{
+		CompanyReportPermissionId : companyReportPermissionId,
+		CompanyId : companyId,
+		ProductId : productId,
+		ProductName : productName,
+		SysUserId : sysUserId,
+		SysUserName : sysUserName,
+		Remark : remark,
+		Operation : operation,
+		Status : status,
+		CreateTime : time.Now(),
+	}
+	_, err = models.AddCompanyReportPermissionLog(&record)
+	if err != nil{
+		go utils.SendEmail(utils.APPNAME+"失败提醒"+utils.RunMode, "services:AddCompanyReportPermissionLog;Err"+err.Error(), utils.EmailSendToUsers)
+	}
+	return
+}

+ 13 - 0
services/task.go

@@ -44,6 +44,10 @@ func Task() {
 	companyLoss := toolbox.NewTask("companyLoss", "0 20 0 * * *", CompanyLoss)
 	toolbox.AddTask("companyLoss", companyLoss)
 
+	companyReportPermissionClose := toolbox.NewTask("companyReportPermissionClose", "0 30 0 * * *", CompanyReportPermissionClose)
+	toolbox.AddTask("用户产品权限试用-->关闭", companyReportPermissionClose)
+
+
 	//到期提醒
 	companyRemind := toolbox.NewTask("companyRemind", "0 30 08 * * *", CompanyRemind)
 	toolbox.AddTask("companyRemind", companyRemind)
@@ -61,6 +65,15 @@ func Task() {
 	fmt.Println("task end")
 }
 
+func TaskTest(){
+	fmt.Println("The task is start")
+	//companyReportPermissionClose := toolbox.NewTask("companyTryOut", "0 5 0 * * *", CompanyReportPermissionClose)
+	companyReportPermissionClose := toolbox.NewTask("companyReportPermissionClose", "0/30 * * * * *", CompanyReportPermissionClose)
+	toolbox.AddTask("用户产品权限试用-->关闭", companyReportPermissionClose)
+	toolbox.StartTask()
+	fmt.Println("The task is end")
+}
+
 func Task123() {
 	fmt.Println("start")
 	//ReportViewDetail()

+ 1 - 1
utils/constants.go

@@ -20,7 +20,7 @@ const (
 
 const (
 	APPNAME          = "弘则-task"
-	EmailSendToUsers = "317699326@qq.com"
+	EmailSendToUsers = "317699326@qq.com;984198890@qq.com"
 	EmailSendToMe = "317699326@qq.com"
 )