Эх сурвалжийг харах

Merge branch 'crm/crm_14.3' of http://8.136.199.33:3000/hongze/hz_crm_api into debug

xingzai 1 жил өмнө
parent
commit
f49b77bf75

+ 77 - 36
controllers/cygx/contract_allocation.go

@@ -10,6 +10,7 @@ import (
 	"hongze/hz_crm_api/models/contract"
 	"hongze/hz_crm_api/models/cygx"
 	"hongze/hz_crm_api/models/system"
+	cygxService "hongze/hz_crm_api/services/cygx"
 	"hongze/hz_crm_api/utils"
 	"strconv"
 	"strings"
@@ -105,6 +106,7 @@ func getQueryParams(condition string, pars []interface{}, sysUser *system.Admin,
 // @Param   ContractType   query   string  false       "合同类型,枚举值:“,`新签合同`,`续约合同`,`补充协议`"
 // @Param   FormalType   query   string  false     "转正类型,枚举值:“,`标准`,`非标`"
 // @Param   IsExport   query   bool  false       "是否导出excel,默认是false"
+// @Param   ResearcherRealName   query   string  false       "研究员姓名"
 // @Param   IsAllocation   query   int  false       "派点状态: -1-默认全部; 0-未派点; 1-已派点"
 // @Success 200 {object}  cygx.CompanyContractListResp
 // @router /allocation/company_contract_list [get]
@@ -131,6 +133,7 @@ func (this *ContractAllocationController) CompanyContractList() {
 	keyword := this.GetString("Keyword")
 	startDate := this.GetString("StartDate")
 	endDate := this.GetString("EndDate")
+	researcherRealName := this.GetString("ResearcherRealName")
 	isAllocation, _ := this.GetInt("IsAllocation", -1) // CRM 13.9
 	if startDate == "" {
 		startDate = "2015-01-01"
@@ -195,7 +198,35 @@ func (this *ContractAllocationController) CompanyContractList() {
 
 	//默认只查询权益 2023-06-01 之后的合同
 	condition += ` AND c.product_id = ?  AND a.start_date > ? `
-	pars = append(pars, 2, "2023-06-01")
+	pars = append(pars, 2, "2023-01-01")
+
+	mapMoneyPoint := make(map[int]float64)
+	//研究员姓名查询
+	if researcherRealName != "" {
+		var conditionAllocation string
+		var parsAllocation []interface{}
+
+		conditionAllocation = " AND  real_name = ? "
+		parsAllocation = append(parsAllocation, researcherRealName)
+		allocationCompanyContractList, err := cygx.GetCygxAllocationCompanyContractList(conditionAllocation, parsAllocation)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,GetCygxAllocationCompanyContractListErr:" + err.Error()
+			return
+		}
+		var companyContractIds []int
+		for _, v := range allocationCompanyContractList {
+			companyContractIds = append(companyContractIds, v.CompanyContractId)
+			mapMoneyPoint[v.CompanyContractId] = v.Money
+		}
+		lenCon := len(companyContractIds)
+		if lenCon == 0 {
+			condition += ` AND a.company_contract_id = 0 `
+		} else {
+			condition += ` AND a.company_contract_id IN   (` + utils.GetOrmInReplace(lenCon) + `)`
+			pars = append(pars, companyContractIds)
+		}
+	}
 
 	var list []*cygx.CompanyContractResp
 
@@ -212,6 +243,7 @@ func (this *ContractAllocationController) CompanyContractList() {
 		br.ErrMsg = "获取失败,Err:" + err.Error()
 		return
 	}
+	mapCompamy := make(map[int]string)
 	listLen := len(list)
 	if listLen == 0 {
 		list = make([]*cygx.CompanyContractResp, 0)
@@ -226,31 +258,42 @@ func (this *ContractAllocationController) CompanyContractList() {
 				v.FormalType = "非标"
 			}
 			contractCodes = append(contractCodes, v.ContractCode)
-		}
+			mapCompamy[v.CompanyId] = strconv.Itoa(v.CompanyContractId)
+
+			lencontractCodes := len(contractCodes)
+			if lencontractCodes > 0 {
+				//获取标准合同的ID,这里上面的查询已经关联了三张表,拆分吧。。。
+				condition = ""
+				joinStr := ""
+				pars = make([]interface{}, 0)
+				condition = " AND  a.contract_code  IN (" + utils.GetOrmInReplace(lencontractCodes) + ") "
+				pars = append(pars, contractCodes)
+				listContract, err := contract.GetContractList(condition, joinStr, pars, 0, lencontractCodes)
+				if err != nil {
+					br.Msg = "获取合同列表失败!"
+					br.ErrMsg = "获取合同列表失败,Err:" + err.Error()
+					return
+				}
+				mapContractCode := make(map[string]int)
+				for _, v := range listContract {
+					mapContractCode[v.ContractCode] = v.ContractId
+				}
 
-		lencontractCodes := len(contractCodes)
-		if lencontractCodes > 0 {
-			//获取标准合同的ID,这里上面的查询已经关联了三张表,拆分吧。。。
-			condition = ""
-			joinStr := ""
-			pars = make([]interface{}, 0)
-			condition = " AND  a.contract_code  IN (" + utils.GetOrmInReplace(lencontractCodes) + ") "
-			pars = append(pars, contractCodes)
-			listContract, err := contract.GetContractList(condition, joinStr, pars, 0, lencontractCodes)
-			if err != nil {
-				br.Msg = "获取合同列表失败!"
-				br.ErrMsg = "获取合同列表失败,Err:" + err.Error()
-				return
-			}
-			mapContractCode := make(map[string]int)
-			for _, v := range listContract {
-				mapContractCode[v.ContractCode] = v.ContractId
-			}
-			for _, v := range list {
-				v.ContractId = mapContractCode[v.ContractCode]
+				//合并合同所对应的权限
+				mappermissionName, err := cygxService.GetCompanyContractPermissionNameMapById(mapCompamy)
+				if err != nil {
+					br.Msg = "获取失败"
+					br.ErrMsg = "获取失败,Err:" + err.Error()
+					return
+				}
+
+				for _, v := range list {
+					v.ContractId = mapContractCode[v.ContractCode]
+					v.MoneyPoint = mapMoneyPoint[v.CompanyContractId]
+					v.PermissionName = mappermissionName[v.CompanyId]
+				}
 			}
 		}
-
 	}
 
 	page := paging.GetPaging(currentIndex, pageSize, total)
@@ -326,7 +369,6 @@ func (this *ContractAllocationController) CompanyContracDetail() {
 		hasMap[p.ChartPermissionId] = p
 	}
 	checkItems := make([]*company.PermissionLookItem, 0)
-	// PS:本来想把这个移到循环外面去优化一下...但是发现有指针引用变量被改掉的问题, BUG太多了改不完了先这样吧=_=!
 	raiPermissions, e := company.GetPermissionLookItemsExt("2", utils.COMPANY_PRODUCT_RAI_NAME)
 	if e != nil {
 		br.Msg = "获取失败"
@@ -356,17 +398,6 @@ func (this *ContractAllocationController) CompanyContracDetail() {
 		}
 		checkItems = append(checkItems, n)
 	}
-	//plist.Items = checkItems
-	//plist.ClassifyName = utils.COMPANY_PRODUCT_RAI_NAME
-	//contractPermissionList = append(contractPermissionList, plist)
-
-	//// CRM8.8-权限主客观合并
-	//newPermissionLookList := contractService.HandleEquityContractPermissionList(contractPermissionList)
-	//for _, v := range newPermissionLookList {
-	//	for _, v2 := range v.Items {
-	//		fmt.Println(v2.PermissionName)
-	//	}
-	//}
 
 	resp.Money = contractItem.Money / 10000
 	//有研选时,对研选套餐类型做文案处理
@@ -380,6 +411,9 @@ func (this *ContractAllocationController) CompanyContracDetail() {
 			moneyYx = 5
 		}
 		resp.TotalPointsContent = fmt.Sprint(resp.Money, "W,", "其中", moneyYx, "w默认归属买方研选,请对剩余", resp.Money-moneyYx, "w按照100%进行比值分配")
+		if showDetail {
+			resp.TotalPointsContent = fmt.Sprint(resp.Money, "W")
+		}
 		resp.Money = resp.Money - moneyYx
 		respItemYx.Proportion = moneyYx
 		respItemYx.ChartPermissionName = utils.CHART_PERMISSION_NAME_MF_YANXUAN
@@ -493,6 +527,13 @@ func (this *ContractAllocationController) CompanyContracUpdate() {
 		return
 	}
 
+	contractItem, err := company.GetCompanyContractById(companyContractId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取合同信息失败,Err:" + err.Error()
+		return
+	}
+
 	list := req.List
 	var items []*cygx.CygxAllocationCompanyContract
 	var itemsPermission []*cygx.CygxAllocationCompanyContractPermission
@@ -697,7 +738,7 @@ func (this *ContractAllocationController) CompanyContractStatistics() {
 		item.GroupProportion += "%"
 
 		// 部门占比
-		item.DepartmentProportion = fmt.Sprint(mapPermissionMoney[k] / totalMoney * 100)
+		item.DepartmentProportion = fmt.Sprint(mapPermissionMoney[k] / totalMoney * 100 / float64(len(mapPermissionUser[k])))
 		if item.DepartmentProportion == "" {
 			item.DepartmentProportion = "0"
 		}

+ 5 - 0
models/cygx/allocation_company_contract.go

@@ -142,6 +142,10 @@ func AddAndUpdateCygxAllocationCompanyContract(items []*CygxAllocationCompanyCon
 		return
 	}
 
+	ow := orm.NewOrm()
+	sqlW := `UPDATE company_contract SET is_allocation=1   WHERE company_contract_id=? `
+	_, err = ow.Raw(sqlW, companyContractId).Exec()
+
 	return
 }
 
@@ -154,6 +158,7 @@ type CygxAllocationCompanyContractDetailResp struct {
 	CompanyContractId  int     `description:"合同ID"`
 	Money              float64 `description:"金额(单位万)"`
 	TotalPointsContent string  `description:"总点数描述"`
+	IsGray             bool    `description:"是否置灰"`
 	List               []*AllocationPermissionListResp
 }
 

+ 2 - 0
models/cygx/company_contract.go

@@ -24,6 +24,8 @@ type CompanyContractResp struct {
 	FormalType        string  `description:"转正类型,枚举值: 标准、非标"`
 	IsGray            bool    `description:"是否置灰"`
 	ContractId        int     `description:"合同唯一id"`
+	MoneyPoint        float64 `description:"派点金额"`
+	PermissionName    string  `description:"权限名"`
 }
 
 // 增量客户统计报表返回类

+ 120 - 0
services/cygx/contract_allocation.go

@@ -0,0 +1,120 @@
+package cygx
+
+import (
+	"errors"
+	"hongze/hz_crm_api/models"
+	"hongze/hz_crm_api/models/company"
+	"hongze/hz_crm_api/utils"
+	"strconv"
+	"strings"
+)
+
+// GetCompanyContractPermissionNameMapById 获取合并之后的合同所对应的权限种类名称
+func GetCompanyContractPermissionNameMapById(mapCompamy map[int]string) (mapContractResp map[int]string, err error) {
+	//return
+	if len(mapCompamy) == 0 {
+		return
+	}
+	var condition string
+	var pars []interface{}
+
+	mapContracIdCompanyId := make(map[string]int) //建立合同ID与公司ID的map对应关系
+
+	var companyContractIdGroup string //多个合同ID
+	for k, v := range mapCompamy {
+		companyContractIdGroup += v + ","
+		sliceContract := strings.Split(v, ",")
+		for _, compamyContracId := range sliceContract {
+			mapContracIdCompanyId[compamyContracId] = k
+		}
+	}
+
+	companyContractIdGroup = strings.TrimRight(companyContractIdGroup, ",")
+	condition += " AND  company_contract_id IN (" + companyContractIdGroup + ")"
+	companyContractList, e := company.GetCompanyContractList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyContractList, Err: " + e.Error())
+		return
+	}
+
+	permissionList, e := models.GetChartPermissionList()
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetChartPermissionList, Err: " + e.Error())
+		return
+	}
+	mappermissionName := make(map[int]string)
+	for _, v := range permissionList {
+		mappermissionName[v.ChartPermissionId] = v.Remark
+	}
+
+	mapContractIdPerssion := make(map[string]string) //单个合同ID所对应的套餐或者权限名称
+	for _, v := range companyContractList {
+		if v.RaiPackageType == 1 {
+			mapContractIdPerssion[strconv.Itoa(v.CompanyContractId)] = "70w套餐"
+		}
+		if v.RaiPackageType == 2 {
+			mapContractIdPerssion[strconv.Itoa(v.CompanyContractId)] = "45w套餐"
+		}
+	}
+
+	companyContractPermissionList, e := company.GetCompanyContractPermissionList(condition, pars)
+	if e != nil && e.Error() != utils.ErrNoRow() {
+		err = errors.New("GetCompanyContractPermissionList, Err: " + e.Error())
+		return
+	}
+	for _, v := range companyContractPermissionList {
+		//如果开通的不是整个套餐,那么就做单独的子权限处理
+		if strings.Count(mapContractIdPerssion[strconv.Itoa(v.CompanyContractId)], "w套餐") == 0 {
+			if v.ChartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+				if v.ExpensiveYx == 1 {
+					mapContractIdPerssion[strconv.Itoa(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(5w),"
+				} else {
+					mapContractIdPerssion[strconv.Itoa(v.CompanyContractId)] += utils.CHART_PERMISSION_NAME_MF_YANXUAN + "(3w),"
+				}
+			} else {
+				mapContractIdPerssion[strconv.Itoa(v.CompanyContractId)] += mappermissionName[v.ChartPermissionId] + ","
+			}
+		}
+	}
+
+	//合并客观权限
+	for k, v := range mapContractIdPerssion {
+		perssionName := v
+		if strings.Count(v, utils.YI_YAO_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "医药(主观)", "医药", -1)
+			perssionName = strings.Replace(perssionName, "医药(客观)", "", -1)
+		}
+		if strings.Count(v, utils.XIAO_FEI_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "消费(主观)", "消费", -1)
+			perssionName = strings.Replace(perssionName, "消费(客观)", "", -1)
+		}
+		if strings.Count(v, utils.KE_JI_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "科技(主观)", "科技", -1)
+			perssionName = strings.Replace(perssionName, "科技(客观)", "", -1)
+		}
+		if strings.Count(v, utils.ZHI_ZAO_NAME) == 2 {
+			perssionName = strings.Replace(perssionName, "智造(主观)", "智造", -1)
+			perssionName = strings.Replace(perssionName, "智造(客观)", "", -1)
+		}
+		perssionName = strings.TrimRight(perssionName, ",")
+		mapContractIdPerssion[k] = perssionName
+	}
+	mapContractResp = make(map[int]string, 0)
+	for k, v := range mapContractIdPerssion {
+		mapContractResp[mapContracIdCompanyId[k]] += v + ","
+	}
+
+	//过滤多余的","
+	for k, v := range mapContractResp {
+		sliceName := strings.Split(v, ",")
+		var nameArr []string
+		for _, vName := range sliceName {
+			if vName == "" {
+				continue
+			}
+			nameArr = append(nameArr, vName)
+		}
+		mapContractResp[k] = strings.Join(nameArr, ",")
+	}
+	return
+}