diff --git a/internal/domains/api/dto/api_request_dto.go b/internal/domains/api/dto/api_request_dto.go index e0b7612..f0ff2fa 100644 --- a/internal/domains/api/dto/api_request_dto.go +++ b/internal/domains/api/dto/api_request_dto.go @@ -289,8 +289,9 @@ type IVYZ7F3AReq struct { } type IVYZ3P9MReq struct { - IDCard string `json:"id_card" validate:"required,validIDCard"` - Name string `json:"name" validate:"required,min=1,validName"` + IDCard string `json:"id_card" validate:"required,validIDCard"` + Name string `json:"name" validate:"required,min=1,validName"` + ReturnType string `json:"return_type" validate:"omitempty,oneof=1 2"` } type IVYZ3A7FReq struct { diff --git a/internal/domains/api/services/form_config_service.go b/internal/domains/api/services/form_config_service.go index ec8710d..a346eb9 100644 --- a/internal/domains/api/services/form_config_service.go +++ b/internal/domains/api/services/form_config_service.go @@ -367,6 +367,7 @@ func (s *FormConfigServiceImpl) generateFieldLabel(jsonTag string) string { "plate_no": "车牌号", "plate_type": "号牌类型", "vin_code": "车辆识别代号VIN码", + "return_type": "返回类型", } if label, exists := labelMap[jsonTag]; exists { @@ -407,6 +408,7 @@ func (s *FormConfigServiceImpl) generateExampleValue(fieldType reflect.Type, jso "plate_no": "京A12345", "plate_type": "01", "vin_code": "LSGBF53M8DS123456", + "return_type": "1", } if example, exists := exampleMap[jsonTag]; exists { @@ -456,6 +458,7 @@ func (s *FormConfigServiceImpl) generatePlaceholder(jsonTag string, fieldType st "plate_no": "请输入车牌号", "plate_type": "请选择号牌类型(01或02)", "vin_code": "请输入17位车辆识别代号VIN码", + "return_type": "请选择返回类型", } if placeholder, exists := placeholderMap[jsonTag]; exists { @@ -507,6 +510,7 @@ func (s *FormConfigServiceImpl) generateDescription(jsonTag string, validation s "plate_no": "请输入车牌号", "plate_type": "号牌类型:01-小型汽车;02-大型汽车(可选)", "vin_code": "请输入17位车辆识别代号VIN码(Vehicle Identification Number)", + "return_type": "返回类型:1-专业和学校名称数据返回编码形式(默认);2-专业和学校名称数据返回中文名称", } if desc, exists := descMap[jsonTag]; exists { diff --git a/internal/domains/api/services/processors/ivyz/ivyz3p9m_processor.go b/internal/domains/api/services/processors/ivyz/ivyz3p9m_processor.go index 0ce2909..25db4cf 100644 --- a/internal/domains/api/services/processors/ivyz/ivyz3p9m_processor.go +++ b/internal/domains/api/services/processors/ivyz/ivyz3p9m_processor.go @@ -31,9 +31,16 @@ func ProcessIVYZ3P9MRequest(ctx context.Context, params []byte, deps *processors return nil, errors.Join(processors.ErrSystem, err) } + // 处理 returnType 参数,默认为 "1" + returnType := paramsDto.ReturnType + if returnType == "" { + returnType = "1" + } + reqData := map[string]interface{}{ - "realName": encryptedName, - "certCode": encryptedCertCode, + "realName": encryptedName, + "certCode": encryptedCertCode, + "returnType": returnType, } respData, err := deps.MuziService.CallAPI(ctx, "PC0041", reqData) diff --git a/scripts/find_missing_cost_price.go b/scripts/find_missing_cost_price.go new file mode 100644 index 0000000..60ed627 --- /dev/null +++ b/scripts/find_missing_cost_price.go @@ -0,0 +1,162 @@ +package main + +import ( + "context" + "encoding/csv" + "fmt" + "os" + "strings" + + "gorm.io/driver/postgres" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "gorm.io/gorm/schema" +) + +// Product 产品实体(简化版) +type Product struct { + Code string `gorm:"column:code"` + Name string `gorm:"column:name"` + CostPrice *float64 `gorm:"column:cost_price"` +} + +func main() { + // 连接数据库 + db, err := connectDB() + if err != nil { + fmt.Fprintf(os.Stderr, "连接数据库失败: %v\n", err) + os.Exit(1) + } + + ctx := context.Background() + + fmt.Println("正在查询数据库中未设置成本价的产品...") + fmt.Println() + + // 查询没有设置成本价的产品(cost_price IS NULL 或 cost_price = 0) + var products []Product + err = db.WithContext(ctx). + Table("product"). + Select("code, name, cost_price"). + Where("deleted_at IS NULL AND (cost_price IS NULL OR cost_price = 0)"). + Order("code ASC"). + Find(&products).Error + + // 如果单数表名查询失败,尝试复数表名 + if err != nil { + if strings.Contains(err.Error(), "does not exist") { + err = db.WithContext(ctx). + Table("products"). + Select("code, name, cost_price"). + Where("deleted_at IS NULL AND (cost_price IS NULL OR cost_price = 0)"). + Order("code ASC"). + Find(&products).Error + } + } + + if err != nil { + fmt.Fprintf(os.Stderr, "查询失败: %v\n", err) + os.Exit(1) + } + + totalCount := len(products) + fmt.Printf("找到 %d 个未设置成本价的产品\n\n", totalCount) + + if totalCount == 0 { + fmt.Println("所有产品都已设置成本价!") + return + } + + // 打印到控制台 + fmt.Println("=== 未设置成本价的产品列表 ===") + fmt.Printf("%-20s %-50s %-15s\n", "产品编号", "产品名称", "成本价") + fmt.Println(strings.Repeat("-", 85)) + + for _, p := range products { + costPriceStr := "-" + if p.CostPrice != nil && *p.CostPrice != 0 { + costPriceStr = fmt.Sprintf("%.2f", *p.CostPrice) + } + productName := p.Name + if productName == "" { + productName = "-" + } + fmt.Printf("%-20s %-50s %-15s\n", p.Code, productName, costPriceStr) + } + + fmt.Println() + + // 保存到 CSV 文件 + csvFile, err := os.Create("missing_cost_price.csv") + if err != nil { + fmt.Fprintf(os.Stderr, "创建 CSV 文件失败: %v\n", err) + return + } + defer csvFile.Close() + + // 写入 UTF-8 BOM + csvFile.WriteString("\xEF\xBB\xBF") + + writer := csv.NewWriter(csvFile) + defer writer.Flush() + + // 写入表头 + headers := []string{"产品编号", "产品名称", "成本价"} + if err := writer.Write(headers); err != nil { + fmt.Fprintf(os.Stderr, "写入 CSV 表头失败: %v\n", err) + return + } + + // 写入数据 + for _, p := range products { + costPriceStr := "" + if p.CostPrice != nil && *p.CostPrice != 0 { + costPriceStr = fmt.Sprintf("%.2f", *p.CostPrice) + } + productName := p.Name + if productName == "" { + productName = "-" + } + record := []string{p.Code, productName, costPriceStr} + if err := writer.Write(record); err != nil { + fmt.Fprintf(os.Stderr, "写入 CSV 数据失败: %v\n", err) + return + } + } + + fmt.Printf("✅ 结果已保存到: missing_cost_price.csv\n") + fmt.Printf("📊 总计: %d 个产品未设置成本价\n", totalCount) +} + +// connectDB 连接数据库 +func connectDB() (*gorm.DB, error) { + // 数据库连接配置 + dsn := "host=1.117.67.95 user=tyapi_user password=Pg9mX4kL8nW2rT5y dbname=tyapi port=25010 sslmode=disable TimeZone=Asia/Shanghai" + + // 配置GORM,使用单数表名(与项目配置一致) + gormConfig := &gorm.Config{ + NamingStrategy: schema.NamingStrategy{ + SingularTable: true, // 使用单数表名 + }, + Logger: logger.Default.LogMode(logger.Info), // 显示 SQL 日志 + } + + db, err := gorm.Open(postgres.Open(dsn), gormConfig) + if err != nil { + return nil, fmt.Errorf("连接数据库失败: %w", err) + } + + // 测试连接 + sqlDB, err := db.DB() + if err != nil { + return nil, fmt.Errorf("获取数据库实例失败: %w", err) + } + + if err := sqlDB.Ping(); err != nil { + return nil, fmt.Errorf("数据库连接测试失败: %w", err) + } + + fmt.Println("数据库连接成功") + return db, nil +} + diff --git a/scripts/missing_cost_price.csv b/scripts/missing_cost_price.csv new file mode 100644 index 0000000..46b9fc1 --- /dev/null +++ b/scripts/missing_cost_price.csv @@ -0,0 +1,23 @@ +产品编号,产品名称,成本价 +COMB298Y,人事背调组合包, +COMB86PM,海之源科技定制组合包, +COMB92KS,小微企业哈密定制, +COMBHZY2,海之源定制大数据组合报告, +COMBQN10,全能个人大数据报告(标准版), +COMBQN11,全能婚恋风险报告(标准版), +COMBQN12,全能入职背调报告(标准版), +COMBQN13,全能小微企业报告(标准版), +COMBQN14,全能家政风险报告(标准版), +COMBQN15,全能消金报告(标准版), +COMBTY11,天远个人风险报告(专业版), +COMBTY12,天远婚恋风险报告(专业版), +COMBTY13,天远入职背调报告(专业版), +COMBTY14,天远老板企业报告(专业版), +COMBTY15,天远家政风险报告(专业版), +COMBTY16,天远贷前风险报告(专业版), +COMENT01,企业风险报告(专业版), +IVYZ4E8B,单人婚姻状态C, +JRZQ8A2D,特殊名单验证B, +QYGL23T7,企业法人四要素高级版, +QYGL3F8E,人企关系加强版, +YYSY9E4A,手机号码归属地, diff --git a/scripts/update_cost_price.go b/scripts/update_cost_price.go new file mode 100644 index 0000000..e545e12 --- /dev/null +++ b/scripts/update_cost_price.go @@ -0,0 +1,160 @@ +package main + +import ( + "context" + "encoding/csv" + "fmt" + "os" + "strconv" + "strings" + + "gorm.io/driver/postgres" + "gorm.io/gorm" + "gorm.io/gorm/logger" + "gorm.io/gorm/schema" +) + +func main() { + // 连接数据库 + db, err := connectDB() + if err != nil { + fmt.Fprintf(os.Stderr, "连接数据库失败: %v\n", err) + os.Exit(1) + } + + // 读取 CSV 文件 + csvFile, err := os.Open("成本价.csv") + if err != nil { + fmt.Fprintf(os.Stderr, "打开 CSV 文件失败: %v\n", err) + os.Exit(1) + } + defer csvFile.Close() + + reader := csv.NewReader(csvFile) + reader.LazyQuotes = true + reader.TrimLeadingSpace = true + + // 读取所有记录 + records, err := reader.ReadAll() + if err != nil { + fmt.Fprintf(os.Stderr, "读取 CSV 文件失败: %v\n", err) + os.Exit(1) + } + + if len(records) < 2 { + fmt.Fprintf(os.Stderr, "CSV 文件数据不足(需要至少包含表头和数据行)\n") + os.Exit(1) + } + + ctx := context.Background() + successCount := 0 + failCount := 0 + skipCount := 0 + + fmt.Printf("开始更新成本价...\n") + fmt.Printf("共 %d 条记录(包含表头)\n\n", len(records)) + + // 从第二行开始处理(跳过表头) + for i := 1; i < len(records); i++ { + record := records[i] + if len(record) < 7 { + fmt.Printf("第 %d 行数据列数不足,跳过\n", i+1) + skipCount++ + continue + } + + productCode := strings.TrimSpace(record[0]) + costPriceStr := strings.TrimSpace(record[6]) // 成本价在第7列(索引6) + + // 跳过产品编号为空的行 + if productCode == "" { + fmt.Printf("第 %d 行产品编号为空,跳过\n", i+1) + skipCount++ + continue + } + + // 如果成本价为空,跳过(不更新) + if costPriceStr == "" { + fmt.Printf("产品 %s: 成本价为空,跳过\n", productCode) + skipCount++ + continue + } + + // 解析成本价为浮点数 + costPrice, err := strconv.ParseFloat(costPriceStr, 64) + if err != nil { + fmt.Printf("产品 %s: 成本价格式错误 (%s),跳过: %v\n", productCode, costPriceStr, err) + skipCount++ + continue + } + + // 更新数据库 + result := db.WithContext(ctx). + Table("product"). + Where("code = ? AND deleted_at IS NULL", productCode). + Update("cost_price", costPrice) + + if result.Error != nil { + // 如果单数表名失败,尝试复数表名 + if strings.Contains(result.Error.Error(), "does not exist") { + result = db.WithContext(ctx). + Table("products"). + Where("code = ? AND deleted_at IS NULL", productCode). + Update("cost_price", costPrice) + } + + if result.Error != nil { + fmt.Printf("产品 %s: 更新失败 - %v\n", productCode, result.Error) + failCount++ + continue + } + } + + if result.RowsAffected == 0 { + fmt.Printf("产品 %s: 未找到匹配的记录\n", productCode) + failCount++ + } else { + fmt.Printf("产品 %s: 成功更新成本价为 %.2f (影响 %d 行)\n", productCode, costPrice, result.RowsAffected) + successCount++ + } + } + + fmt.Printf("\n=== 更新完成 ===\n") + fmt.Printf("成功更新: %d 条\n", successCount) + fmt.Printf("更新失败: %d 条\n", failCount) + fmt.Printf("跳过记录: %d 条\n", skipCount) + fmt.Printf("总计处理: %d 条\n", len(records)-1) +} + +// connectDB 连接数据库 +func connectDB() (*gorm.DB, error) { + // 数据库连接配置 + dsn := "host=1.117.67.95 user=tyapi_user password=Pg9mX4kL8nW2rT5y dbname=tyapi port=25010 sslmode=disable TimeZone=Asia/Shanghai" + + // 配置GORM,使用单数表名(与项目配置一致) + gormConfig := &gorm.Config{ + NamingStrategy: schema.NamingStrategy{ + SingularTable: true, // 使用单数表名 + }, + Logger: logger.Default.LogMode(logger.Info), // 显示 SQL 日志 + } + + db, err := gorm.Open(postgres.Open(dsn), gormConfig) + if err != nil { + return nil, fmt.Errorf("连接数据库失败: %w", err) + } + + // 测试连接 + sqlDB, err := db.DB() + if err != nil { + return nil, fmt.Errorf("获取数据库实例失败: %w", err) + } + + if err := sqlDB.Ping(); err != nil { + return nil, fmt.Errorf("数据库连接测试失败: %w", err) + } + + fmt.Println("数据库连接成功") + return db, nil +} + diff --git a/scripts/成本价.csv b/scripts/成本价.csv new file mode 100644 index 0000000..4bd811d --- /dev/null +++ b/scripts/成本价.csv @@ -0,0 +1,98 @@ +产品编号,产品名称,分类,价格,数据源,数据源编号,成本价 +DWBG6A2C,司南报告服务,多维报告,10.8,安徽智查,ZCI102,2.4 +DWBG8B4D,谛听多维报告,多维报告,10.8,安徽智查,ZCI103,2.1 +FLXG2E8F,司法核验报告,风险管控,5,安徽智查,ZCI101,1.2 +FLXG5A3B,个人司法涉诉B,风险管控,2.2,安徽智查,ZCI006,0.42 +FLXG8B4D,涉赌涉诈风险评估,风险管控,1.8,安徽智查,ZCI027,0.3 +FLXG9C1D,法院信息详情高级版,风险管控,1.5,安徽智查,ZCI007,0.23 +FLXGDEA8,公安不良人员名单,风险管控,2,安徽智查,ZCI028,0.45 +FLXGDEA9,公安不良人员名单(加强版),风险管控,2.5,安徽智查,ZCI005,0.45 +IVYZ2A8B,身份二要素认证,身份验证,0.25,安徽智查,ZCI001,0.05 +IVYZ5E3F,单人婚姻状态B,身份验证,2.5,安徽智查,ZCI029,0.55 +IVYZ7C9D,人脸识别验证,身份验证,0.3,安徽智查,ZCI013,0.3 +IVYZ7F3A,学历信息查询B,身份验证,4.5,安徽智查,ZCI035,2.3 +JRZQ09J8,收入评估(社保评级),金融验证,3.5,安徽智查,ZCI031,0.83 +JRZQ1D09,3C租赁申请意向,金融验证,3,安徽智查,ZCI020,0.23 +JRZQ3C7B,借贷意向验证B,金融验证,2.5,安徽智查,ZCI017,0.33 +JRZQ4B6C,探针C风险评估,金融验证,2,安徽智查,ZCI023,0.5 +JRZQ5E9F,借选指数评估,金融验证,3,安徽智查,ZCI021,0.38 +JRZQ7F1A,全景雷达,金融验证,3.5,安徽智查,ZCI008,0.6 +JRZQ8A2D,特殊名单验证B,金融验证,2,安徽智查,ZCI018,0 +QCXG9P1C,名下车辆详版,汽车相关,3.8,安徽智查,ZCI051,1.6 +YYSY3E7F,空号检测服务,运营商验证,0.2,安徽智查,ZCI010,0.055 +YYSY4F2E,运营商三要素验证(详版),运营商验证,0.35,安徽智查,ZCI002,0.16 +YYSY6D9A,全网手机号状态验证,运营商验证,0.6,安徽智查,ZCI030,0.035 +YYSY8B1C,手机在网时长B,运营商验证,0.3,安徽智查,ZCI003,0.1 +YYSY9E4A,手机号码归属地,运营商验证,0.3,安徽智查,ZCI026,0 +FLXG0687,反赌反诈,风险管控,1.8,羽山数据,RIS031,0.3 +FLXGBC21,手机号码特别风险,风险管控,2,羽山数据,MOB032,0.1 +QCXG7A2B,名下车辆,汽车相关,2,羽山数据,CAR061,1.6 +FLXG0V3B,个人不良核验(标准版),风险管控,3,西部数据,G34BJ03,0.8 +FLXG0V4B,个人司法涉诉,风险管控,2.5,西部数据,G22SC01,0.5 +FLXG162A,团伙欺诈评估,风险管控,2.5,西部数据,G32BJ05,0.7 +FLXG3D56,特殊名单验证,金融验证,2.5,西部数据,G26BJ05,0.2 +FLXG54F5,手机号码风险,风险管控,3,西部数据,G03HZ01,0.55 +FLXG5876,易诉人识别,风险管控,2,西部数据,G03XM02,0.6 +FLXG5B2E,自然人限高信息,风险管控,2,西部数据,G36SC01,0.5 +FLXG75FE,涉网风险,风险管控,2,西部数据,FLXG75FE,0.4 +FLXG8A3F,自然人失信信息,风险管控,2,西部数据,G37SC01,0.5 +FLXG9687,电诈风险预警,风险管控,1,西部数据,G31BJ05,0.4 +FLXG970F,风险人员核验,风险管控,2,西部数据,WEST00028,0.35 +FLXGC9D1,黑灰产等级,风险管控,3,西部数据,G30BJ05,0.2 +FLXGCA3D,个人综合涉诉,风险管控,2.5,西部数据,G22BJ03,0.5 +FLXGDEC7,个人不良核验,风险管控,3,西部数据,G23BJ03,0.8 +IVYZ0B03,二要素验证(姓名、手机号),身份验证,0.3,西部数据,G17BJ02,0.29 +IVYZ1C9D,,身份验证,,西部数据,G38SC02, +IVYZ2125,活体+人像核验组件,身份验证,0.3,西部数据,IVYZ2125,0.3 +IVYZ385E,自然人生存状态标识,身份验证,1.5,西部数据,WEST00020,0.3 +IVYZ4E8B,单人婚姻状态C,身份验证,2.5,西部数据,G09GZ02, +IVYZ5733,单人婚姻状态A,身份验证,2.5,西部数据,G09GZ02,1 +IVYZ7F2A,双人婚姻状态B,身份验证,2.5,西部数据,G10GZ02,0.6 +IVYZ81NC,单人婚姻查询(登记时间版),身份验证,4.5,西部数据,G09XM02,1 +IVYZ9363,双人婚姻状态A,身份验证,2.5,西部数据,G10XM02,1 +IVYZ9A2B,学历信息查询A,身份验证,5,西部数据,G11BJ06,3 +IVYZADEE,身份证三要素比对,身份验证,0.3,西部数据,IVYZADEE,0.2 +IVYZGZ08,,身份验证,,西部数据,G08SC02, +JRZQ0A03,借贷意向验证,金融验证,2.5,西部数据,G27BJ05,0.6 +JRZQ4AA8,偿债压力指数,金融验证,3,西部数据,G29BJ05,0.6 +JRZQ8203,借贷行为验证,金融验证,3,西部数据,G28BJ05,1 +JRZQDCBE,银行卡四要素验证,金融验证,0.4,西部数据,G20GZ01,0.3 +QYGL2ACD,企业三要素核验,企业相关,0.2,西部数据,WEST00022,0.1 +QYGL45BD,企业法人四要素核验,企业相关,0.3,西部数据,WEST00021,0.25 +QYGL6F2D,人企关联,企业相关,3,西部数据,G05XM02,0.9 +QYGL8261,企业综合涉诉,企业相关,2.5,西部数据,Q03BJ03,0.5 +QYGL8271,企业司法涉诉(详版),企业相关,2.5,西部数据,Q03SC01,0.5 +QYGLB4C0,股东人企关系精准版,企业相关,3,西部数据,G05HZ01,0.6 +YYSY09CD,运营商三要素验证(简版),运营商验证,0.3,西部数据,G16BJ02,0.3 +YYSY4B21,手机在网状态,运营商验证,0.5,西部数据,G25BJ02,0.055 +YYSY4B37,手机在网时长A,运营商验证,0.3,西部数据,G02BJ02,0.2 +YYSY6F2E,运营商三要素核验(高级版),运营商验证,0.4,西部数据,G15BJ02,0.35 +YYSYD50F,二要素核验(手机号、身份证号),运营商验证,0.35,西部数据,G18BJ02,0.29 +YYSYF7DB,手机二次卡,运营商验证,0.3,西部数据,G19BJ02,0.2 +DWBG7F3A,多头借贷行业风险版,金融验证,2.5,四川星维,CDJ-1101695406546284544,0.45 +FLXG7E8F,个人司法涉诉查询,风险管控,2,四川星维,CDJ-1101695378264092672,0.36 +IVYZ3A7F,学历信息查询(学校名称版),身份验证,5,四川星维,CDJ-1104648854749245440,3 +IVYZ6G7H,单人婚姻状态(补证版),身份验证,3.5,四川星维,CDJ-1104646268587536384,0.7 +IVYZ8I9J,互联网行为推测,身份验证,1.8,四川星维,CDJ-1074522823015198720,0.6 +IVYZ9D2E,,身份验证,,四川星维,CDJ-1104648845446279168,2.2 +JRZQ0L85,个人信用分,金融验证,1.5,四川星维,CDJ-1101695364016041984,0.38 +JRZQ6F2A,借贷意向验证A,金融验证,2,四川星维,CDJ-1101695369065984000,0.25 +JRZQ8B3C,个人消费能力等级,金融验证,3,四川星维,CDJ-1101695392528920576,0.34 +JRZQ9D4E,多头借贷小时级,金融验证,2.5,四川星维,CDJ-1118085532960616448,0.4 +JRZQ9E2A,多头借贷风险信息查询,金融验证,3,四川星维,CDJ-1068350101688086528,0.6 +QYGL5F6A,名下企业关联,企业相关,2.8,四川星维,CDJ-1101695397213958144,0.44 +YYSY7D3E,携号转网查询,运营商验证,0.3,四川星维,CDJ-1100244706893164544,0.02 +YYSY8C2D,运营商三要素(新详版),运营商验证,0.35,四川星维,CDJ-1100244702166183936,0.19 +YYSY8F3A,,运营商验证,,四川星维,CDJ-1100244697766359040,0.14 +YYSY9A1B,运营商三要素验证(简版),运营商验证,0.3,四川星维,CDJ-1100244697766359040,0.14 +QYGL4B2E,,企业相关,,天眼查,TaxContravention, +QYGL5A3C,对外投资历史,企业相关,0.5,天眼查,InvestHistory,0.1 +QYGL7C1A,经营异常,企业相关,0.5,天眼查,AbnormalInfo,0.15 +QYGL7D9A,,企业相关,,天眼查,OwnTax, +QYGL8B4D,融资历史,企业相关,0.5,天眼查,FinancingHistory,0.1 +QYGL9E2F,行政处罚,企业相关,0.5,天眼查,PunishmentInfo,0.15 +QYGL23T7,企业法人四要素高级版,企业相关,0.3,阿里云,check, +YYSYBE08,二要素核验(姓名、身份证号),运营商验证,0.25,阿里云,check,0.03 +IVYZ3P9M,学历信息查询(实时版),身份验证,5,木子数据,PC0041,1.72 +COMENT01,企业风险报告(专业版),组合包,30,内部处理,, +QYGL3F8E,人企关系加强版,企业相关,10.8,内部处理,,