Răsfoiți Sursa

Merge branch 'crm_15.4' of http://8.136.199.33:3000/hongze/hongze_task

xingzai 10 luni în urmă
părinte
comite
aaca2d945c

+ 28 - 4
models/company.go

@@ -67,7 +67,7 @@ func GetCompany() (items []*Company, err error) {
 	return
 }
 
-//待冻结客户
+// 待冻结客户
 type CompanyNeedFreeze struct {
 	CompanyId        int
 	CompanyProductId int
@@ -94,19 +94,19 @@ func GetCompanyNeedLoss(endDate string) (items []*CompanyNeedFreeze, err error)
             FROM  company AS a
 			INNER JOIN company_product AS b ON a.company_id=b.company_id
 			WHERE b.status='冻结'
-			AND b.freeze_end_date<=? `
+			AND b.freeze_end_date<=?  AND b.init_status != '永续'  ` // 权益的永续客户冻结不转流失
 	_, err = o.Raw(sql, endDate).QueryRows(&items)
 	return
 }
 
-//正式
+// 正式
 func GetCompanyNeedTryOut(endDate string) (items []*CompanyNeedFreeze, err error) {
 	o := orm.NewOrm()
 	sql := `SELECT a.company_id,b.company_product_id,b.product_id,a.company_name,b.product_name,b.status
             FROM  company AS a
 			INNER JOIN company_product AS b ON a.company_id=b.company_id
 			WHERE b.status='正式'
-			AND b.end_date<=? `
+			AND b.end_date<=?  AND b.init_status != '永续'  ` //权益的永续客户正式不转试用
 	_, err = o.Raw(sql, endDate).QueryRows(&items)
 	return
 }
@@ -138,3 +138,27 @@ func ModifyCompanyIndustry(industryId, companyId int, industryName string) (err
 	_, err = o.Raw(sql, industryId, industryName, companyId).Exec()
 	return
 }
+
+// 权益 正式->永续
+func GetCompanyNeedTryOutXClassRai(endDate string) (items []*CompanyNeedFreeze, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT a.company_id,b.company_product_id,b.product_id,a.company_name,b.product_name,b.status
+            FROM  company AS a
+			INNER JOIN company_product AS b ON a.company_id=b.company_id
+			WHERE b.status='正式'
+			AND b.end_date<=?  AND b.init_status = '永续'  ` //权益的永续客户正式不转试用
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}
+
+// 权益 永续->冻结
+func GetCompanyNeedFreezeXClassRai(endDate string) (items []*CompanyNeedFreeze, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT a.company_id,b.company_product_id,b.product_id,a.company_name,b.product_name,b.status
+            FROM  company AS a
+			INNER JOIN company_product AS b ON a.company_id=b.company_id
+			WHERE b.status='永续'
+			AND b.end_date<=?   AND b.init_status = '永续'  `
+	_, err = o.Raw(sql, endDate).QueryRows(&items)
+	return
+}

+ 86 - 0
models/company_product.go

@@ -79,6 +79,54 @@ func CompanyFreeze(companyId, productId int) (companyReportPermissionList []*Com
 	return
 }
 
+func CompanyFreezeXClassRai(companyId, productId int) (companyReportPermissionList []*CompanyReportPermission, err error) {
+	o := orm.NewOrm()
+	freezeStartDate := time.Now().Format(utils.FormatDate)
+	freezeEndDate := time.Now().AddDate(0, 3, 0).Format(utils.FormatDate)
+
+	//FICC客户冻结期由三个月改为两个月
+	//if productId == 1 {
+	//	freezeEndDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
+	//}
+
+	// 权益客户 冻结期 改为两个月
+	if productId == 2 {
+		freezeEndDate = time.Now().AddDate(0, 2, 0).Format(utils.FormatDate)
+	}
+
+	//客户产品 状态 变更
+	sql := `UPDATE company_product SET status='冻结',is_formal=0,is_suspend=0,freeze_time=NOW(),modify_time=NOW(),start_date=?,end_date=?,freeze_start_date=?,freeze_end_date=?,try_stage=1 WHERE company_id=? AND product_id=? `
+	_, err = o.Raw(sql, freezeStartDate, freezeEndDate, freezeStartDate, freezeEndDate, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+
+	//客户产品权限 状态 变更
+	//获取需要变更的 客户产品权限
+	oldPermissionEndDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	sql = `SELECT *
+          FROM company_report_permission
+			WHERE status='永续' AND end_date<=? AND company_id=? AND product_id=? `
+	total, err := o.Raw(sql, oldPermissionEndDate, companyId, productId).QueryRows(&companyReportPermissionList)
+	if err != nil {
+		return
+	}
+
+	if total > 0 {
+		sql = `UPDATE company_report_permission SET status='关闭',modify_time=NOW() 
+			WHERE status='永续' AND end_date<=? AND company_id=? AND product_id=? `
+		_, err = o.Raw(sql, oldPermissionEndDate, companyId, productId).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	//客户状态变更
+	sql = `UPDATE company SET type=3,last_updated_time=NOW(),start_date=?,end_date=? WHERE company_id=? `
+	_, err = o.Raw(sql, freezeStartDate, freezeEndDate, companyId).Exec()
+	return
+}
+
 func CompanyLoss(companyId, productId int) (err error) {
 	o := orm.NewOrm()
 	//客户产品状态变更
@@ -142,6 +190,44 @@ func CompanyTryOut(companyId, productId int) (companyReportPermissionList []*Com
 	return
 }
 
+// 权益正式转X类试用(永续)
+func CompanyTryOutXClassRai(companyId, productId int) (companyReportPermissionList []*CompanyReportPermission, err error) {
+	o := orm.NewOrm()
+	startDate := time.Now().Format(utils.FormatDate)
+	endDate := time.Now().AddDate(0, 3, 0).Format(utils.FormatDate)
+
+	//客户产品 状态 变更
+	sql := `UPDATE company_product SET status='永续',start_date=?,end_date=?,modify_time=NOW(),try_out_time=NOW(),renewal_reason="",package_type=0,try_stage=1 WHERE company_id=? AND product_id=? `
+	_, err = o.Raw(sql, startDate, endDate, companyId, productId).Exec()
+	if err != nil {
+		return
+	}
+
+	//客户产品权限 状态 变更
+	//获取需要变更的 客户产品权限
+	oldPermissionEndDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	sql = `SELECT *
+          FROM company_report_permission
+			WHERE status='正式' AND end_date<=? AND company_id=? AND product_id=? `
+	total, err := o.Raw(sql, oldPermissionEndDate, companyId, productId).QueryRows(&companyReportPermissionList)
+	if err != nil {
+		return
+	}
+	if total > 0 {
+		sql = `UPDATE company_report_permission SET status='永续',start_date=?,end_date=?,modify_time=NOW() 
+			WHERE status='正式' AND end_date<=? AND company_id=? AND product_id=? `
+		_, err = o.Raw(sql, startDate, endDate, oldPermissionEndDate, companyId, productId).Exec()
+		if err != nil {
+			return
+		}
+	}
+
+	//客户状态变更
+	sql = `UPDATE company SET type=5,last_updated_time=NOW(),start_date=?,end_date=? WHERE company_id=? `
+	_, err = o.Raw(sql, startDate, endDate, companyId).Exec()
+	return
+}
+
 func GetCompanyOldDataSync() (items []*Company, err error) {
 	sql := `SELECT * FROM company WHERE company_id NOT IN(
 			SELECT company_id FROM company_product

+ 3 - 3
services/company_contract/company_contract.go

@@ -136,9 +136,9 @@ func HandleCompanyContract(cont context.Context) (err error) {
 		{
 			cygx.YanXuanCompanyApproval(v.CompanyId)
 			cygx.ActivitySpecialCompanyApproval(v.CompanyId, v.CompanyContractId, companyProduct.CompanyName) //审批通过的时候专项调研次数更新
-			cygx.HandleAllocationCompanyContractByYanXuan(v.CompanyContractId)                                //如果合同只有研选的时候,自动处理派点
-			cygx.HandleCompanyContractPackageDifference(v.CompanyContractId)                                  //更新与上一份合同的金额的对比 '增加套餐','减少套餐','维持套餐'
-			cygx.HandleCompanyContractPermissionContractType(v.CompanyContractId)                             //更新合同权限表中的权限名称,以及对应的行业权限类型(行业新签、行业续约)
+			//cygx.HandleAllocationCompanyContractByYanXuan(v.CompanyContractId)                                //如果合同只有研选的时候,自动处理派点
+			cygx.HandleCompanyContractPackageDifference(v.CompanyContractId)      //更新与上一份合同的金额的对比 '增加套餐','减少套餐','维持套餐'
+			cygx.HandleCompanyContractPermissionContractType(v.CompanyContractId) //更新合同权限表中的权限名称,以及对应的行业权限类型(行业新签、行业续约)
 		}
 	}
 

+ 109 - 0
services/company_product.go

@@ -767,3 +767,112 @@ func StaticCompanyTryDay(cont context.Context) (err error) {
 
 	return
 }
+
+// 权益正式客户自动转X类试用(永续)->合同到期未续约转X类试用(永续)
+func CompanyTryOutXClassRai(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "正式客户自动试用->合同到期未续约转试用 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	items, err := models.GetCompanyNeedTryOutXClassRai(endDate)
+	if err != nil {
+		fmt.Println("GetCompanyNeedTryOutRai Err:" + err.Error())
+		utils.FileLog.Info("GetCompanyNeedTryOutRai Err:%s" + err.Error())
+		return
+	}
+	for k, v := range items {
+		count, err := models.GetCompanyApprovalCount(v.CompanyId, v.ProductId)
+		if err != nil {
+			return err
+		}
+		if count > 0 {
+			continue
+		}
+		fmt.Println(k, v.CompanyId)
+
+		// 更新专项调研点数,需要在状态变更之前
+		if v.ProductId == 2 {
+			cygx.ActivitySpecialCompanyTryOutReduce(v.CompanyId)
+		}
+		//客户正式转试用
+		companyReportPermissionList, err := models.CompanyTryOutXClassRai(v.CompanyId, v.ProductId)
+		if err != nil {
+			utils.FileLog.Info("CompanyTryOutXClassRai Err:%s" + err.Error())
+			return err
+		}
+		//新增操作记录
+		{
+			remark := "正式转X类试用"
+			operation := "try_out_x_class"
+			approveContent := "X类试用"
+			AddCompanyOperationRecord(v.CompanyId, utils.AdminId, v.ProductId, utils.AdminId, v.CompanyName,
+				v.ProductName, utils.RealName, remark, operation, approveContent, approveContent, "", v.Status)
+
+			//新增 客户产品权限 正式 转 试用 的日志
+			for _, v := range companyReportPermissionList {
+				_ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, remark, operation, v.Status)
+			}
+		}
+
+		{
+			//正式转试用,删除不续约归因内容
+			company.DeleteCompanNoRenewedAscribe(v.CompanyId, v.ProductId)
+		}
+
+		//正式转试用定时任务更新研选扣点
+		{
+			cygx.YanXuanCompanyCompanyTryOut(v.CompanyId)
+		}
+	}
+	return
+}
+
+// 客户自动冻结->X类试用(永续)三个月结束后,进入冻结
+func CompanyFreezeXClassRai(cont context.Context) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "X类试用(永续)三个月结束后,进入冻结ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+		}
+	}()
+	endDate := time.Now().AddDate(0, 0, -1).Format(utils.FormatDate)
+	items, err := models.GetCompanyNeedFreezeXClassRai(endDate)
+	if err != nil {
+		fmt.Println("GetCompanyNeedFreezeXClassRai Err:" + err.Error())
+		utils.FileLog.Info("GetCompanyNeedFreezeXClassRai Err:%s" + err.Error())
+		return
+	}
+	fmt.Println(len(items))
+	//return
+	for k, v := range items {
+		fmt.Println(k, v.CompanyId)
+		count, err := models.GetCompanyApprovalCount(v.CompanyId, v.ProductId)
+		if err != nil {
+			return err
+		}
+		if count > 0 {
+			continue
+		}
+		//试用转冻结
+		companyReportPermissionList, err := models.CompanyFreezeXClassRai(v.CompanyId, v.ProductId)
+		if err != nil {
+			utils.FileLog.Info("CompanyFreeze Err:%s" + err.Error())
+			return err
+		}
+		//新增操作记录
+		{
+			remark := "X类试用转冻结"
+			operation := "x_class_freeze"
+			approveContent := ""
+			go AddCompanyOperationRecord(v.CompanyId, utils.AdminId, v.ProductId, utils.AdminId, v.CompanyName,
+				v.ProductName, utils.RealName, remark, operation, approveContent, approveContent, "", v.Status)
+
+			//新增 客户产品权限 试用 转 冻结 的日志
+			for _, v := range companyReportPermissionList {
+				_ = AddCompanyReportPermissionLog(v.CompanyReportPermissionId, v.CompanyId, v.ProductId, utils.AdminId, v.ProductName, utils.RealName, remark, operation, v.Status)
+			}
+		}
+	}
+	return
+}

+ 8 - 0
services/task.go

@@ -70,6 +70,14 @@ func Task() {
 	companyLoss := task.NewTask("companyLoss", "0 20 2 * * *", CompanyLoss)
 	task.AddTask("冻结->流失", companyLoss)
 
+	//权益正式->X类试用(永续)
+	//companyTryOutXClassRai := task.NewTask("companyTryOutXClassRai", "0 25 2 * * *", CompanyTryOutXClassRai)
+	//task.AddTask("权益正式->X类试用(永续)", companyTryOutXClassRai)
+
+	//权益X类试用(永续)->冻结
+	companyFreezeXClassRai := task.NewTask("companyFreezeXClassRai", "0 30 2 * * *", CompanyFreezeXClassRai)
+	task.AddTask("权益X类试用(永续)->冻结", companyFreezeXClassRai)
+
 	//用户产品权限正式-->试用
 	companyReportPermissionTryOut := task.NewTask("companyReportPermissionTryOut", "0 30 2 * * *", CompanyReportPermissionTryOut)
 	task.AddTask("用户产品权限正式-->试用", companyReportPermissionTryOut)