SView Help Center
English (US)

创建项目

Author: sviewngts Last Updated: 2026-09-09 15:09
接口名 POST: /login-register/open-api/projects
入参:(body传值) application/json
是否必传 默认值 描述 备注
projectName 是 - 项目名称 建议长度50字以内
projectCode 是 - 项目编码 外部平台的项目唯一编码
projectDescribe   - 项目描述 项目描述
projectVisibility 是 - 公开范围(对谁可见)

指定成员可见->0

企业所有成员可见->1
integrationIds   - 成员在外部平台的唯一ID,多个用英文逗号隔开 公开范围为指定成员可见时,可根据此参数在创建项目的同时添加项目成员,也可通过添加项目成员接口单独添加,前提是成员已经创建
默认创建者本人已添加为项目成员
入参:(Header传值)
Authorization 是 - 传递AccessToken 格式:Bearer {AccessToken}
入参示例:(application/json)

 

{
    "projectName": "我的项目",
    "projectCode": "PROJ_001",
    "projectDescribe": "项目描述",
    "projectVisibility": "0",
    "integrationIds": "integrationId1,integrationId2,integrationId3,integrationId4"
}
回参示例:(application/json)

 

{
    "code": 0,
    "msg": null,
    "data": null,
    "ok": true
}
package com.hoteam.sview.demo;

import cn.hutool.core.util.StrUtil;
import cn.hutool.http.ContentType;
import cn.hutool.http.Header;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpStatus;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 创建项目Demo
 * 接口:POST /login-register/open-api/projects
 * <p>
 * 成功判定:HTTP 200 且 code=0
 * 失败:HTTP 401 / 非 2xx / code!=0 / 网络异常,返回 false
 */
@Slf4j
public class CreateProjectHutoolDemo {

    /** 接口地址(按实际环境替换 host) */
    private static final String CREATE_PROJECT_URL =
            "http://your-host/login-register/open-api/projects";

    /** AccessToken(按实际值替换,可通过 /auth/oauth2/token 接口预先获取) */
    private static final String ACCESS_TOKEN = "your_access_token";

    public static void main(String[] args) {
        // 示例:创建项目(指定成员可见)
        boolean createResult = createProject(
                "我的项目",                     // projectName 项目名称(必填,建议50字符内)
                "PROJ_001",                   // projectCode 项目编码(必填,外部唯一编码)
                "项目描述",                    // projectDescribe 项目描述(非必填)
                "0",                          // projectVisibility 公开范围:0指定成员可见 /1企业所有成员可见(必填)
                "integrationId1,integrationId2,integrationId3,integrationId4" // integrationIds 成员外部唯一ID,英文逗号分隔,非必填
        );
        if (!createResult) {
            log.warn("创建项目失败");
            return;
        }
        log.info("创建项目成功");
    }

    /**
     * 创建项目
     *
     * @param projectName      项目名称(必填,建议长度50字符以内)
     * @param projectCode      项目编码(必填,外部平台项目唯一编码)
     * @param projectDescribe  项目描述(非必填)
     * @param projectVisibility 公开范围:0=指定成员可见,1=企业所有成员可见(必填)
     * @param integrationIds   成员外部平台唯一ID,多个英文逗号隔开(非必填)
     * @return 成功返回 true;失败返回 false
     */
    public static boolean createProject(String projectName,
                                       String projectCode,
                                       String projectDescribe,
                                       String projectVisibility,
                                       String integrationIds) {
        // 1. 参数校验
        if (StrUtil.isBlank(projectName) || StrUtil.isBlank(projectCode) || StrUtil.isBlank(projectVisibility)) {
            log.warn("创建项目必填参数缺失:projectName={}, projectCode={}, projectVisibility={}",
                    projectName, projectCode, projectVisibility);
            return false;
        }
        if (projectName.length() > 50) {
            log.warn("项目名称建议不超过50个字符:projectName={}", projectName);
            return false;
        }
        if (!"0".equals(projectVisibility) && !"1".equals(projectVisibility)) {
            log.warn("公开范围参数非法,仅支持 0(指定成员可见) / 1(企业所有成员可见)");
            return false;
        }

        // 2. 组装请求体
        Map<String, Object> requestMap = new HashMap<>();
        requestMap.put("projectName", projectName);
        requestMap.put("projectCode", projectCode);
        requestMap.put("projectDescribe", projectDescribe);
        requestMap.put("projectVisibility", projectVisibility);
        requestMap.put("integrationIds", integrationIds);
        String requestBody = JSONUtil.toJsonStr(requestMap);
        log.info("创建项目请求报文:{}", requestBody);

        // 3. 发起请求
        try (HttpResponse response = HttpRequest.post(CREATE_PROJECT_URL)
                // 公共 Header
                .header("tenant-id", "1")
                .header("deviceId", "web")
                .header("deviceModel", "web")
                .header("deviceType", "4")
                .header("lang", "zh-CN")
                // 认证 + Content-Type
                .header(Header.AUTHORIZATION, "Bearer " + ACCESS_TOKEN)
                .header(Header.CONTENT_TYPE, ContentType.JSON.getValue())
                .body(requestBody)
                .timeout(10_000)
                .execute()) {

            int status = response.getStatus();
            String body = response.body();
            log.info("创建项目响应:status={}, body={}", status, body);

            // 3.1 401 认证失败
            if (status == HttpStatus.HTTP_UNAUTHORIZED) {
                log.warn("创建项目认证失败(401),accessToken 可能失效,body={}", body);
                return false;
            }
            // 3.2 非 2xx 或响应体为空
            if (!response.isOk() || StrUtil.isBlank(body)) {
                log.warn("创建项目请求失败:status={}, body={}", status, body);
                return false;
            }

            // 4. 业务字段判定:仅以 code=0 为成功
            JSONObject json = JSONUtil.parseObj(body);
            Integer code = json.getInt("code");
            if (code == null || code != 0) {
                log.warn("创建项目业务失败:code={}, msg={}", code, json.getStr("msg"));
                return false;
            }

            return true;
        } catch (Exception e) {
            log.error("调用创建项目接口异常", e);
            return false;
        }
    }
}