Sfoglia il codice sorgente

Merge branch 'crm/15.2'

# Conflicts:
#	services/company_contract/company_contract.go
#	services/task.go
Roc 1 anno fa
parent
commit
b1fea7065d
2 ha cambiato i file con 222 aggiunte e 221 eliminazioni
  1. 218 217
      services/company_contract/company_contract.go
  2. 4 4
      services/task.go

+ 218 - 217
services/company_contract/company_contract.go

@@ -492,220 +492,221 @@ func HandleCompanyRenewalRecordV2(cont context.Context) (err error) {
 }
 
 // 续约异常客户数据修复
-//func FixData() {
-//	firstTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.Local)
-//	endTime := time.Date(2024, 2, 21, 1, 0, 0, 0, time.Local)
-//
-//	for currTime := firstTime; currTime.Before(endTime); currTime = currTime.AddDate(0, 0, 1) {
-//		currDate := currTime.Format(utils.FormatDate)
-//		fmt.Printf("结束%s的数据修复\n", currDate)
-//
-//		//// 4:需求是30个自然日后未续约的客户
-//		//{
-//		//	handleFixCompanyRenewalRecord(currTime.AddDate(0, 0, -30-1).Format(utils.FormatDate), currTime, 4)
-//		//}
-//		//// 5:需求是到期日后未续约的客户
-//		//{
-//		//	handleFixCompanyRenewalRecord(currTime.AddDate(0, 0, -1).Format(utils.FormatDate), currTime, 5)
-//		//}
-//
-//		// 即将到期还未到期的统计
-//		// 合同到期前一个月还未续约的客户;
-//		{
-//			handleFixCompanyExpiringRenewalRecord(currTime.AddDate(0, 0, 30-1).Format(utils.FormatDate), currTime, 6)
-//		}
-//		// 7:合同到期前两个月还未续约客户;
-//		{
-//			handleFixCompanyExpiringRenewalRecord(currTime.AddDate(0, 0, 60-1).Format(utils.FormatDate), currTime, 7)
-//		}
-//		// 8:合同到期前3个月还未续约客户;
-//		{
-//			handleFixCompanyExpiringRenewalRecord(currTime.AddDate(0, 0, 90-1).Format(utils.FormatDate), currTime, 8)
-//		}
-//		// 9:合同到期前4个月还未续约客户
-//		{
-//			handleFixCompanyExpiringRenewalRecord(currTime.AddDate(0, 0, 120-1).Format(utils.FormatDate), currTime, 9)
-//		}
-//	}
-//
-//	fmt.Println("end fix")
-//}
-//
-//// handleFixCompanyRenewalRecord
-//// @Description: 修复合同到期后N个月还未续约的客户
-//// @author: Roc
-//// @datetime 2024-02-21 15:29:29
-//// @param endDate string
-//// @param source int
-//// @return err error
-//func handleFixCompanyRenewalRecord(endDate string, currTime time.Time, source int) (err error) {
-//	defer func() {
-//		if err != nil {
-//			//fmt.Println("合同处理 ErrMsg:"+err.Error())
-//			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "合同处理 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-//			go alarm_msg.SendAlarmMsg(fmt.Sprintf("日期:%s;来源%d;处理合同到期后还未续约的记录异常 ErrMsg:%s", currTime.Format(utils.FormatDate), source, err.Error()), 3)
-//		}
-//	}()
-//
-//	// 根据日期获取截止日期是该日期的合同列表
-//	total, list, err := company_contract.GetContractListByEndDate(endDate)
-//	if err != nil {
-//		utils.FileLog.Info("HandleCompanyRenewalRecord GetStartContractListByEndDate Err:%s" + err.Error())
-//		return
-//	}
-//	fmt.Printf("总共%d条数据待处理\n", total)
-//	if total <= 0 {
-//		return
-//	}
-//	companyIdList := make([]int, 0)
-//	for _, companyInfo := range list {
-//		companyIdList = append(companyIdList, companyInfo.CompanyId)
-//	}
-//
-//	// 已经续约了的合同列表
-//	afterContractCompanyIdMap := make(map[int]int)
-//	{
-//		// 根据客户id列表和上一份合同的结束日期,获取已经续约了的合同列表
-//		_, renewalList, tmpErr := company_contract.GetContractListByEndDateAndModifyTime(endDate, endDate, companyIdList)
-//		if tmpErr != nil {
-//			err = tmpErr
-//			utils.FileLog.Info("HandleCompanyRenewalRecord GetContractListByEndDateAndModifyTime Err:%s" + err.Error())
-//			return
-//		}
-//		for _, afterContract := range renewalList {
-//			afterContractCompanyIdMap[afterContract.CompanyId] = afterContract.CompanyId
-//		}
-//	}
-//
-//	// 获取客户列表
-//	companyList, err := models.GetCompanyProductItemListByCompanyIdList(companyIdList, 1)
-//	if err != nil {
-//		utils.FileLog.Info("HandleCompanyRenewalRecord GetCompanyProductListByCompanyIdList Err:%s" + err.Error())
-//		return
-//	}
-//
-//	addList := make([]*models.CompanyRenewalRecord, 0)
-//	for _, v := range companyList {
-//		_, ok := afterContractCompanyIdMap[v.CompanyId]
-//
-//		// 已经续约了,不处理
-//		if ok {
-//			continue
-//		}
-//
-//		var shareSellerId int
-//		var shareSellerName string
-//		if v.IsShare == 1 {
-//			shareSellerId = v.ShareSellerId
-//			shareSellerName = v.ShareSeller
-//		}
-//		addList = append(addList, &models.CompanyRenewalRecord{
-//			Id:              0,
-//			CompanyId:       v.CompanyId,
-//			ProductId:       v.ProductId,
-//			Source:          source,
-//			SellerId:        v.SellerId,
-//			SellerName:      v.SellerName,
-//			ShareSellerId:   shareSellerId,
-//			ShareSellerName: shareSellerName,
-//			CreateTime:      currTime,
-//			ModifyTime:      currTime,
-//		})
-//	}
-//
-//	if len(addList) > 0 {
-//		err = models.MultiAddCompanyRenewalRecord(addList)
-//	}
-//
-//	return
-//}
-//
-//// handleFixCompanyExpiringRenewalRecord
-//// @Description: 修复合同到期前N个月还未续约的客户
-//// @author: Roc
-//// @datetime 2024-02-21 15:29:29
-//// @param endDate string
-//// @param source int
-//// @return err error
-//func handleFixCompanyExpiringRenewalRecord(endDate string, currTime time.Time, source int) (err error) {
-//	currDate := currTime.Format(utils.FormatDate)
-//	defer func() {
-//		if err != nil {
-//			//fmt.Println("合同处理 ErrMsg:"+err.Error())
-//			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "合同处理 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
-//			go alarm_msg.SendAlarmMsg(fmt.Sprintf("日期:%s;来源%d;处理合同到期后还未续约的记录异常 ErrMsg:%s", currDate, source, err.Error()), 3)
-//		}
-//	}()
-//
-//	// 根据日期获取截止日期是该日期的合同列表
-//	total, list, err := company_contract.GetContractListByEndDate(endDate)
-//	if err != nil {
-//		utils.FileLog.Info("HandleCompanyRenewalRecord GetStartContractListByEndDate Err:%s" + err.Error())
-//		return
-//	}
-//	fmt.Printf("总共%d条数据待处理\n", total)
-//	if total <= 0 {
-//		return
-//	}
-//	companyIdList := make([]int, 0)
-//	for _, companyInfo := range list {
-//		companyIdList = append(companyIdList, companyInfo.CompanyId)
-//	}
-//
-//	// 已经续约了的合同列表
-//	afterContractCompanyIdMap := make(map[int]int)
-//	{
-//		// 根据客户id列表和上一份合同的结束日期,获取已经续约了的合同列表
-//		_, renewalList, tmpErr := company_contract.GetContractListByEndDateAndModifyTime(endDate, currDate, companyIdList)
-//		if tmpErr != nil {
-//			err = tmpErr
-//			utils.FileLog.Info("HandleCompanyRenewalRecord GetContractListByEndDateAndModifyTime Err:%s" + err.Error())
-//			return
-//		}
-//		for _, afterContract := range renewalList {
-//			afterContractCompanyIdMap[afterContract.CompanyId] = afterContract.CompanyId
-//		}
-//	}
-//
-//	// 获取客户列表
-//	companyList, err := models.GetCompanyProductItemListByCompanyIdList(companyIdList, 1)
-//	if err != nil {
-//		utils.FileLog.Info("HandleCompanyRenewalRecord GetCompanyProductListByCompanyIdList Err:%s" + err.Error())
-//		return
-//	}
-//
-//	addList := make([]*models.CompanyRenewalRecord, 0)
-//	for _, v := range companyList {
-//		_, ok := afterContractCompanyIdMap[v.CompanyId]
-//
-//		// 已经续约了,不处理
-//		if ok {
-//			continue
-//		}
-//
-//		var shareSellerId int
-//		var shareSellerName string
-//		if v.IsShare == 1 {
-//			shareSellerId = v.ShareSellerId
-//			shareSellerName = v.ShareSeller
-//		}
-//		addList = append(addList, &models.CompanyRenewalRecord{
-//			Id:              0,
-//			CompanyId:       v.CompanyId,
-//			ProductId:       v.ProductId,
-//			Source:          source,
-//			SellerId:        v.SellerId,
-//			SellerName:      v.SellerName,
-//			ShareSellerId:   shareSellerId,
-//			ShareSellerName: shareSellerName,
-//			CreateTime:      currTime,
-//			ModifyTime:      currTime,
-//		})
-//	}
-//
-//	if len(addList) > 0 {
-//		err = models.MultiAddCompanyRenewalRecord(addList)
-//	}
-//
-//	return
-//}
+func FixData() {
+	//firstTime := time.Date(2023, 1, 1, 0, 0, 0, 0, time.Local)
+	firstTime := time.Date(2024, 2, 28, 0, 0, 0, 0, time.Local)
+	endTime := time.Date(2024, 2, 28, 1, 0, 0, 0, time.Local)
+
+	for currTime := firstTime; currTime.Before(endTime); currTime = currTime.AddDate(0, 0, 1) {
+		currDate := currTime.Format(utils.FormatDate)
+		fmt.Printf("结束%s的数据修复\n", currDate)
+
+		// 4:需求是30个自然日后未续约的客户
+		{
+			handleFixCompanyRenewalRecord(currTime.AddDate(0, 0, -30-1).Format(utils.FormatDate), currTime, 4)
+		}
+		// 5:需求是到期日后未续约的客户
+		{
+			handleFixCompanyRenewalRecord(currTime.AddDate(0, 0, -1).Format(utils.FormatDate), currTime, 5)
+		}
+
+		//即将到期还未到期的统计
+		//合同到期前一个月还未续约的客户;
+		{
+			handleFixCompanyExpiringRenewalRecord(currTime.AddDate(0, 0, 30-1).Format(utils.FormatDate), currTime, 6)
+		}
+		// 7:合同到期前两个月还未续约客户;
+		{
+			handleFixCompanyExpiringRenewalRecord(currTime.AddDate(0, 0, 60-1).Format(utils.FormatDate), currTime, 7)
+		}
+		// 8:合同到期前3个月还未续约客户;
+		{
+			handleFixCompanyExpiringRenewalRecord(currTime.AddDate(0, 0, 90-1).Format(utils.FormatDate), currTime, 8)
+		}
+		// 9:合同到期前4个月还未续约客户
+		{
+			handleFixCompanyExpiringRenewalRecord(currTime.AddDate(0, 0, 120-1).Format(utils.FormatDate), currTime, 9)
+		}
+	}
+
+	fmt.Println("end fix")
+}
+
+// handleFixCompanyRenewalRecord
+// @Description: 修复合同到期后N个月还未续约的客户
+// @author: Roc
+// @datetime 2024-02-21 15:29:29
+// @param endDate string
+// @param source int
+// @return err error
+func handleFixCompanyRenewalRecord(endDate string, currTime time.Time, source int) (err error) {
+	defer func() {
+		if err != nil {
+			//fmt.Println("合同处理 ErrMsg:"+err.Error())
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "合同处理 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg(fmt.Sprintf("日期:%s;来源%d;处理合同到期后还未续约的记录异常 ErrMsg:%s", currTime.Format(utils.FormatDate), source, err.Error()), 3)
+		}
+	}()
+
+	// 根据日期获取截止日期是该日期的合同列表
+	total, list, err := company_contract.GetContractListByEndDate(endDate)
+	if err != nil {
+		utils.FileLog.Info("HandleCompanyRenewalRecord GetStartContractListByEndDate Err:%s" + err.Error())
+		return
+	}
+	fmt.Printf("总共%d条数据待处理\n", total)
+	if total <= 0 {
+		return
+	}
+	companyIdList := make([]int, 0)
+	for _, companyInfo := range list {
+		companyIdList = append(companyIdList, companyInfo.CompanyId)
+	}
+
+	// 已经续约了的合同列表
+	afterContractCompanyIdMap := make(map[int]int)
+	{
+		// 根据客户id列表和上一份合同的结束日期,获取已经续约了的合同列表
+		_, renewalList, tmpErr := company_contract.GetContractListByEndDateAndModifyTime(endDate, endDate, companyIdList)
+		if tmpErr != nil {
+			err = tmpErr
+			utils.FileLog.Info("HandleCompanyRenewalRecord GetContractListByEndDateAndModifyTime Err:%s" + err.Error())
+			return
+		}
+		for _, afterContract := range renewalList {
+			afterContractCompanyIdMap[afterContract.CompanyId] = afterContract.CompanyId
+		}
+	}
+
+	// 获取客户列表
+	companyList, err := models.GetCompanyProductItemListByCompanyIdList(companyIdList, 1)
+	if err != nil {
+		utils.FileLog.Info("HandleCompanyRenewalRecord GetCompanyProductListByCompanyIdList Err:%s" + err.Error())
+		return
+	}
+
+	addList := make([]*models.CompanyRenewalRecord, 0)
+	for _, v := range companyList {
+		_, ok := afterContractCompanyIdMap[v.CompanyId]
+
+		// 已经续约了,不处理
+		if ok {
+			continue
+		}
+
+		var shareSellerId int
+		var shareSellerName string
+		if v.IsShare == 1 {
+			shareSellerId = v.ShareSellerId
+			shareSellerName = v.ShareSeller
+		}
+		addList = append(addList, &models.CompanyRenewalRecord{
+			Id:              0,
+			CompanyId:       v.CompanyId,
+			ProductId:       v.ProductId,
+			Source:          source,
+			SellerId:        v.SellerId,
+			SellerName:      v.SellerName,
+			ShareSellerId:   shareSellerId,
+			ShareSellerName: shareSellerName,
+			CreateTime:      currTime,
+			ModifyTime:      currTime,
+		})
+	}
+
+	if len(addList) > 0 {
+		err = models.MultiAddCompanyRenewalRecord(addList)
+	}
+
+	return
+}
+
+// handleFixCompanyExpiringRenewalRecord
+// @Description: 修复合同到期前N个月还未续约的客户
+// @author: Roc
+// @datetime 2024-02-21 15:29:29
+// @param endDate string
+// @param source int
+// @return err error
+func handleFixCompanyExpiringRenewalRecord(endDate string, currTime time.Time, source int) (err error) {
+	currDate := currTime.Format(utils.FormatDate)
+	defer func() {
+		if err != nil {
+			//fmt.Println("合同处理 ErrMsg:"+err.Error())
+			//go utils.SendEmail(utils.APPNAME+"【"+utils.RunMode+"】"+"失败提醒", "合同处理 ErrMsg:"+err.Error(), utils.EmailSendToUsers)
+			go alarm_msg.SendAlarmMsg(fmt.Sprintf("日期:%s;来源%d;处理合同到期后还未续约的记录异常 ErrMsg:%s", currDate, source, err.Error()), 3)
+		}
+	}()
+
+	// 根据日期获取截止日期是该日期的合同列表
+	total, list, err := company_contract.GetContractListByEndDate(endDate)
+	if err != nil {
+		utils.FileLog.Info("HandleCompanyRenewalRecord GetStartContractListByEndDate Err:%s" + err.Error())
+		return
+	}
+	fmt.Printf("总共%d条数据待处理\n", total)
+	if total <= 0 {
+		return
+	}
+	companyIdList := make([]int, 0)
+	for _, companyInfo := range list {
+		companyIdList = append(companyIdList, companyInfo.CompanyId)
+	}
+
+	// 已经续约了的合同列表
+	afterContractCompanyIdMap := make(map[int]int)
+	{
+		// 根据客户id列表和上一份合同的结束日期,获取已经续约了的合同列表
+		_, renewalList, tmpErr := company_contract.GetContractListByEndDateAndModifyTime(endDate, currDate, companyIdList)
+		if tmpErr != nil {
+			err = tmpErr
+			utils.FileLog.Info("HandleCompanyRenewalRecord GetContractListByEndDateAndModifyTime Err:%s" + err.Error())
+			return
+		}
+		for _, afterContract := range renewalList {
+			afterContractCompanyIdMap[afterContract.CompanyId] = afterContract.CompanyId
+		}
+	}
+
+	// 获取客户列表
+	companyList, err := models.GetCompanyProductItemListByCompanyIdList(companyIdList, 1)
+	if err != nil {
+		utils.FileLog.Info("HandleCompanyRenewalRecord GetCompanyProductListByCompanyIdList Err:%s" + err.Error())
+		return
+	}
+
+	addList := make([]*models.CompanyRenewalRecord, 0)
+	for _, v := range companyList {
+		_, ok := afterContractCompanyIdMap[v.CompanyId]
+
+		// 已经续约了,不处理
+		if ok {
+			continue
+		}
+
+		var shareSellerId int
+		var shareSellerName string
+		if v.IsShare == 1 {
+			shareSellerId = v.ShareSellerId
+			shareSellerName = v.ShareSeller
+		}
+		addList = append(addList, &models.CompanyRenewalRecord{
+			Id:              0,
+			CompanyId:       v.CompanyId,
+			ProductId:       v.ProductId,
+			Source:          source,
+			SellerId:        v.SellerId,
+			SellerName:      v.SellerName,
+			ShareSellerId:   shareSellerId,
+			ShareSellerName: shareSellerName,
+			CreateTime:      currTime,
+			ModifyTime:      currTime,
+		})
+	}
+
+	if len(addList) > 0 {
+		err = models.MultiAddCompanyRenewalRecord(addList)
+	}
+
+	return
+}

+ 4 - 4
services/task.go

@@ -53,14 +53,14 @@ func Task() {
 	handleCompanyContract := task.NewTask("handleCompanyContract", "0 1 2 * * *", company_contract.HandleCompanyContract)
 	task.AddTask("每日定时合同处理", handleCompanyContract)
 
-	// 每日续约异常客户信息处理
-	handleCompanyRenewalRecord := task.NewTask("handleCompanyContract", "0 5 2 * * *", company_contract.HandleCompanyRenewalRecordV2)
-	task.AddTask("每日续约异常客户信息处理", handleCompanyRenewalRecord)
-
 	//正式->试用
 	companyTryOut := task.NewTask("companyTryOut", "0 5 2 * * *", CompanyTryOut)
 	task.AddTask("正式->试用", companyTryOut)
 
+	// 每日续约异常客户信息处理(涉及到需要统计当天未续约的,所以需要等正式转试用完成后执行)
+	handleCompanyRenewalRecord := task.NewTask("handleCompanyContract", "0 10 2 * * *", company_contract.HandleCompanyRenewalRecordV2)
+	task.AddTask("每日续约异常客户信息处理", handleCompanyRenewalRecord)
+
 	//试用->冻结
 	companyFreeze := task.NewTask("companyFreeze", "0 10 2 * * *", CompanyFreeze)
 	task.AddTask("试用->冻结", companyFreeze)