Browse Source

no message

xingzai 1 year ago
parent
commit
8c498b9042

+ 7 - 7
controllers/statistic_company_merge.go

@@ -223,6 +223,7 @@ func (this *StatisticCompanyMergerController) MergeCompanyList() {
 		pars1 = append(pars1, startDate, endDate)
 		condition1 += ` AND a.contract_type = ? `
 		pars1 = append(pars1, "新签合同")
+		condition1 += ` AND a.is_best_new = 1  `
 		newCompanyTotal, err = company.GetIncrementalNewCompanyProductMergeCount(condition1, pars1)
 		if err != nil && err.Error() != utils.ErrNoRow() {
 			br.Msg = "获取失败"
@@ -260,13 +261,7 @@ func (this *StatisticCompanyMergerController) MergeCompanyList() {
 		pars1 = append(pars1, startDate, endDate)
 		condition1 += ` AND a.contract_type = ? `
 		pars1 = append(pars1, "续约合同")
-
-		//续约的客户才会查询
-		if packageDifference != "" {
-			condition1 += ` AND a.package_difference = ? `
-			pars1 = append(pars1, packageDifference)
-		}
-
+		condition1 += ` AND a.is_best_new = 1  `
 		////额外条件(续约合同的起始日期包含在所选时间段内且不包含在新签合同存续期内的客户)
 		//pars1 = append(pars1, endDate)
 
@@ -279,6 +274,11 @@ func (this *StatisticCompanyMergerController) MergeCompanyList() {
 		renewalCompanyTotal = total
 
 		if dataType == "续约客户" {
+			//续约的客户才会查询
+			if packageDifference != "" {
+				condition1 += ` AND a.package_difference = ? `
+				pars1 = append(pars1, packageDifference)
+			}
 			//列表数据数量
 			total, err := company.GetIncrementalRenewalCompanyProductMergeCount(condition1, pars1)
 			if err != nil && err.Error() != utils.ErrNoRow() {

+ 57 - 0
models/company/company_contract_merge.go

@@ -21,6 +21,7 @@ type CompanyContractMerge struct {
 	CompanyContractIdGroup string    `description:"表company_contract合并的 company_contract_id"`
 	ChartPermissionName    string    `description:"权限类目名称"`
 	PackageDifference      string    `description:"和上一份合同的区别"`
+	IsBestNew              int       `description:"是否是最新的一条数据"`
 }
 
 type CompanyContractMergeResp struct {
@@ -58,6 +59,12 @@ type CompanyContractMergeDetailResp struct {
 	PermissionName         string    `description:"权限名"`
 }
 
+func AddCompanyContractMerge(item *CompanyContractMerge) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}
+
 // MultiAddCompanyContractMerge 批量添加合同合并之后的数据
 func MultiAddCompanyContractMerge(items []*CompanyContractMerge) (err error) {
 	if len(items) == 0 {
@@ -68,6 +75,40 @@ func MultiAddCompanyContractMerge(items []*CompanyContractMerge) (err error) {
 	return
 }
 
+// 修改
+func UpdateCompanyContractMerge(item *CompanyContractMerge) (err error) {
+	o := orm.NewOrm()
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+	updateParams := make(map[string]interface{})
+	updateParams["EndDate"] = item.EndDate
+	updateParams["Money"] = item.Money
+	updateParams["CompanyContractIdGroup"] = item.CompanyContractIdGroup
+	updateParams["PackageDifference"] = item.PackageDifference
+	updateParams["IsBestNew"] = item.IsBestNew
+	updateParams["ModifyTime"] = item.ModifyTime
+	ptrStructOrTableName := "company_contract_merge"
+	whereParam := map[string]interface{}{"company_contract_merge_id": item.CompanyContractMergeId}
+	qs := to.QueryTable(ptrStructOrTableName)
+	for expr, exprV := range whereParam {
+		qs = qs.Filter(expr, exprV)
+	}
+	_, err = qs.Update(updateParams)
+	if err != nil {
+		return
+	}
+	return
+}
+
 // GetIncrementalNewCompanyProductMergeCount 获取增量客户产品报表列表统计数据(根据合同来展示)
 func GetIncrementalNewCompanyProductMergeCount(condition string, pars []interface{}) (total int, err error) {
 	o := orm.NewOrm()
@@ -111,3 +152,19 @@ func GetCompanyContractMergeDetail(condition string, pars []interface{}) (item *
 	err = o.Raw(sql, pars).QueryRow(&item)
 	return
 }
+
+// UpdateCompanyContractMergeIsBestNew 更改 is_best_new 状态
+func UpdateCompanyContractMergeIsBestNew(isBestNew, companyId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE company_contract_merge SET is_best_new = ?  WHERE company_id=? `
+	_, err = o.Raw(sql, isBestNew, companyId).Exec()
+	return
+}
+
+// UpdateCompanyContractMergeIsBestNew 更改 is_best_new 状态
+func UpdateCompanyContractMergeIsBestNewto1(companyContractMergeId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE company_contract_merge SET is_best_new = 1  WHERE company_contract_merge_id=? `
+	_, err = o.Raw(sql, companyContractMergeId).Exec()
+	return
+}

+ 3 - 2
services/company_apply/company_approval.go

@@ -391,7 +391,7 @@ func Approved(approvalRecord *contract.ContractApprovalRecord, opUser *system.Ad
 				// 处理权益客户的身份信息()
 				cygxService.UpdateCygxCompanyUserType(recordInfo.CompanyContractId)
 
-				if recordInfo.ApplyMethod == 1{
+				if recordInfo.ApplyMethod == 1 {
 					//获取合同信息
 					contractInfo, tmpErr := company.GetCompanyContractDetail(recordInfo.CompanyId, recordInfo.ProductId, recordInfo.CompanyContractId)
 					if tmpErr != nil {
@@ -420,7 +420,8 @@ func Approved(approvalRecord *contract.ContractApprovalRecord, opUser *system.Ad
 				//客户研选行业转正时(王芳审批通过),模板消息提醒汪洋
 				services.AddCompanyApprovalMessageWangYang(recordInfo.CompanyId, recordInfo.CompanyContractId, recordInfo.ApplyRealName, companyInfo.CompanyName)
 
-				go cygxService.YanXuanCompanyApproval(recordInfo.CompanyId) //研选审批通过的时候研选扣点更新
+				go cygxService.YanXuanCompanyApproval(recordInfo.CompanyId)                          //研选审批通过的时候研选扣点更新
+				go services.AddCompanyContractMergeByCompanyContractId(recordInfo.CompanyContractId) //进行合同合并
 
 			}
 		}()

+ 159 - 1
services/company_contract.go

@@ -5,6 +5,7 @@ import (
 	"fmt"
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
 	"strconv"
 	"strings"
@@ -57,7 +58,7 @@ func InitCompanyContractMerge() {
 					items = append(items, item)
 				} else {
 					//续约的合同开始时间是否<上一次合同记录的结束时间 且间隔>6个月(180)天,那么就对两个合同进行合并
-					if item.StartDate.AddDate(0, 0, +180).Before(items[len(items)-1].EndDate) && item.EndDate.After(items[len(items)-1].EndDate) {
+					if item.StartDate.AddDate(0, 0, +180).Before(items[len(items)-1].EndDate) && item.StartDate.Before(items[len(items)-1].EndDate) {
 						items[len(items)-1].Money += v.Money
 						items[len(items)-1].EndDate = v.EndDate
 						items[len(items)-1].CompanyContractIdGroup += strconv.Itoa(v.CompanyContractId) + ","
@@ -82,6 +83,9 @@ func InitCompanyContractMerge() {
 	}
 
 	var contractMergeitems []*company.CompanyContractMerge
+
+	var companyIds []int
+	mapcompanyIds := make(map[int]bool)
 	for _, v := range items {
 		item := new(company.CompanyContractMerge)
 		item.ContractType = v.ContractType
@@ -97,6 +101,12 @@ func InitCompanyContractMerge() {
 		item.CreateTime = time.Now()
 		item.ModifyTime = time.Now()
 		contractMergeitems = append(contractMergeitems, item)
+
+		if !mapcompanyIds[v.CompanyId] {
+			companyIds = append(companyIds, v.CompanyId)
+			mapcompanyIds[v.CompanyId] = true
+		}
+
 	}
 
 	err = company.MultiAddCompanyContractMerge(contractMergeitems)
@@ -104,8 +114,28 @@ func InitCompanyContractMerge() {
 		fmt.Println(err)
 		return
 	}
+
+	for _, v := range companyIds {
+		var condition string
+		var pars []interface{}
+
+		fmt.Println(v)
+		condition = " AND company_id = ?  ORDER BY start_date DESC   LIMIT  1  "
+		pars = append(pars, v)
+		contractMergeInfo, err := company.GetCompanyContractMergeDetail(condition, pars)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+		err = company.UpdateCompanyContractMergeIsBestNewto1(contractMergeInfo.CompanyContractMergeId)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+	}
 }
 
+// GetCompanyContractPermissionNameMapById 获取合并之后的合同所对应的权限种类名称
 func GetCompanyContractPermissionNameMapById(mapCompamy map[int]string) (mapContractResp map[int]string, err error) {
 	if len(mapCompamy) == 0 {
 		return
@@ -213,3 +243,131 @@ func GetCompanyContractPermissionNameMapById(mapCompamy map[int]string) (mapCont
 	}
 	return
 }
+
+//
+//func init() {
+//	AddCompanyContractMergeByCompanyContractId(1187)
+//}
+
+// AddCompanyContractMergeByCompanyContractId 通过合同ID对合同进行合并
+func AddCompanyContractMergeByCompanyContractId(companyContractId int) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go alarm_msg.SendAlarmMsg("通过合同ID对合同进行合并,失败"+err.Error()+fmt.Sprint("companyContractId", companyContractId), 2)
+		}
+	}()
+	contractInfo, e := company.GetCompanyContractDetailByCompanyContractId(companyContractId)
+	if e != nil {
+		err = errors.New("GetCompanyContractDetailByCompanyContractId, Err: " + e.Error())
+		return
+	}
+
+	var condition string
+	var pars []interface{}
+
+	condition = " AND company_id = ?  ORDER BY start_date DESC   LIMIT  1  "
+	pars = append(pars, contractInfo.CompanyId)
+	contractMergeInfo, e := company.GetCompanyContractMergeDetail(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyContractMergeDetail, Err: " + e.Error())
+		return
+	}
+	fmt.Println(contractMergeInfo)
+	e = company.UpdateCompanyContractMergeIsBestNew(0, contractInfo.CompanyId)
+	if e != nil {
+		err = errors.New("UpdateCompanyContractMergeIsBestNew, Err: " + e.Error())
+		return
+	}
+	item := new(company.CompanyContractMerge)
+	item.ContractType = contractInfo.ContractType
+	item.ProductId = contractInfo.ProductId
+	item.ProductName = contractInfo.ProductName
+	item.CompanyId = contractInfo.CompanyId
+	item.CompanyProductId = contractInfo.CompanyProductId
+	item.IsBestNew = 1
+	item.CreateTime = time.Now()
+	item.ModifyTime = time.Now()
+	//如果不存在就是新的数据
+	if contractMergeInfo == nil {
+		item.StartDate = contractInfo.StartDate
+		item.EndDate = contractInfo.EndDate
+		item.Money = contractInfo.Money
+		item.CompanyContractIdGroup = strconv.Itoa(companyContractId)
+		e = company.AddCompanyContractMerge(item)
+		if e != nil {
+			err = errors.New("AddCompanyContractMerge, Err: " + e.Error())
+			return
+		}
+	} else {
+		newStartDate := utils.StrDateToDate(contractInfo.StartDate)
+		//newEndDate := utils.StrDateToDate(contractInfo.EndDate)
+		oldEndDate := utils.StrDateToDate(contractMergeInfo.EndDate)
+
+		//续约的合同开始时间是否<上一次合同记录的结束时间 且间隔>6个月(180)天,那么就对两个合同进行合并
+		if newStartDate.AddDate(0, 0, +180).Before(oldEndDate) && newStartDate.Before(oldEndDate) {
+			item.Money = contractInfo.Money + contractMergeInfo.Money
+			item.EndDate = contractInfo.EndDate
+			item.CompanyContractIdGroup = contractMergeInfo.CompanyContractIdGroup + "," + strconv.Itoa(companyContractId)
+			//如果是续约合同就对比跟上一份合并之后的合同的差距
+			if item.ContractType == "续约合同" {
+				pars = make([]interface{}, 0)
+				condition = " AND company_id = ?  AND company_contract_merge_id != ?   ORDER BY start_date DESC   LIMIT  1  "
+				pars = append(pars, contractMergeInfo.CompanyId, contractMergeInfo.CompanyContractMergeId)
+				detailPrevious, e := company.GetCompanyContractMergeDetail(condition, pars)
+				if e != nil {
+					err = errors.New("GetCompanyContractMergeDetail, Err: " + e.Error())
+					return
+				}
+				if item.Money > detailPrevious.Money {
+					item.PackageDifference = "增加套餐"
+				}
+				if item.Money == detailPrevious.Money {
+					item.PackageDifference = "维持套餐"
+				}
+				if item.Money < detailPrevious.Money {
+					item.PackageDifference = "减少套餐"
+				}
+			}
+			item.CompanyContractMergeId = contractMergeInfo.CompanyContractMergeId
+			e = company.UpdateCompanyContractMerge(item)
+			if e != nil {
+				err = errors.New("AddCompanyContractMerge, Err: " + e.Error())
+				return
+			}
+		} else {
+			item.StartDate = contractInfo.StartDate
+			item.EndDate = contractInfo.EndDate
+			item.Money = contractInfo.Money
+			item.CompanyContractIdGroup = strconv.Itoa(companyContractId)
+			//如果是续约合同就对比跟上一份合并之后的合同的差距
+			if item.ContractType == "续约合同" {
+				pars = make([]interface{}, 0)
+				condition = " AND company_id = ?  AND company_contract_merge_id != ?   ORDER BY start_date DESC   LIMIT  1  "
+				pars = append(pars, contractMergeInfo.CompanyId, contractMergeInfo.CompanyContractMergeId)
+				detailPrevious, e := company.GetCompanyContractMergeDetail(condition, pars)
+				if e != nil {
+					err = errors.New("GetCompanyContractMergeDetail, Err: " + e.Error())
+					return
+				}
+				if item.Money > detailPrevious.Money {
+					item.PackageDifference = "增加套餐"
+				}
+				if item.Money == detailPrevious.Money {
+					item.PackageDifference = "维持套餐"
+				}
+				if item.Money < detailPrevious.Money {
+					item.PackageDifference = "减少套餐"
+				}
+			}
+			e = company.AddCompanyContractMerge(item)
+			if e != nil {
+				err = errors.New("AddCompanyContractMerge, Err: " + e.Error())
+				return
+			}
+		}
+	}
+
+	return
+}