浏览代码

补全续约异常客户逻辑

xyxie 1 年之前
父节点
当前提交
538f8d438c
共有 2 个文件被更改,包括 89 次插入1 次删除
  1. 6 0
      models/company/company_renewal_record.go
  2. 83 1
      services/task.go

+ 6 - 0
models/company/company_renewal_record.go

@@ -94,3 +94,9 @@ WHERE
 
 	return
 }
+
+func (item *CompanyRenewalRecord) InsertMulti(items []*CompanyRenewalRecord) (err error) {
+	o := orm.NewOrm()
+	_, err = o.InsertMulti(len(items), items)
+	return
+}

+ 83 - 1
services/task.go

@@ -2,8 +2,10 @@ package services
 
 import (
 	"fmt"
+	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/eta_business"
 	"hongze/hz_crm_api/utils"
+	"time"
 )
 
 func Task() {
@@ -14,7 +16,7 @@ func Task() {
 	go AutoInsertAdminOperateRecordToDB()
 
 	//go FixEtaBusinessCodeEncrypt()
-
+	//InitContractUnusual()
 	fmt.Println("task end")
 }
 
@@ -35,3 +37,83 @@ func FixEtaBusinessCodeEncrypt() {
 		}
 	}
 }
+
+func InitContractUnusual() (err error) {
+	defer func() {
+		if err != nil {
+			fmt.Println("initYearContractUnusual 补全未续约合同记录,Err:" + err.Error())
+			utils.FileLog.Info("initYearContractUnusual 补全未续约合同记录,Err:" + err.Error())
+		}
+	}()
+
+	addList := make([]*company.CompanyRenewalRecord, 0)
+	// 整理时间表
+	startDate, _ := time.ParseInLocation(utils.FormatDate, "2023-01-01", time.Local)
+	endDate, _ := time.ParseInLocation(utils.FormatDate, "2023-12-18", time.Local)
+	for startDate.Before(endDate) || startDate == endDate {
+		tmpC := ` AND end_date = ? AND status = 1 AND contract_type IN ( "新签合同", "续约合同" )  AND product_id = 1`
+		var tmpP []interface{}
+		before61 := startDate.AddDate(0, 0, -61)
+		tmpP = append(tmpP, before61)
+		contractList, e := company.GetCompanyContractList(tmpC, tmpP)
+		if e != nil {
+			err = fmt.Errorf("查询合同列表失败, ERR:%s", e)
+			return
+		}
+		if len(contractList) > 0 {
+			contractMap := make(map[int]*company.CompanyContractResp)
+			for _, v := range contractList {
+				//查询这个合同是否存在续约合同,起始日大于今日,或者截止日
+				contractMap[v.CompanyId] = v
+			}
+			ficcNormalMap := make(map[int]struct{})
+
+			tmpC = ` AND start_date >= ? AND start_date <= ? AND status = 1 AND contract_type="续约合同" AND product_id = 1`
+			tmpP = make([]interface{}, 0)
+			tmpP = append(tmpP, before61, startDate)
+
+			contractNormalList, e := company.GetCompanyContractList(tmpC, tmpP)
+			if e != nil {
+				err = fmt.Errorf("查询合同列表失败, ERR:%s", e)
+				return
+			}
+			for _, v := range contractNormalList {
+				ficcNormalMap[v.CompanyId] = struct{}{}
+			}
+			for _, v := range contractList {
+				companyInfo, tErr := company.GetCompanyById(v.CompanyId)
+				if tErr != nil {
+					err = tErr
+					return
+				}
+				sellers, tErr := company.GetCompanyProductByCompanyIdAndProductId(v.CompanyId, v.ProductId)
+				if tErr != nil {
+					err = tErr
+					return
+				}
+				//查询这个合同是否存在续约合同,起始日大于今日,或者截止日
+				if _, ok := ficcNormalMap[v.CompanyId]; !ok {
+					tmp := &company.CompanyRenewalRecord{
+						CompanyId:       v.CompanyId,
+						ProductId:       v.ProductId,
+						Source:          1,
+						SellerId:        sellers.SellerId,
+						SellerName:      sellers.SellerName,
+						ShareSellerId:   companyInfo.ShareSellerId,
+						ShareSellerName: companyInfo.ShareSeller,
+						CreateTime:      startDate,
+						ModifyTime:      startDate,
+					}
+					addList = append(addList, tmp)
+				}
+			}
+		}
+		startDate = startDate.AddDate(0, 0, 1)
+	}
+	if len(addList) > 0 {
+		item := new(company.CompanyRenewalRecord)
+		err = item.InsertMulti(addList)
+
+	}
+	return
+}