package contract import ( "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" "hongze/fms_api/controller/resp" "hongze/fms_api/global" "hongze/fms_api/models/crm" "hongze/fms_api/models/fms" "hongze/fms_api/models/system" "strconv" "strings" ) // ServiceController 合同套餐 type ServiceController struct{} // ServiceList // @Title 合同套餐列表 // @Description 合同套餐列表 // @Param ProductId query int false "套餐类型: 1-FICC(默认); 2-权益" // @Success 200 {object} crm.ContractSearchListResp // @router /contract/service/list [get] func (sr *ServiceController) List(c *gin.Context) { var req fms.ContractServiceListReq if e := c.BindQuery(&req); e != nil { err, ok := e.(validator.ValidationErrors) if !ok { resp.FailData("参数解析失败", "Err:"+e.Error(), c) return } resp.FailData("参数解析失败", err.Translate(global.Trans), c) return } productIdStr := req.ProductId var productId int var list []*fms.ContractServiceTemplateItem var err error if productIdStr == "" { list, err = fms.GetContractServiceTemplateSecond() } else { productId, _ = strconv.Atoi(productIdStr) list, err = fms.GetContractServiceTemplateMapByProductId(productId) } if err != nil { resp.FailData("获取失败", "获取产品套餐失败, Err: "+err.Error(), c) return } allMap := make(map[int][]*fms.ContractServiceTemplateMapItems) respList := make([]*fms.ContractServiceTemplateList, 0) for i := 0; i < len(list); i++ { item := list[i] v := new(fms.ContractServiceTemplateMapItems) v.ContractServiceTemplateItem = *item secFormatList := make([]*fms.ContractServiceTemplateMapItems, 0) secList, e := fms.GetContractServiceTemplateMapByParentId(v.ServiceTemplateId) if e != nil { resp.FailData("获取失败", "Err:"+e.Error(), c) return } secondLen := len(secList) for j := 0; j < secondLen; j++ { sec := new(fms.ContractServiceTemplateMapItems) sec.ContractServiceTemplateItem = *secList[j] detail, e := fms.GetContractServiceDetailByTemplateId(secList[j].ServiceTemplateId) if e != nil { resp.FailData("获取失败", "获取详情模板失败, Err:"+e.Error(), c) return } sec.Detail = detail // 权益存在第三级主客观套餐 thirdFormatList := make([]*fms.ContractServiceTemplateMapItems, 0) thirdList, e := fms.GetContractServiceTemplateMapByParentId(secList[j].ServiceTemplateId) if e != nil { resp.FailData("获取失败", "获取三级套餐失败, Err:"+e.Error(), c) return } for t := range thirdList { tf := new(fms.ContractServiceTemplateMapItems) tf.ContractServiceTemplateItem = *thirdList[t] thirdFormatList = append(thirdFormatList, tf) } sec.Children = thirdFormatList secFormatList = append(secFormatList, sec) } detail, e := fms.GetContractServiceDetailByTemplateId(item.ServiceTemplateId) if e != nil { resp.FailData("获取失败", "获取详情模板失败, Err:"+e.Error(), c) return } v.Detail = detail v.Children = secFormatList if v.Title == "FICC小套餐" { //获取ficc小套餐品种 sysConf := new(system.SysConfig) confCond := `config_code = ?` confPars := make([]interface{}, 0) confPars = append(confPars, system.ConfigKeyCrmPermissionFiccClassify) confItem, e := sysConf.FetchByCondition(confCond, confPars) if e != nil { resp.FailData("获取失败", "Err:"+e.Error(), c) return } if confItem.ConfigValue == "" { resp.FailData("获取失败", "FICC品种分类配置为空", c) return } classifyArr := strings.Split(confItem.ConfigValue, ",") if len(classifyArr) == 0 { resp.FailData("获取失败", "FICC品种分类配置为空", c) return } // 获取FICC权限 ficcCond := `enabled = 1 AND permission_type = 0 AND product_id = ? AND classify_name IN ?` ficcPars := make([]interface{}, 0) ficcPars = append(ficcPars, 1, classifyArr) items, e := crm.GetPermissionSetItemsByCondition(ficcCond, ficcPars) if e != nil { resp.FailData("获取失败", "获取FICC权限信息失败, Err: "+e.Error(), c) return } ficcItemMap := make(map[string][]*crm.PermissionSetItem, 0) for i := range items { if ficcItemMap[items[i].ClassifyName] == nil { ficcItemMap[items[i].ClassifyName] = make([]*crm.PermissionSetItem, 0) } ficcItemMap[items[i].ClassifyName] = append(ficcItemMap[items[i].ClassifyName], items[i]) } for i := range classifyArr { if classifyArr[i] == "市场策略" { continue } checkList := make([]int, 0) if classifyArr[i] == "宏观经济" { checkList = append(checkList, 1) } pItem := fms.ContractServiceTemplateItem{ ServiceTemplateId: 90000 + i, ProductId: 1, Pid: v.ServiceTemplateId, ParentTitle: v.Title, Title: classifyArr[i], } childs := make([]*fms.ContractServiceTemplateMapItems, 0) ficcItems := ficcItemMap[classifyArr[i]] for _, ficcItem := range ficcItems { tempItem := fms.ContractServiceTemplateItem{ ServiceTemplateId: pItem.ServiceTemplateId + ficcItem.ChartPermissionId, ProductId: 1, Pid: pItem.ServiceTemplateId, ParentTitle: pItem.Title, Title: ficcItem.PermissionName, ChartPermissionId: ficcItem.ChartPermissionId, } newpItem := fms.ContractServiceTemplateMapItems{ ContractServiceTemplateItem: tempItem, } childs = append(childs, &newpItem) } tempItem := fms.ContractServiceTemplateMapItems{ ContractServiceTemplateItem: pItem, Children: childs, } v.Children = append(v.Children, &tempItem) } } allMap[item.ProductId] = append(allMap[item.ProductId], v) } allTitleMap := map[int]string{ 1: "FICC套餐", 2: "权益套餐", } if productId == 0 { tmp1 := &fms.ContractServiceTemplateList{ Title: allTitleMap[1], Children: allMap[1], } tmp2 := &fms.ContractServiceTemplateList{ Title: allTitleMap[2], Children: allMap[2], } respList = append(respList, tmp1) respList = append(respList, tmp2) } else { tmp := &fms.ContractServiceTemplateList{ Title: allTitleMap[productId], Children: allMap[productId], } respList = append(respList, tmp) } resp.OkData("获取成功", respList, c) } // ServiceList // @Title 合同套餐列表 // @Description 合同套餐列表 // @Param ProductId query int false "套餐类型: 1-FICC(默认); 2-权益" // @Success 200 {object} crm.ContractSearchListResp // @router /contract/service/simple [get] func (sr *ServiceController) SimpleList(c *gin.Context) { list, err := fms.GetContractServiceTemplateSecond() if err != nil { resp.FailData("获取失败", "获取产品套餐失败, Err: "+err.Error(), c) return } allList := make([]*fms.ContractServiceTemplateItem, 0) allMap := make(map[int][]*fms.ContractServiceTemplateMapItems) respList := make([]*fms.ContractServiceTemplateList, 0) for i := 0; i < len(list); i++ { if list[i].Title == "行业套餐" { industryList, e := fms.GetContractServiceTemplateMapByParentId(list[i].ServiceTemplateId) if e != nil { resp.FailData("获取失败", "Err:"+e.Error(), c) return } for _, sv := range industryList { allList = append(allList, sv) } } else { allList = append(allList, list[i]) } } for i := 0; i < len(allList); i++ { item := allList[i] v := new(fms.ContractServiceTemplateMapItems) v.ContractServiceTemplateItem = *item allMap[item.ProductId] = append(allMap[item.ProductId], v) } allTitleMap := map[int]string{ 1: "FICC套餐", 2: "权益套餐", } tmp1 := &fms.ContractServiceTemplateList{ Title: allTitleMap[1], Children: allMap[1], } tmp2 := &fms.ContractServiceTemplateList{ Title: allTitleMap[2], Children: allMap[2], } respList = append(respList, tmp1) respList = append(respList, tmp2) resp.OkData("获取成功", respList, c) }