Browse Source

合同登记-小套餐品种;完善合同列表导出

hsun 2 years ago
parent
commit
e59358364f

+ 67 - 11
controller/contract/register.go

@@ -684,6 +684,10 @@ func (rg *RegisterController) Export(c *gin.Context) {
 		return
 	}
 	permissionLen := len(permissionList)
+	permissionNameIdMap := make(map[string]int)
+	for i := range permissionList {
+		permissionNameIdMap[permissionList[i].PermissionName] = permissionList[i].ChartPermissionId
+	}
 
 	// 获取套餐服务
 	//serviceList, e := fms.GetContractServiceTemplateMapByProductId(crm.CompanyProductFicc)
@@ -708,6 +712,7 @@ func (rg *RegisterController) Export(c *gin.Context) {
 
 	// 套餐/开票/到款列表
 	serviceMap := make(map[int][]*fms.ContractService)
+	serviceChartPermissionsMap := make(map[int][]int)
 	invoiceMap := make(map[int][]*fms.ContractInvoice)
 	paymentMap := make(map[int][]*fms.ContractInvoice)
 	maxInvoice := 0
@@ -729,10 +734,16 @@ func (rg *RegisterController) Export(c *gin.Context) {
 				serviceMap[cid] = make([]*fms.ContractService, 0)
 			}
 			serviceMap[cid] = append(serviceMap[cid], serviceList[i])
+			// 小套餐权限
+			if serviceChartPermissionsMap[cid] == nil {
+				serviceChartPermissionsMap[cid] = make([]int, 0)
+			}
+			if serviceList[i].ChartPermissionIds != "" {
+				ids := utils.JoinStr2IntArr(serviceList[i].ChartPermissionIds, ",")
+				serviceChartPermissionsMap[cid] = append(serviceChartPermissionsMap[cid], ids...)
+			}
 		}
 
-		// TODO:获取小套餐权限
-
 		// 获取开票/到款详情, 并取最大的开票/到款数(用于动态扩展第二列表头)
 		ci := new(fms.ContractInvoice)
 		invoiceList, e := ci.List(csCond, csPars)
@@ -871,6 +882,11 @@ func (rg *RegisterController) Export(c *gin.Context) {
 		c2.SetStyle(style)
 		row2Title = append(row2Title, t1, t2)
 	}
+	// 此处取第二行标题NameKeyMap, 后面的动态匹配
+	row2NameKeyMap := make(map[string]int)
+	for i := range row2Title {
+		row2NameKeyMap[row2Title[i]] = i
+	}
 
 	contractTMap := map[int]int{
 		fms.ContractTypeNew:   1,
@@ -880,24 +896,64 @@ func (rg *RegisterController) Export(c *gin.Context) {
 		k := -1
 		dataRow := sheet.AddRow()
 		dataRow.SetHeight(20)
+		k += 3
 		dataRow.AddCell().SetString(v.CompanyName)
 		dataRow.AddCell().SetString(fmt.Sprint(contractTMap[v.ContractType]))
 		dataRow.AddCell().SetString(v.SellerName)
-		k += 3
-		// TODO:大套餐
+
+		// 大套餐
+		k += 1
+		col4Name := row2Title[k]
 		svList := serviceMap[v.ContractRegisterId]
+		col4 := ""
 		if svList != nil && len(svList) > 0 {
-
+			for isv := range svList {
+				if svList[isv].Title == col4Name {
+					col4 = "是"
+					break
+				}
+			}
 		}
-		// TODO: 财富管理/市场策略
-		dataRow.AddCell().SetString("大套餐占位1")
-		dataRow.AddCell().SetString("大套餐占位2")
-		dataRow.AddCell().SetString("大套餐占位3")
+		dataRow.AddCell().SetString(col4)
 
-		// TODO:小套餐
+		// 小套餐
+		serviceChartPermissionIds := serviceChartPermissionsMap[v.ContractRegisterId]
 		for i := 0; i < permissionLen; i++ {
-			dataRow.AddCell().SetString("小套餐占位")
+			k += 1
+			colName := row2Title[k]
+			chartPermissionId := permissionNameIdMap[colName]
+			if utils.InArray(chartPermissionId, serviceChartPermissionIds) {
+				dataRow.AddCell().SetString("是")
+			} else {
+				dataRow.AddCell().SetString("")
+			}
+		}
+
+		// 财富管理/市场策略(处理方式其实跟上面的大套餐一样, 只是中间隔了小套餐按照顺序要这么处理=_=!)
+		k += 1
+		col5Name := row2Title[k]
+		col5 := ""
+		if svList != nil && len(svList) > 0 {
+			for isv := range svList {
+				if svList[isv].Title == col5Name {
+					col5 = "是"
+					break
+				}
+			}
+		}
+		dataRow.AddCell().SetString(col5)
+		k += 1
+		col6Name := row2Title[k]
+		col6 := ""
+		if svList != nil && len(svList) > 0 {
+			for isv := range svList {
+				if svList[isv].Title == col6Name {
+					col6 = "是"
+					break
+				}
+			}
 		}
+		dataRow.AddCell().SetString(col6)
 
 		// 其他信息
 		dataRow.AddCell().SetString(utils.TimeTransferString("2006/01/02", v.StartDate)) // 开始时间

+ 2 - 1
controller/crm/contract.go

@@ -34,7 +34,8 @@ func (rg *ContractController) SearchList(c *gin.Context) {
 		return
 	}
 
-	cond := `status IN ('已审批', '已签回')`
+	// 补充协议暂不查询
+	cond := `status IN ('已审批', '已签回') AND contract_type IN ('新签合同', '续约合同')`
 	pars := make([]interface{}, 0)
 	if req.Keyword != "" {
 		kw := "%" + req.Keyword + "%"

+ 2 - 0
models/fms/contract_register.go

@@ -190,6 +190,7 @@ func CreateContractRegisterAndServices(item *ContractRegister, serviceDetail []*
 			TableValue:         t.TableValue,
 			HasDetail:          t.HasDetail,
 			ChartPermissionId:  t.ChartPermissionId,
+			ChartPermissionIds: t.ChartPermissionIds,
 		}
 		contractService.Set()
 		tx.Create(contractService)
@@ -245,6 +246,7 @@ func UpdateContractRegisterAndServices(item *ContractRegister, updateCols []stri
 			TableValue:         t.TableValue,
 			HasDetail:          t.HasDetail,
 			ChartPermissionId:  t.ChartPermissionId,
+			ChartPermissionIds: t.ChartPermissionIds,
 		}
 		contractService.Set()
 		tx.Create(contractService)

+ 7 - 4
models/fms/contract_service.go

@@ -16,6 +16,7 @@ type ContractService struct {
 	TableValue         string `gorm:"column:table_value" json:"table_value" description:"表格数据,用于word生成时的json数据"`
 	HasDetail          string `gorm:"column:has_detail" json:"has_detail" description:"是否有详情: 无; 有"`
 	ChartPermissionId  int    `gorm:"column:chart_permission_id" json:"chart_permission_id" description:"权限ID"`
+	ChartPermissionIds string `gorm:"column:chart_permission_ids" json:"chart_permission_ids" description:"权限IDs-小套餐"`
 	base.TimeBase
 }
 
@@ -33,10 +34,11 @@ func (c *ContractService) List(condition string, pars []interface{}) (list []*Co
 
 // ContractServiceAddReq 新增合同套餐请求体
 type ContractServiceAddReq struct {
-	ServiceTemplateId int                             `json:"service_template_id" description:"服务套餐id"`
-	Title             string                          `json:"title" description:"服务套餐名称"`
-	Value             string                          `json:"value" description:"服务套餐内容"`
-	Detail            [][]ContractServiceDetailAddReq `json:"detail" description:"详情数据"`
+	ServiceTemplateId  int                             `json:"service_template_id" description:"服务套餐id"`
+	Title              string                          `json:"title" description:"服务套餐名称"`
+	Value              string                          `json:"value" description:"服务套餐内容"`
+	Detail             [][]ContractServiceDetailAddReq `json:"detail" description:"详情数据"`
+	ChartPermissionIds string                          `json:"chart_permission_ids" description:"品种权限"`
 }
 
 // ContractServiceAndDetail 合同的服务内容
@@ -50,6 +52,7 @@ type ContractServiceAndDetail struct {
 	HasDetail          string                   `json:"has_detail" description:"是否有详情,枚举值:是、否;默认:否"`
 	TableValue         string                   `json:"table_value" description:"表格数据,用于word生成时的json数据"`
 	ChartPermissionId  int                      `json:"chart_permission_id" description:"权限id"`
+	ChartPermissionIds string                   `json:"chart_permission_ids" description:"品种权限-小套餐"`
 	DetailList         []*ContractServiceDetail `json:"detail_list"`
 }
 

+ 9 - 8
services/fms/contract_register.go

@@ -185,14 +185,15 @@ func HandleContractServiceAndDetail(productId int, serviceList []fms.ContractSer
 			return
 		}
 		serviceDetail := &fms.ContractServiceAndDetail{
-			ServiceTemplateId: item.ServiceTemplateId,
-			Title:             item.Title,
-			Value:             newValue,
-			ProductId:         productId,
-			HasDetail:         hasDetail,
-			TableValue:        serviceTemp.TableValue,
-			DetailList:        detailList,
-			ChartPermissionId: serviceTemp.ChartPermissionId,
+			ServiceTemplateId:  item.ServiceTemplateId,
+			Title:              item.Title,
+			Value:              newValue,
+			ProductId:          productId,
+			HasDetail:          hasDetail,
+			TableValue:         serviceTemp.TableValue,
+			DetailList:         detailList,
+			ChartPermissionId:  serviceTemp.ChartPermissionId,
+			ChartPermissionIds: item.ChartPermissionIds,
 		}
 		serviceDetailList = append(serviceDetailList, serviceDetail)
 	}

+ 24 - 0
utils/common.go

@@ -1027,3 +1027,27 @@ func GetInterfaceAddrs() (ip string) {
 	}
 	return
 }
+
+// JoinStr2IntArr 拼接字符串转[]int
+func JoinStr2IntArr(str, sep string) (arr []int) {
+	arr = make([]int, 0)
+	if str == "" {
+		return
+	}
+	if sep == "" {
+		sep = ","
+	}
+	strArr := strings.Split(str, sep)
+	if len(strArr) == 0 {
+		return
+	}
+	for i := range strArr {
+		v, e := strconv.Atoi(strArr[i])
+		// int2str此处过滤掉无效int
+		if e != nil {
+			continue
+		}
+		arr = append(arr, v)
+	}
+	return
+}