package data import ( "eta/eta_hub/models/data_manage" "eta/eta_hub/utils" "fmt" ) /*// GetEdbRelationList 获取指标引用列表 func GetEdbRelationList(source, edbType int, classifyId, sysUserId, frequency, keyword, status string, startSize, pageSize int, sortParam, sortType string) (total int, list []*data_manage.BaseRelationEdbInfo, err error) { var pars []interface{} var condition string list = make([]*data_manage.BaseRelationEdbInfo, 0) isStop := -1 switch status { case `暂停`: isStop = 1 case `启用`: isStop = 0 case `供应商停用`: isStop = 3 } // 关联表语句 var addFieldStr, joinTableStr string switch source { case 0: // 计算指标,不校验source default: condition += ` AND e.source = ? ` pars = append(pars, source) } if edbType == 2 { //计算指标 condition += ` AND e.edb_type = ? AND e.edb_info_type = 0` pars = append(pars, edbType) } switch isStop { case -1: // 供应商停用 if source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL { joinTableStr = ` LEFT JOIN base_from_mysteel_chemical_index z ON e.edb_code = z.index_code ` addFieldStr = ` ,z.is_supplier_stop ` } case 0, 1: condition += " AND e.no_update = ? " pars = append(pars, isStop) // 供应商停用 if source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL { condition += " AND z.is_supplier_stop = ? " pars = append(pars, 0) joinTableStr = ` LEFT JOIN base_from_mysteel_chemical_index z ON e.edb_code = z.index_code ` addFieldStr = ` ,z.is_supplier_stop ` } case 3: // 供应商停用 if source == utils.DATA_SOURCE_MYSTEEL_CHEMICAL { condition += " AND z.is_supplier_stop = ? " pars = append(pars, 1) joinTableStr = ` LEFT JOIN base_from_mysteel_chemical_index z ON e.edb_code = z.index_code ` addFieldStr = ` ,z.is_supplier_stop ` } } if classifyId != `` { classifyIdSlice := strings.Split(classifyId, ",") condition += ` AND e.classify_id IN (` + utils.GetOrmInReplace(len(classifyIdSlice)) + `)` pars = append(pars, classifyIdSlice) } if sysUserId != `` { sysUserIdSlice := strings.Split(sysUserId, ",") condition += ` AND e.sys_user_id IN (` + utils.GetOrmInReplace(len(sysUserIdSlice)) + `)` pars = append(pars, sysUserIdSlice) } if frequency != `` { frequencySlice := strings.Split(frequency, ",") condition += ` AND e.frequency IN (` + utils.GetOrmInReplace(len(frequencySlice)) + `)` pars = append(pars, frequencySlice) } if keyword != `` { keywordSlice := strings.Split(keyword, " ") if len(keywordSlice) > 0 { tmpConditionSlice := make([]string, 0) tmpConditionSlice = append(tmpConditionSlice, ` e.edb_name like ? or e.edb_code like ? `) pars = utils.GetLikeKeywordPars(pars, keyword, 2) for _, v := range keywordSlice { if v == ` ` || v == `` { continue } tmpConditionSlice = append(tmpConditionSlice, ` e.edb_name like ? or e.edb_code like ? `) pars = utils.GetLikeKeywordPars(pars, v, 2) } condition += ` AND (` + strings.Join(tmpConditionSlice, " or ") + `)` } else { condition += ` AND (e.edb_name like ? or e.edb_code like ? )` pars = utils.GetLikeKeywordPars(pars, keyword, 2) } } sortStr := `` if sortParam != `` { sortStr = fmt.Sprintf("%s %s,e.edb_info_id desc ", sortParam, sortType) } total, list, err = data_manage.GetEdbInfoRelationList(condition, pars, addFieldStr, joinTableStr, sortStr, startSize, pageSize) return } */ // GetCalculateEdbByFromEdbInfo 找到依赖于该基础指标的所有计算指标 func GetCalculateEdbByFromEdbInfo(edbInfoIds []int, calculateEdbIds []int, hasFind map[int]struct{}) (newCalculateEdbIds []int, err error) { if len(edbInfoIds) == 0 { return } newCalculateEdbIds = calculateEdbIds newEdbInfoIds := make([]int, 0) for _, v := range edbInfoIds { if _, ok := hasFind[v]; ok { continue } newEdbInfoIds = append(newEdbInfoIds, v) } if len(newEdbInfoIds) == 0 { return } var condition string var pars []interface{} // 关联指标 condition += ` AND b.from_edb_info_id in (` + utils.GetOrmInReplace(len(newEdbInfoIds)) + `)` pars = append(pars, newEdbInfoIds) //获取关联图表列表 list, err := data_manage.GetRelationEdbInfoListMappingByCondition(condition, pars) if err != nil && err.Error() != utils.ErrNoRow() { err = fmt.Errorf("获取关联指标信息失败,Err:%s", err.Error()) return } calculateEdbIdsTmp := make([]int, 0) for _, mapping := range list { if mapping.EdbType == 2 && mapping.EdbInfoType == 0 { // 如果指标库里的计算指标,则加入,否则继续找 newCalculateEdbIds = append(newCalculateEdbIds, mapping.EdbInfoId) calculateEdbIdsTmp = append(calculateEdbIdsTmp, mapping.EdbInfoId) } } for _, v := range newEdbInfoIds { hasFind[v] = struct{}{} } if len(calculateEdbIdsTmp) > 0 { newCalculateEdbIds, err = GetCalculateEdbByFromEdbInfo(calculateEdbIdsTmp, newCalculateEdbIds, hasFind) if err != nil { return } } return }