Parcourir la source

Merge branch 'crm/crm_15.4.1' of http://8.136.199.33:3000/hongze/hz_crm_api

xingzai il y a 8 mois
Parent
commit
df5d42c8d1

+ 6 - 1
controllers/cygx/contract_allocation.go

@@ -317,6 +317,10 @@ func (this *ContractAllocationController) CompanyContractList() {
 				v.MoneyPoint = mapMoneyPoint[v.CompanyContractId]
 				v.PermissionName = mappermissionName[v.CompanyContractId]
 				v.IsGray = mapIsGray[v.CompanyContractId]
+				if v.ContractType == "打分派点" {
+					quarter, _ := utils.GetQuarterStrStartDatesInRange(v.StartDate, v.EndDate)
+					v.Quarter = strings.Replace(quarter, ",", "+", -1)
+				}
 			}
 		}
 	}
@@ -562,7 +566,7 @@ func (this *ContractAllocationController) CompanyContracDetail() {
 			continue
 		}
 	}
-	fmt.Println(mapPermissionNameHave)
+	//fmt.Println(mapPermissionNameHave)
 	resp.Money = contractItem.Money / 10000
 	//有研选时,对研选套餐类型做文案处理
 	respItemYx := new(cygx.AllocationPermissionListResp)        // 研选订阅
@@ -713,6 +717,7 @@ func (this *ContractAllocationController) CompanyContracDetail() {
 	resp.IsGray = mapIsGray[companyContractId]
 	//resp.List = respList
 	resp.CompanyContractId = companyContractId
+	resp.AllocationType = contractItem.AllocationType
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 44 - 0
controllers/cygx/enter_score.go

@@ -365,6 +365,47 @@ func (this *EnterScoreController) EnterScoreUpdate() {
 		return
 	}
 
+	var condition string
+	var pars []interface{}
+
+	condition += " AND  company_id =? AND end_date BETWEEN ? AND ?  "
+	pars = append(pars, companyId, startDate, endDate)
+	if enterScoreId > 0 {
+		condition += " AND  enter_score_id != ?  "
+		pars = append(pars, enterScoreId)
+	}
+
+	total, err := cygx.GetCygxEnterScoreCount(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+
+	if total > 0 {
+
+		listEnterScore, err := cygx.GetCygxEnterScoreList(condition, pars, 0, 1)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		var startDateEnter, endDateEnter string
+		for _, v := range listEnterScore {
+			startDateEnter = v.StartDate
+			endDateEnter = v.EndDate
+		}
+
+		quarter, err := utils.GetQuarterStrStartDatesInRangeHaveYear(startDateEnter, endDateEnter)
+		if err != nil {
+			br.Msg = "操作失败"
+			br.ErrMsg = "获取已录过分的季度失败,Err:" + err.Error()
+			return
+		}
+		br.Msg = quarter + "季度已录过分,请核实"
+		return
+	}
+
 	companyProduct, err := company.GetCompanyProductByCompanyIdAndProductId(companyId, utils.COMPANY_PRODUCT_RAI_ID)
 	if err != nil {
 		br.Msg = "查询客户产品信息失败"
@@ -490,6 +531,8 @@ func (this *EnterScoreController) EnterScoreUpdate() {
 		br.ErrMsg = "操作失败Err:" + err.Error()
 		return
 	}
+
+	go cygxService.UpdateCygxallocationCompanyContractByEnterScore(itemsPermission, itemsResearcher, startDate, endDate, companyId, sysUser) //权益永续客户录分自动派点
 	br.Ret = 200
 	br.Success = true
 	br.IsAddLog = true
@@ -573,6 +616,7 @@ func (this *EnterScoreController) EnterScoreList() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+	condition += ` ORDER BY enter_score_id DESC  `
 	list, err := cygx.GetCygxEnterScoreList(condition, pars, startSize, pageSize)
 	if err != nil {
 		br.Msg = "获取失败"

+ 1 - 0
models/company/company_apply.go

@@ -117,6 +117,7 @@ type CompanyContractDetail struct {
 	RaiPackageType    int       `description:"权益套餐类型: 0-无; 1-70w套餐; 2-45w套餐"`
 	Source            string    `description:"合同来源:上传附件, 系统合同"`
 	SourceTag         string    `description:"合同来源标签:非标合同,标准合同"`
+	AllocationType    int       `description:"分配方式,0手动分配,1X录分之后自动分配,默认0"`
 	PermissionList    []*PermissionLookList
 }
 

+ 8 - 0
models/company/company_contract.go

@@ -299,6 +299,14 @@ func UpdateCompanyContractPackageDifference(packageDifference string, companyCon
 	return
 }
 
+// 更新合同类型
+func UpdateCompanyContractType(contractType string, companyContractId int) (err error) {
+	o := orm.NewOrm()
+	sql := `UPDATE company_contract SET contract_type = ?  WHERE company_contract_id=? `
+	_, err = o.Raw(sql, contractType, companyContractId).Exec()
+	return
+}
+
 // GetLastContractListByEndDate 通过最近一份合同的日期获取早于该合同的最晚一份合同
 func GetLastContractListByEndDate(companyId, productId int, endDate string) (item *CompanyContract, err error) {
 	o := orm.NewOrm()

+ 93 - 0
models/cygx/allocation_company_contract.go

@@ -2,6 +2,7 @@ package cygx
 
 import (
 	"github.com/beego/beego/v2/client/orm"
+	"hongze/hz_crm_api/utils"
 	"time"
 )
 
@@ -152,6 +153,97 @@ func AddAndUpdateCygxAllocationCompanyContract(items []*CygxAllocationCompanyCon
 	return
 }
 
+// 更新派点信息
+func AddAndUpdateCygxAllocationCompanyContractRai(items []*CygxAllocationCompanyContract, itemsPermission []*CygxAllocationCompanyContractPermission, companyContractId []int) (err error) {
+	o := orm.NewOrmUsingDB("hz_cygx")
+	to, err := o.Begin()
+	if err != nil {
+		return
+	}
+	defer func() {
+		if err != nil {
+			_ = to.Rollback()
+		} else {
+			_ = to.Commit()
+		}
+	}()
+
+	//组合研究员派点日志结构体
+	var itemsLog []*CygxAllocationCompanyContractLog
+	for _, v := range items {
+		item := new(CygxAllocationCompanyContractLog)
+		item.CompanyContractId = v.CompanyContractId
+		item.AdminId = v.AdminId
+		item.CompanyContractId = v.CompanyContractId
+		item.AdminName = v.AdminName
+		item.RealName = v.RealName
+		item.ChartPermissionName = v.ChartPermissionName
+		item.Proportion = v.Proportion
+		item.Money = v.Money
+		item.CreateTime = time.Now()
+		item.ModifyTime = time.Now()
+		itemsLog = append(itemsLog, item)
+	}
+
+	//组合行业派点日志结构体
+	var itemsPermissionLog []*CygxAllocationCompanyContractPermissionLog
+	for _, v := range itemsPermission {
+		item := new(CygxAllocationCompanyContractPermissionLog)
+		item.CompanyContractId = v.CompanyContractId
+		item.AdminId = v.AdminId
+		item.CompanyContractId = v.CompanyContractId
+		item.AdminName = v.AdminName
+		item.ChartPermissionName = v.ChartPermissionName
+		item.Proportion = v.Proportion
+		item.Money = v.Money
+		item.MoneyAvg = v.MoneyAvg
+		item.CreateTime = time.Now()
+		item.ModifyTime = time.Now()
+		itemsPermissionLog = append(itemsPermissionLog, item)
+	}
+	lenIds := len(companyContractId)
+	//删除原有的研究员派点信息
+	sql := `DELETE FROM cygx_allocation_company_contract WHERE company_contract_id IN (` + utils.GetOrmInReplace(lenIds) + `)`
+	_, err = to.Raw(sql, companyContractId).Exec()
+	if err != nil {
+		return
+	}
+	//删除原有的行业派点信息
+	sql = `	DELETE FROM cygx_allocation_company_contract_permission WHERE company_contract_id IN (` + utils.GetOrmInReplace(lenIds) + `)`
+	_, err = to.Raw(sql, companyContractId).Exec()
+	if err != nil {
+		return
+	}
+
+	//批量添加研究员派点信息
+	_, err = to.InsertMulti(len(items), items)
+	if err != nil {
+		return
+	}
+
+	_, err = to.InsertMulti(len(itemsLog), itemsLog)
+	if err != nil {
+		return
+	}
+
+	//批量添加行业派点信息
+	_, err = to.InsertMulti(len(itemsPermission), itemsPermission)
+	if err != nil {
+		return
+	}
+
+	_, err = to.InsertMulti(len(itemsPermissionLog), itemsPermissionLog)
+	if err != nil {
+		return
+	}
+
+	ow := orm.NewOrm()
+	sqlW := `UPDATE company_contract SET is_allocation=1 ,allocation_type = 1      WHERE company_contract_id IN  (` + utils.GetOrmInReplace(lenIds) + `)`
+	_, err = ow.Raw(sqlW, companyContractId).Exec()
+
+	return
+}
+
 type UpdateAllocationCompanyContractReq struct {
 	CompanyContractId int `description:"合同ID"`
 	List              []*AllocationPermissionListResp
@@ -163,6 +255,7 @@ type CygxAllocationCompanyContractDetailResp struct {
 	TotalPointsContent string  `description:"总点数描述"`
 	IsGray             bool    `description:"是否置灰"`
 	IsXClass           bool    `description:"是否是X类试用客户"`
+	AllocationType     int     `description:"分配方式,0手动分配,1X录分之后自动分配,默认0"`
 	List               []*AllocationPermissionListResp
 }
 

+ 1 - 0
models/cygx/company_contract.go

@@ -26,6 +26,7 @@ type CompanyContractResp struct {
 	ContractId        int     `description:"合同唯一id"`
 	MoneyPoint        float64 `description:"派点金额"`
 	PermissionName    string  `description:"权限名"`
+	Quarter           string  `description:"季度(X类试用客户使用)"`
 }
 
 // 增量客户统计报表返回类

+ 1 - 0
services/company_apply/company_approval.go

@@ -421,6 +421,7 @@ func Approved(approvalRecord *contract.ContractApprovalRecord, opUser *system.Ad
 				//客户研选行业转正时(王芳审批通过),模板消息提醒汪洋
 				services.AddCompanyApprovalMessageWangYang(recordInfo.CompanyId, recordInfo.CompanyContractId, recordInfo.ApplyRealName, companyInfo.CompanyName)
 				cygxService.YanXuanCompanyApproval(recordInfo.CompanyId, recordInfo.CompanyContractId) //研选审批通过的时候研选扣点更新
+				cygxService.HandleCompanyContractTypeByRaiXClass(recordInfo.CompanyContractId)         //所有x类试用转正的合同都记为 :打分派点
 				//cygxService.HandleAllocationCompanyContractByYanXuan(recordInfo.CompanyContractId)     //如果合同只有研选的时候,自动处理派点
 				cygxService.HandleCompanyContractPackageDifference(recordInfo.CompanyContractId)      // 更新与上一份合同的金额的对比 '增加套餐','减少套餐','维持套餐'
 				cygxService.HandleCompanyContractPermissionContractType(recordInfo.CompanyContractId) // 更新合同权限表中的权限名称,以及对应的行业权限类型(行业新签、行业续约)

+ 151 - 0
services/cygx/contract_allocation.go

@@ -6,6 +6,7 @@ import (
 	"hongze/hz_crm_api/models"
 	"hongze/hz_crm_api/models/company"
 	"hongze/hz_crm_api/models/cygx"
+	"hongze/hz_crm_api/models/system"
 	"hongze/hz_crm_api/services/alarm_msg"
 	"hongze/hz_crm_api/utils"
 	"strconv"
@@ -449,6 +450,39 @@ func HandleCompanyContractPackageDifference(companyContractId int) (err error) {
 
 }
 
+// HandleCompanyContractTypeByRaiXClass 所有x类试用转正的合同都记为 :打分派点
+func HandleCompanyContractTypeByRaiXClass(companyContractId int) (err error) {
+	defer func() {
+		if err != nil {
+			go alarm_msg.SendAlarmMsg(fmt.Sprint(" 所有x类试用转正的合同都记为 :打分派点失败,HandleCompanyContractTypeByRaiXClass Err:", err.Error(), "companyContractId", companyContractId), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	condition = " AND company_contract_id = ?  "
+	pars = append(pars, companyContractId)
+	detail, e := company.GetCompanyContracDetail(condition, pars)
+	if e != nil {
+		err = errors.New("GetCompanyContracDetail,detail Err: " + e.Error())
+		return
+	}
+	companyProduct, e := company.GetCompanyProductByCompanyIdAndProductId(detail.CompanyId, utils.COMPANY_PRODUCT_RAI_ID)
+	if e != nil {
+		err = errors.New("GetCompanyProductByCompanyIdAndProductId Err: " + e.Error())
+		return
+	}
+	//权益非永续客户不处理
+	if companyProduct.Status != utils.COMPANY_STATUS_FOREVER {
+		return
+	}
+	e = company.UpdateCompanyContractType("打分派点", companyContractId)
+	if e != nil {
+		err = errors.New("UpdateCompanyContractType, Err: " + e.Error())
+		return
+	}
+	return
+}
+
 // HandleCompanyContractPermissionContractType 更新合同权限表中的权限名称,以及对应的行业权限类型(行业新签、行业续约)
 func HandleCompanyContractPermissionContractType(companyContractId int) (err error) {
 	defer func() {
@@ -801,3 +835,120 @@ func UpdateInitAvg(companyContractId int) {
 	//err = cygx.AddAndUpdateCygxAllocationCompanyContractInit(items, itemsPermission, companyContractId)
 	//fmt.Println(err)
 }
+
+// 权益的合同录分之后自动派点
+func UpdateCygxallocationCompanyContractByEnterScore(itemsPermissionEnterScore []*cygx.CygxEnterScorePermission, itemsResearcher []*cygx.CygxEnterScoreResearcher, startDate, endDate string, companyId int, sysUser *system.Admin) {
+	var err error
+	defer func() {
+		if err != nil {
+			fmt.Println(err)
+			go alarm_msg.SendAlarmMsg("权益的合同录分之后自动派点失败 UpdateCygxallocationCompanyContractByEnterScore ErrMsg:"+err.Error(), 2)
+
+		}
+	}()
+	var condition string
+	var pars []interface{}
+	condition = " AND status = 1  AND  product_id = 2  AND  company_id  = ?  AND  start_date <= ? AND   end_date <= ? "
+	pars = append(pars, companyId, startDate, endDate)
+	companyContractList, e := company.GetCompanyContractList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyContractList, Err: " + e.Error())
+		return
+	}
+	if len(companyContractList) == 0 {
+		err = nil
+		return
+	}
+	var companyContractIds []int
+	//var companyContractIdMoney []float64 // 合同对应的金额
+	for _, v := range companyContractList {
+		companyContractIds = append(companyContractIds, v.CompanyContractId)
+	}
+
+	fmt.Println("companyContractIds", companyContractIds)
+	var items []*cygx.CygxAllocationCompanyContract
+	var itemsPermission []*cygx.CygxAllocationCompanyContractPermission
+
+	var totalProportionPermission float64 //计算总占比
+	for _, v := range itemsPermissionEnterScore {
+		totalProportionPermission += v.Proportion
+	}
+
+	//var totalResearcher float64 //计算研究员的总占比
+	//for _, v := range itemsResearcher {
+	//	totalResearcher += v.Proportion
+	//}
+
+	for _, vContract := range companyContractList {
+		for _, v := range itemsPermissionEnterScore {
+			itemPermission := new(cygx.CygxAllocationCompanyContractPermission)
+			itemPermission.CompanyContractId = vContract.CompanyContractId
+			itemPermission.AdminId = sysUser.AdminId
+			itemPermission.AdminName = sysUser.RealName
+			itemPermission.Proportion = v.Proportion / totalProportionPermission * 100 // 占比转换
+			itemPermission.Money = v.Proportion * vContract.Money / 10000 / 100        // 单位转成万
+			itemPermission.MoneyAvg = vContract.Money / 6                              // 目前6个行业
+			itemPermission.ChartPermissionName = v.ChartPermissionName
+			itemPermission.CreateTime = time.Now()
+			itemPermission.ModifyTime = time.Now()
+			itemsPermission = append(itemsPermission, itemPermission)
+		}
+		for _, v := range itemsResearcher {
+			item := new(cygx.CygxAllocationCompanyContract)
+			item.CompanyContractId = vContract.CompanyContractId
+			item.AdminId = sysUser.AdminId
+			item.AdminName = sysUser.RealName
+			item.Proportion = v.Proportion / totalProportionPermission * 100 // 占比转换
+			item.Money = v.Proportion * vContract.Money / 10000 / 100        // 单位转成万
+			item.RealName = v.RealName
+			item.ChartPermissionName = v.ChartPermissionName
+			item.CreateTime = time.Now()
+			item.ModifyTime = time.Now()
+			items = append(items, item)
+		}
+	}
+	e = cygx.AddAndUpdateCygxAllocationCompanyContractRai(items, itemsPermission, companyContractIds)
+	if e != nil {
+		err = errors.New("AddAndUpdateCygxAllocationCompanyContractRai, Err: " + e.Error())
+		return
+	}
+	return
+
+}
+
+//func init15_4_1() {
+//	UpdateCygxallocationCompanyContractByEnterScoreInit()
+//	//"SELECT  *  FROM company_contract WHERE   company_id IN (SELECT  company_id   FROM company_product WHERE  product_id = 2  AND init_status = '永续' ) AND  product_id = 2 ;"
+//}
+
+func UpdateCygxallocationCompanyContractByEnterScoreInit() {
+	var condition string
+	var pars []interface{}
+	listEnterScore, err := cygx.GetCygxEnterScoreList(condition, pars, 0, 999)
+	if err != nil {
+		fmt.Println(err)
+		return
+	}
+	for _, v := range listEnterScore {
+		fmt.Println("v.EnterScoreId", v.EnterScoreId)
+		listPermission, err := cygx.GetCygxEnterScorePermissionListById(v.EnterScoreId)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+
+		listResearcher, err := cygx.GeCygxEnterScoreResearcherListById(v.EnterScoreId)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+		sysUser, err := system.GetSysUserById(v.AdminId)
+		if err != nil {
+			fmt.Println(err)
+			return
+		}
+		go UpdateCygxallocationCompanyContractByEnterScore(listPermission, listResearcher, v.StartDate, v.EndDate, v.CompanyId, sysUser)
+	}
+	fmt.Println("END")
+	return
+}