Commit 3ab6e756 authored by shengnan hu's avatar shengnan hu
Browse files

init

parents
Pipeline #294 passed with stage
in 2 minutes and 13 seconds
default:
tags:
- test # runner 需配置相同tag
interruptible: true # 任务可被后来pipeline打断
stages:
- upload-mr-analysis
- schedule-analyze-stage
workflow:
rules:
- if: $CI_MERGE_REQUEST_IID
- if: $CI_PIPELINE_SOURCE == "schedule"
variables:
MERGE_REQUEST_PARAM: "{mergeRequestId:$CI_MERGE_REQUEST_IID,projectId:$CI_PROJECT_ID,jobId:$CI_JOB_ID}"
JAVA_MAIN_SOURCE: "src/main/java" # 检索差异文件脚本变量,表示只检查main文件,不检查test文件
SCANNER_SCRIPT: "/root/analysis-tool/bin/scanner" # 套件命令执行文件
SCANNER_JAVA_LICENSE_PATH: "/root/analysis-tool/Hub-ci-java.txt" # JAVA授权文件
SCANNER_C_LICENSE_PATH: "/root/analysis-tool/Hub-ci-c.txt" # C授权文件
# 根据项目进行配置
HUB_LOGIN_NAME: "admin" # 登录名
HUB_PASSWORD: "1234qwer" # 密码
HUB_URL: "http://192.168.68.153:9521" # 平台URL
HUB_PROJECT_ID: "12" # 对应平台项目Id
REPOSITORY_FULL_PATH: "/builds/hub-gitlab/root/mall4cloudnew" # 项目绝对路径,供套件分析
REPOSITORY_NAME: "mall4cloudnew" # 项目名称
JAVA_SUFFIX: ".java"
ANALYSIS_PARAM: "MR_IID:$CI_MERGE_REQUEST_IID,JOB_ID:$CI_JOB_ID,false" # 分析名称 描述 是否为项目分析
ANALYSIS_PARAM_SCHEDULE: "定时项目分析,任务ID:$CI_JOB_ID,true" # 分析名称 描述 是否为项目分析
upload-job:
stage: upload-mr-analysis
# 包含分析工具运行所需环境
# 需要设置 runner config: pull_policy = "if-not-present"
# 使用本地镜像,本地需要有这个镜像
# 需要设置 runner config:mac_address(固定IP 工具授权需要)
image: docker.ustchcs.com/ubuntu-javacli-quality:v3.0
allow_failure: false
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
before_script:
# 授权
- locale-gen zh_CN
- export LANG=zh_CN.UTF-8
- export LC_ALL=zh_CN.UTF-8
- export LANGUAGE=zh_CN.UTF-8
- $SCANNER_SCRIPT authorize -n cafehunter $SCANNER_JAVA_LICENSE_PATH
# - $SCANNER_SCRIPT authorize -n seahunter $SCANNER_C_LICENSE_PATH
# 将游离分支转换为正常分支 以供套件分析
- cd $REPOSITORY_FULL_PATH
- git fetch
- git branch tmp-$CI_JOB_ID-$CI_JOB_NAME $CI_COMMIT_SHA
- git checkout -b $CI_COMMIT_REF_NAME
- git merge tmp-$CI_JOB_ID-$CI_JOB_NAME
# 获取分析文件
- chmod 777 $REPOSITORY_FULL_PATH/getCommittedFiles.sh
- export COMMITTED_FILES=$($REPOSITORY_FULL_PATH/getCommittedFiles.sh)
script:
# 分析
- echo "SCANNER_SCRIPT scan $COMMITTED_FILES -umr $REPOSITORY_NAME $HUB_LOGIN_NAME $HUB_PASSWORD $HUB_URL $HUB_PROJECT_ID $ANALYSIS_PARAM $MERGE_REQUEST_PARAM"
- $SCANNER_SCRIPT scan $COMMITTED_FILES -umr $REPOSITORY_NAME $HUB_LOGIN_NAME $HUB_PASSWORD $HUB_URL $HUB_PROJECT_ID $ANALYSIS_PARAM $MERGE_REQUEST_PARAM
# 删除过程中用到的分支
- "git branch -d tmp-$CI_JOB_ID-$CI_JOB_NAME"
- "git checkout $CI_COMMIT_SHA"
- "git branch -D $CI_COMMIT_REF_NAME"
after_script:
- "git branch -d tmp-$CI_JOB_ID-$CI_JOB_NAME"
- "git checkout $CI_COMMIT_SHA"
- "git branch -D $CI_COMMIT_REF_NAME"
schedule-analyze:
stage: schedule-analyze-stage
image: docker.ustchcs.com/ubuntu-javacli-quality:v3.0
allow_failure: false
only:
- schedules
before_script:
- locale-gen zh_CN
- export LANG=zh_CN.UTF-8
- export LC_ALL=zh_CN.UTF-8
- export LANGUAGE=zh_CN.UTF-8
- $SCANNER_SCRIPT authorize -n cafehunter $SCANNER_JAVA_LICENSE_PATH
- "cd $REPOSITORY_FULL_PATH"
- "git fetch"
- "git checkout develop"
- "git pull origin develop"
- "locale-gen zh_CN"
- "export LANG=zh_CN.UTF-8"
- "export LC_ALL=zh_CN.UTF-8"
- "export LANGUAGE=zh_CN.UTF-8"
script:
- echo 'cafehunter-cli install complete.'
- echo "$SCANNER_SCRIPT scan $REPOSITORY_FULL_PATH/mall4cloud-leaf -u $REPOSITORY_NAME $HUB_LOGIN_NAME $HUB_PASSWORD $HUB_URL $HUB_PROJECT_ID $ANALYSIS_PARAM_SCHEDULE"
- "$SCANNER_SCRIPT scan $REPOSITORY_FULL_PATH/mall4cloud-leaf -u $REPOSITORY_NAME $HUB_LOGIN_NAME $HUB_PASSWORD $HUB_URL $HUB_PROJECT_ID $ANALYSIS_PARAM_SCHEDULE"
# - echo "$SCANNER_SCRIPT scan $REPOSITORY_FULL_PATH/mall4cloud-leaf/src/main/java/com/mall4j/cloud/leaf/common/Result.java -u $REPOSITORY_NAME $HUB_LOGIN_NAME $HUB_PASSWORD $HUB_URL $HUB_PROJECT_ID $ANALYSIS_PARAM_SCHEDULE"
# - "$SCANNER_SCRIPT scan $REPOSITORY_FULL_PATH/mall4cloud-leaf/src/main/java/com/mall4j/cloud/leaf/common/Result.java -u $REPOSITORY_NAME $HUB_LOGIN_NAME $HUB_PASSWORD $HUB_URL $HUB_PROJECT_ID $ANALYSIS_PARAM_SCHEDULE"
#!/bin/bash
function build() {
local -a COMMITTED_FILES
COMMITTED_FILES=$(git diff --name-only --diff-filter=DCM $CI_COMMIT_SHA origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME)
if [ -z "$COMMITTED_FILES" ]; then
return
fi
local -a check_files
for dir in $COMMITTED_FILES; do
if [[ $dir =~ ${JAVA_SUFFIX} ]]; then
if [[ $dir =~ ${JAVA_MAIN_SOURCE} ]]; then
#如果不是 则跳过剩下的步骤
check_files+=("$REPOSITORY_FULL_PATH/"${dir})
fi
else
check_files+=("$REPOSITORY_FULL_PATH/"${dir})
fi
done
if [ -z "$check_files" ]; then
return
fi
S=$(IFS=' '; echo "${check_files[*]}")
echo $S
}
build "$@"
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mall4cloud-api</artifactId>
<groupId>com.mall4j.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mall4cloud-api-auth</artifactId>
<packaging>jar</packaging>
<description>授权对内接口</description>
<dependencies>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-common-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
package com.mall4j.cloud.api.auth.bo;
import com.mall4j.cloud.api.auth.constant.SysTypeEnum;
/**
* 保存在token信息里面的用户信息
*
* com.mall4j.cloud.auth.service.impl.AuthAccountServiceImpl
* com.mall4j.cloud.auth.controller.LoginController
* @author FrozenWatermelon
* @date 2020/7/3
*/
public class UserInfoInTokenBO {
/**
* 用户在自己系统的用户id
*/
private Long userId;
/**
* 全局唯一的id,
*/
private Long uid;
/**
* 租户id (商家id)
*/
private Long tenantId;
/**
* 系统类型
* @see SysTypeEnum
*/
private Integer sysType;
/**
* 是否是管理员
*/
private Integer isAdmin;
private String bizUserId;
private String bizUid;
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getUid() {
return uid;
}
public void setUid(Long uid) {
this.uid = uid;
}
public Integer getSysType() {
return sysType;
}
public void setSysType(Integer sysType) {
this.sysType = sysType;
}
public Integer getIsAdmin() {
return isAdmin;
}
public void setIsAdmin(Integer isAdmin) {
this.isAdmin = isAdmin;
}
public Long getTenantId() {
return tenantId;
}
public void setTenantId(Long tenantId) {
this.tenantId = tenantId;
}
public String getBizUserId() {
return bizUserId;
}
public void setBizUserId(String bizUserId) {
this.bizUserId = bizUserId;
}
public String getBizUid() {
return bizUid;
}
public void setBizUid(String bizUid) {
this.bizUid = bizUid;
}
@Override
public String toString() {
return "UserInfoInTokenBO{" +
"userId=" + userId +
", uid=" + uid +
", tenantId=" + tenantId +
", sysType=" + sysType +
", isAdmin=" + isAdmin +
", bizUserId='" + bizUserId + '\'' +
", bizUid='" + bizUid + '\'' +
'}';
}
}
package com.mall4j.cloud.api.auth.constant;
/**
* 系统类型
* @author FrozenWatermelon
* @date 2020/7/2
*/
public enum SysTypeEnum {
/**
* 普通用户系统
*/
ORDINARY(0),
/**
* 商家端
*/
MULTISHOP(1),
/**
* 平台端
*/
PLATFORM(2),
;
private final Integer value;
public Integer value() {
return value;
}
SysTypeEnum(Integer value) {
this.value = value;
}
}
package com.mall4j.cloud.api.auth.dto;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
/**
* @author FrozenWatermelon
* @date 2020/9/22
*/
public class AuthAccountDTO {
/**
* 用户名
*/
@NotBlank(message = "username not blank")
private String username;
/**
* 密码
*/
private String password;
/**
* 创建ip
*/
private String createIp;
/**
* 状态 1:启用 0:禁用 -1:删除
*/
@NotNull(message = "status not null")
private Integer status;
/**
* 系统类型见SysTypeEnum 0.普通用户系统 1.商家端
*/
@NotNull(message = "sysType not null")
private Integer sysType;
/**
* 用户id
*/
@NotNull(message = "userId not null")
private Long userId;
/**
* 所属租户
*/
@NotNull(message = "tenantId not null")
private Long tenantId;
/**
* 是否是管理员
*/
@NotNull(message = "isAdmin not null")
private Integer isAdmin;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCreateIp() {
return createIp;
}
public void setCreateIp(String createIp) {
this.createIp = createIp;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Integer getSysType() {
return sysType;
}
public void setSysType(Integer sysType) {
this.sysType = sysType;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public Long getTenantId() {
return tenantId;
}
public void setTenantId(Long tenantId) {
this.tenantId = tenantId;
}
public Integer getIsAdmin() {
return isAdmin;
}
public void setIsAdmin(Integer isAdmin) {
this.isAdmin = isAdmin;
}
@Override
public String toString() {
return "AuthAccountDTO{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", createIp='" + createIp + '\'' +
", status=" + status +
", sysType=" + sysType +
", userId=" + userId +
", tenantId=" + tenantId +
", isAdmin=" + isAdmin +
'}';
}
}
package com.mall4j.cloud.api.auth.feign;
import com.mall4j.cloud.api.auth.bo.UserInfoInTokenBO;
import com.mall4j.cloud.api.auth.constant.SysTypeEnum;
import com.mall4j.cloud.api.auth.dto.AuthAccountDTO;
import com.mall4j.cloud.api.auth.vo.AuthAccountVO;
import com.mall4j.cloud.api.auth.vo.TokenInfoVO;
import com.mall4j.cloud.common.feign.FeignInsideAuthConfig;
import com.mall4j.cloud.common.response.ServerResponseEntity;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
/**
* @author FrozenWatermelon
* @date 2020/9/22
*/
@FeignClient(value = "mall4cloud-auth",contextId ="account")
public interface AccountFeignClient {
/**
* 保存统一账户
* @param authAccountDTO 账户信息
* @return Long uid
*/
@PostMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/insider/account")
ServerResponseEntity<Long> save(@RequestBody AuthAccountDTO authAccountDTO);
/**
* 更新统一账户
* @param authAccountDTO 账户信息
* @return void
*/
@PutMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/account")
ServerResponseEntity<Void> update(@RequestBody AuthAccountDTO authAccountDTO);
/**
* 更新账户状态
* @param authAccountDTO 账户信息
* @return void
*/
@PutMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/account/status")
ServerResponseEntity<Void> updateAuthAccountStatus(@RequestBody AuthAccountDTO authAccountDTO);
/**
* 根据用户id和系统类型删除用户
* @param userId 用户id
* @return void
*/
@DeleteMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/account/deleteByUserIdAndSysType")
ServerResponseEntity<Void> deleteByUserIdAndSysType(@RequestParam("userId")Long userId);
/**
* 根据用户id和系统类型获取用户信息
* @param userId 用户id
* @param sysType 系统类型
* @return void
*/
@GetMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/account/getByUserIdAndSysType")
ServerResponseEntity<AuthAccountVO> getByUserIdAndSysType(@RequestParam("userId") Long userId,@RequestParam("sysType") Integer sysType);
/**
* 保存用户信息,生成token,返回前端
* @param userInfoInTokenBO 账户信息 和社交账号信息
* @return uid
*/
@PostMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/insider/storeTokenAndGetVo")
ServerResponseEntity<TokenInfoVO> storeTokenAndGetVo(@RequestBody UserInfoInTokenBO userInfoInTokenBO);
/**
* 根据用户名和系统类型获取用户信息
* @param username
* @param sysType
* @return
*/
@PostMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/insider/getByUsernameAndSysType")
ServerResponseEntity<AuthAccountVO> getByUsernameAndSysType(@RequestParam("userName") String username, @RequestParam("sysType") SysTypeEnum sysType);
/**
* 根据用户id与用户类型更新用户信息
* @param userInfoInTokenBO 新的用户信息
* @param userId 用户id
* @param sysType 用户类型
* @return
*/
@PutMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/insider/accout/updateTenantIdByUserIdAndSysType")
ServerResponseEntity<Void> updateUserInfoByUserIdAndSysType(@RequestBody UserInfoInTokenBO userInfoInTokenBO, @RequestParam("userId") Long userId, @RequestParam("sysType") Integer sysType);
/**
* 根据租户id查询商家信息
* @param tenantId
* @return
*/
@GetMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/insider/account/getMerchantInfoByTenantId")
ServerResponseEntity<AuthAccountVO> getMerchantInfoByTenantId(@RequestParam("tenantId") Long tenantId);
}
package com.mall4j.cloud.api.auth.feign;
import com.mall4j.cloud.api.auth.bo.UserInfoInTokenBO;
import com.mall4j.cloud.common.constant.Auth;
import com.mall4j.cloud.common.response.ServerResponseEntity;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author FrozenWatermelon
* @date 2020/7/15
*/
@FeignClient(value = "mall4cloud-auth",contextId ="token")
public interface TokenFeignClient {
/**
* 校验token并返回token保存的用户信息
* @param accessToken accessToken
* @return token保存的用户信息
*/
@GetMapping(value = Auth.CHECK_TOKEN_URI)
ServerResponseEntity<UserInfoInTokenBO> checkToken(@RequestParam("accessToken") String accessToken);
}
package com.mall4j.cloud.api.auth.vo;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* @author FrozenWatermelon
* @date 2020/9/22
*/
public class AuthAccountVO {
/**
* 全平台用户唯一id
*/
private Long uid;
@Schema(description = "用户id" )
private Long userId;
@Schema(description = "用户名" )
private String username;
@Schema(description = "状态 1:启用 0:禁用 -1:删除" )
private Integer status;
@Schema(description = "创建ip" )
private String createIp;
public Long getUid() {
return uid;
}
public void setUid(Long uid) {
this.uid = uid;
}
public String getCreateIp() {
return createIp;
}
public void setCreateIp(String createIp) {
this.createIp = createIp;
}
public Long getUserId() {
return userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
@Override
public String toString() {
return "AuthAccountVO{" +
"uid=" + uid +
", userId=" + userId +
", username='" + username + '\'' +
", status=" + status +
", createIp='" + createIp + '\'' +
'}';
}
}
package com.mall4j.cloud.api.auth.vo;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* token信息,该信息用户返回给前端,前端请求携带accessToken进行用户校验
*
* @author FrozenWatermelon
* @date 2020/7/2
*/
public class TokenInfoVO {
@Schema(description = "accessToken" )
private String accessToken;
@Schema(description = "refreshToken" )
private String refreshToken;
@Schema(description = "在多少秒后过期" )
private Integer expiresIn;
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getRefreshToken() {
return refreshToken;
}
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
public Integer getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(Integer expiresIn) {
this.expiresIn = expiresIn;
}
@Override
public String toString() {
return "TokenInfoVO{" + "accessToken='" + accessToken + '\'' + ", refreshToken='" + refreshToken + '\''
+ ", expiresIn=" + expiresIn + '}';
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mall4cloud-api</artifactId>
<groupId>com.mall4j.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mall4cloud-api-biz</artifactId>
<packaging>jar</packaging>
<description>biz对内接口</description>
<dependencies>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-common-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>mall4cloud-api</artifactId>
<groupId>com.mall4j.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>mall4cloud-api-leaf</artifactId>
<packaging>jar</packaging>
<description>美团分布式id生成接口</description>
<dependencies>
<dependency>
<groupId>com.mall4j.cloud</groupId>
<artifactId>mall4cloud-common-core</artifactId>
<version>${project.version}</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
package com.mall4j.cloud.api.leaf.feign;
import com.mall4j.cloud.common.feign.FeignInsideAuthConfig;
import com.mall4j.cloud.common.response.ServerResponseEntity;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
*
* @author FrozenWatermelon
* @date 2020/09/08
*/
@FeignClient(value = "mall4cloud-leaf",contextId ="segment")
public interface SegmentFeignClient {
/**
* 获取id
* @param key
* @return
*/
@GetMapping(value = FeignInsideAuthConfig.FEIGN_INSIDE_URL_PREFIX + "/insider/segment")
ServerResponseEntity<Long> getSegmentId(@RequestParam("key") String key);
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment