fix(用户身份状态管理): Forge用户注销后微服务平台用户需如何处理

用户离职/注销状态未正确显示:
https://pm.gitlink.org.cn/Gitlink/projects/107/bug/122179

Signed-off-by: OTTO <731554297@qq.com>
This commit is contained in:
OTTO 2024-10-15 15:15:21 +08:00
parent 19bff8f711
commit f13e0e000d
14 changed files with 121 additions and 142 deletions

View File

@ -4,6 +4,7 @@ import com.microservices.common.core.annotation.Excel;
import com.microservices.common.core.annotation.Excel.ColumnType;
import com.microservices.common.core.annotation.Excel.Type;
import com.microservices.common.core.constant.UserConstants;
import com.microservices.common.core.utils.StringUtils;
import com.microservices.common.core.utils.bean.BeanUtils;
import com.microservices.common.core.utils.html.EscapeUtil;
import com.microservices.common.core.web.domain.BaseEntity;
@ -96,8 +97,10 @@ public class SysUser extends BaseEntity {
public SimpleSysUser toSimpleSysUser(String gitlinkBaseUrl) {
SimpleSysUser target = new SimpleSysUser();
BeanUtils.copyProperties(this, target);
String gitlinkUrl = EscapeUtil.removeExtraSlashOfUrl(gitlinkBaseUrl + "/" + this.userName);
target.setGitlinkUrl(gitlinkUrl);
if (StringUtils.isNotEmpty(this.userName)) {
String gitlinkUrl = EscapeUtil.removeExtraSlashOfUrl(gitlinkBaseUrl + "/" + this.userName);
target.setGitlinkUrl(gitlinkUrl);
}
return target;
}

View File

@ -1,7 +1,9 @@
package com.microservices.pms.common.service;
import com.microservices.common.core.web.domain.BaseEntity;
import com.microservices.pms.enterprise.domain.vo.GitLinkUserSimpleInfoVo;
import com.microservices.pms.enterprise.domain.vo.GitlinkOrganizationTeamVo;
import com.microservices.pms.project.domain.vo.BaseEntityVo;
import com.microservices.system.api.domain.*;
import java.util.HashMap;
@ -37,6 +39,8 @@ public interface IPmsCommonService
public SimpleGitlinkUser getSimpleGitlinkUserByGitlinkUserId(Long gitlinkUserId);
public SimpleGitlinkUser getSimpleGitlinkUserByUsername(String username);
public void setBaseEntityVo(BaseEntityVo baseEntityVo, BaseEntity baseEntity);
SysUser getSysUserByGitlinkId(Long gitlinkUserId);
/**

View File

@ -6,6 +6,7 @@ import com.microservices.common.core.constant.UserConstants;
import com.microservices.common.core.enums.UserIdentityStatus;
import com.microservices.common.core.exception.ServiceException;
import com.microservices.common.core.utils.StringUtils;
import com.microservices.common.core.web.domain.BaseEntity;
import com.microservices.common.httpClient.util.GitLinkRequestHelper;
import com.microservices.common.security.utils.SecurityUtils;
import com.microservices.pms.common.service.IPmsCommonService;
@ -13,6 +14,7 @@ import com.microservices.pms.enterprise.domain.PmsEnterprise;
import com.microservices.pms.enterprise.domain.vo.GitLinkUserSimpleInfoVo;
import com.microservices.pms.enterprise.domain.vo.GitlinkOrganizationTeamVo;
import com.microservices.pms.enterprise.service.IPmsEnterpriseService;
import com.microservices.pms.project.domain.vo.BaseEntityVo;
import com.microservices.pms.project.service.IPmsProjectMembersService;
import com.microservices.pms.utils.PmsGitLinkRequestUrl;
import com.microservices.pms.utils.PmsUtils;
@ -246,4 +248,14 @@ public class PmsCommonServiceImpl implements IPmsCommonService {
}
return sysUser.toSimpleGitlinkUser();
}
@Override
public void setBaseEntityVo(BaseEntityVo baseEntityVo, BaseEntity baseEntity) {
if (StringUtils.isNotEmpty(baseEntity.getCreateBy())) {
baseEntityVo.setCreateBy(getSimpleSysUserByUsername(baseEntity.getCreateBy()));
}
if (StringUtils.isNotEmpty(baseEntity.getUpdateBy())) {
baseEntityVo.setUpdateBy(getSimpleSysUserByUsername(baseEntity.getUpdateBy()));
}
}
}

View File

@ -5,6 +5,7 @@ import com.microservices.common.core.utils.bean.BeanUtils;
import com.microservices.pms.product.domain.PmsProduct;
import com.microservices.pms.product.domain.PmsProductModule;
import com.microservices.pms.product.domain.PmsProductPlan;
import com.microservices.pms.project.domain.vo.BaseEntityVo;
import com.microservices.system.api.domain.SimpleSysUser;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -21,7 +22,7 @@ import java.util.List;
*/
@Data
@ApiModel("产品需求数据对象")
public class PmsProductRequirementDataVo
public class PmsProductRequirementDataVo extends BaseEntityVo
{
/** 需求标识 */
@ApiModelProperty(value = "需求标识")
@ -71,39 +72,16 @@ public class PmsProductRequirementDataVo
@ApiModelProperty(value = "结束时间")
private Date endTime;
/**
* 需求负责人列表
*/
@ApiModelProperty(value = "需求负责人列表")
private List<SimpleSysUser> requirementAssigneeList;
/** 需求创建人 */
@ApiModelProperty(value = "需求创建人")
private SimpleSysUser createBy;
/** 关联项目ID */
@ApiModelProperty(value = "关联项目ID")
private Long pmsProjectId;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间")
private Date updateTime;
/**
* 更新者
*/
@ApiModelProperty(value = "更新者")
private SimpleSysUser updateBy;
public PmsProductRequirementDetailVo toPmsProductRequirementDetailVo(){
PmsProductRequirementDetailVo target = new PmsProductRequirementDetailVo();
BeanUtils.copyProperties(this, target);

View File

@ -1,12 +1,10 @@
package com.microservices.pms.productLibrary.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.microservices.pms.project.domain.vo.BaseEntityVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 制品库数据对象
*
@ -15,7 +13,7 @@ import java.util.Date;
*/
@Data
@ApiModel("产品库制品数据对象")
public class PmsProductLibraryComponentDataVo {
public class PmsProductLibraryComponentDataVo extends BaseEntityVo {
/**
* 制品ID
@ -69,29 +67,4 @@ public class PmsProductLibraryComponentDataVo {
*/
@ApiModelProperty(value = "制品下载地址")
private String downloadUrl;
/**
* 创建者
*/
@ApiModelProperty(value = "创建者", hidden = true)
private String createBy;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间", hidden = true)
private Date createTime;
/**
* 更新者
*/
@ApiModelProperty(value = "更新者", hidden = true)
private String updateBy;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间", hidden = true)
private Date updateTime;
}

View File

@ -1,12 +1,10 @@
package com.microservices.pms.productLibrary.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.microservices.pms.project.domain.vo.BaseEntityVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 制品库-仓库对象 pms_product_library_repositories
*
@ -15,7 +13,7 @@ import java.util.Date;
*/
@Data
@ApiModel("制品仓库简化对象")
public class PmsProductLibraryRepositoriesSimpleVo {
public class PmsProductLibraryRepositoriesSimpleVo extends BaseEntityVo {
/**
* 制品仓库ID
@ -42,29 +40,4 @@ public class PmsProductLibraryRepositoriesSimpleVo {
*/
@ApiModelProperty(value = "制品仓库访问路径")
private String url;
/**
* 创建者
*/
@ApiModelProperty(value = "创建者")
private String createBy;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新者
*/
@ApiModelProperty(value = "更新者")
private String updateBy;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}

View File

@ -9,6 +9,7 @@ import com.microservices.common.core.utils.StringUtils;
import com.microservices.common.core.utils.html.EscapeUtil;
import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.common.security.utils.SecurityUtils;
import com.microservices.pms.common.service.IPmsCommonService;
import com.microservices.pms.document.domain.vo.PmsDocumentDetailVo;
import com.microservices.pms.document.domain.vo.PmsDocumentVo;
import com.microservices.pms.document.service.IPmsDocumentService;
@ -73,6 +74,8 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService {
private RemoteFileService remoteFileService;
@Autowired
private IPmsDocumentService pmsDocumentService;
@Autowired
private IPmsCommonService pmsCommonService;
@Override
public GenericsTableDataInfo<PmsProductLibraryComponentDataVo> selectComponentList(PmsProductLibraryComponentSearchVo search) {
@ -97,6 +100,7 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService {
repoList.stream().filter(x -> x.getId().equals(component.getRepoId())).findFirst().ifPresent(repo -> pmsProductLibraryComponentDataVo.setDownloadUrl(
EscapeUtil.removeExtraSlashOfUrl(
String.format("%s/%s", repo.getUrl(), component.getPath()))));
pmsCommonService.setBaseEntityVo(pmsProductLibraryComponentDataVo, component);
return pmsProductLibraryComponentDataVo;
}
@ -118,7 +122,13 @@ public class PmsProductLibraryServiceImpl implements IPmsProductLibraryService {
@Override
public GenericsTableDataInfo<PmsProductLibrarySimpleVo> selectPmsProductLibraryPageList(String enterpriseIdentifier, String name) {
return PageUtils.toPage(pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryList(enterpriseIdentifier, name), PmsProductLibraryRepositories::toPmsProductLibrarySimpleVo);
return PageUtils.toPage(pmsProductLibraryRepositoriesMapper.selectPmsProductLibraryList(enterpriseIdentifier, name), this::toPmsProductLibrarySimpleVo);
}
private PmsProductLibrarySimpleVo toPmsProductLibrarySimpleVo(PmsProductLibraryRepositories pmsProductLibraryRepositories) {
PmsProductLibrarySimpleVo pmsProductLibrarySimpleVo = pmsProductLibraryRepositories.toPmsProductLibrarySimpleVo();
pmsCommonService.setBaseEntityVo(pmsProductLibrarySimpleVo, pmsProductLibraryRepositories);
return pmsProductLibrarySimpleVo;
}
@Override

View File

@ -0,0 +1,45 @@
package com.microservices.pms.project.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.microservices.system.api.domain.SimpleSysUser;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 基础信息
*
* @author OTTO
*/
@Data
public class BaseEntityVo {
/**
* 创建者
*/
@ApiModelProperty(value = "创建者")
private SimpleSysUser createBy;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新者
*/
@ApiModelProperty(value = "更新者")
private SimpleSysUser updateBy;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间")
private Date updateTime;
}

View File

@ -19,9 +19,7 @@ import java.util.List;
* @date 2023-12-14
*/
@Data
public class PmsProjectTestReportChartVo
{
public class PmsProjectTestReportChartVo extends BaseEntityVo {
/** 测试报告id */
@ApiModelProperty(value = "测试报告id")
private Long id;
@ -38,17 +36,6 @@ public class PmsProjectTestReportChartVo
@ApiModelProperty(value = "测试报告总结")
private String summary;
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date createTime;
@ApiModelProperty(value = "更新时间")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date updateTime;
@ApiModelProperty(value = "创建人")
private String createBy;
@ApiModelProperty(value = "测试报告负责人")
private SimpleSysUser reportAssignee;

View File

@ -1,6 +1,5 @@
package com.microservices.pms.project.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.microservices.common.core.utils.bean.BeanUtils;
import com.microservices.pms.product.domain.PmsProductModule;
import com.microservices.pms.product.domain.PmsProductRequirementTag;
@ -11,7 +10,6 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
@ -22,7 +20,7 @@ import java.util.List;
*/
@Data
@ApiModel("测试用例数据对象")
public class PmsProjectTestcaseDataVo {
public class PmsProjectTestcaseDataVo extends BaseEntityVo {
/**
* 用例ID
@ -73,32 +71,6 @@ public class PmsProjectTestcaseDataVo {
private Long index;
/**
* 创建者
*/
@ApiModelProperty(value = "创建者")
private String createBy;
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "创建时间")
private Date createTime;
/**
* 更新者
*/
@ApiModelProperty(value = "更新者")
private String updateBy;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间")
private Date updateTime;
public PmsProjectTestcaseDetailVo toPmsProjectTestcaseDetailVo() {
PmsProjectTestcaseDetailVo target = new PmsProjectTestcaseDetailVo();
BeanUtils.copyProperties(this, target);

View File

@ -74,7 +74,7 @@ public class PmsProjectIssuesService {
}
}
private JSONObject setProjectIssueListUserState(JSONObject issueListResult) {
public JSONObject setProjectIssueListUserState(JSONObject issueListResult) {
HashMap<Long, String> gitlinkUserNickNameMap = new HashMap<>();
if (issueListResult.containsKey("issues")) {
JSONArray issues = issueListResult.getJSONArray("issues");
@ -344,7 +344,8 @@ public class PmsProjectIssuesService {
JSONObject searchObj = new JSONObject();
convertObjectToJSONObject(pmsProjectSprintLinkIssuesSearchVo, searchObj, null);
try {
return gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_SPRINT_ISSUES(searchObj));
JSONObject result = gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_SPRINT_ISSUES(searchObj));
return setProjectIssueUserState(result);
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}
@ -356,7 +357,8 @@ public class PmsProjectIssuesService {
//转换为issue入参
JSONObject issueInput = new JSONObject();
Map<Class<?>, String> formatPatterns = new HashMap<>();
formatPatterns.put(Date.class, "yyyy-MM-dd"); // 添加Date类型的格式化pattern
// 添加Date类型的格式化pattern
formatPatterns.put(Date.class, "yyyy-MM-dd");
convertObjectToJSONObject(pmsProjectIssuesInputVo, issueInput, formatPatterns);
return issueInput;
}

View File

@ -13,6 +13,7 @@ import com.microservices.pms.project.domain.vo.*;
import com.microservices.pms.project.mapper.PmsProjectSprintMapper;
import com.microservices.pms.project.service.IPmsProjectService;
import com.microservices.pms.project.service.IPmsProjectSprintService;
import com.microservices.pms.project.service.PmsProjectIssuesService;
import com.microservices.pms.utils.PmsGitLinkRequestUrl;
import com.microservices.pms.utils.PmsUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -53,6 +54,10 @@ public class PmsProjectSprintServiceImpl implements IPmsProjectSprintService
@Lazy
private IPmsProjectService pmsProjectService;
@Autowired
@Lazy
private PmsProjectIssuesService pmsProjectIssuesService;
/**
* 查询项目迭代
@ -255,7 +260,7 @@ public class PmsProjectSprintServiceImpl implements IPmsProjectSprintService
.forEach(key -> searchObj.put(key, String.valueOf(searchObj.get(key))));
JSONObject issues = null;
try {
issues = gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_ISSUE_LIST(searchObj));
issues = pmsProjectIssuesService.setProjectIssueListUserState(gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_ISSUE_LIST(searchObj)));
} catch (URISyntaxException e) {
throw new RuntimeException(e);
}

View File

@ -17,10 +17,7 @@ import com.microservices.pms.project.domain.PmsProjectTestReportSheet;
import com.microservices.pms.project.domain.PmsProjectTestsheetCases;
import com.microservices.pms.project.domain.vo.*;
import com.microservices.pms.project.mapper.*;
import com.microservices.pms.project.service.IPmsProjectService;
import com.microservices.pms.project.service.IPmsProjectSprintService;
import com.microservices.pms.project.service.IPmsProjectTestReportService;
import com.microservices.pms.project.service.IPmsProjectTestsheetService;
import com.microservices.pms.project.service.*;
import com.microservices.pms.utils.PmsGitLinkRequestUrl;
import com.microservices.pms.utils.PmsUtils;
import com.microservices.system.api.domain.SimpleSysUser;
@ -83,7 +80,10 @@ public class PmsProjectTestReportServiceImpl implements IPmsProjectTestReportSer
private PmsProjectTestsheetCasesMapper pmsProjectTestsheetCasesMapper;
@Autowired
private IPmsCommonService commonService;
private IPmsCommonService pmsCommonService;
@Autowired
private PmsProjectIssuesService pmsProjectIssuesService;
/**
* 查询测试报告
@ -227,7 +227,7 @@ public class PmsProjectTestReportServiceImpl implements IPmsProjectTestReportSer
BeanUtils.copyProperties(pmsProjectTestReport, pmsProjectTestReportDetailVo);
List<PmsProjectTestsheetVo> pmsProjectTestSheetVos = this.getPmsProjectTestSheetVoListByTestReportId(pmsProjectTestReport.getId());
pmsProjectTestReportDetailVo.setPmsProjectTestsheetList(pmsProjectTestSheetVos);
pmsProjectTestReportDetailVo.setCreator(commonService.getSimpleSysUserByUsername(pmsProjectTestReport.getCreateBy()));
pmsProjectTestReportDetailVo.setCreator(pmsCommonService.getSimpleSysUserByUsername(pmsProjectTestReport.getCreateBy()));
return pmsProjectTestReportDetailVo;
}
@ -246,15 +246,16 @@ public class PmsProjectTestReportServiceImpl implements IPmsProjectTestReportSer
PmsProjectTestReportDetailVo pmsProjectTestReportDetailVo = new PmsProjectTestReportDetailVo();
BeanUtils.copyProperties(pmsProjectTestReport, pmsProjectTestReportDetailVo);
pmsProjectTestReportDetailVo.setPmsProjectTestsheetList(this.getPmsProjectTestSheetVoListByTestReportId(pmsProjectTestReport.getId()));
pmsProjectTestReportDetailVo.setCreator(commonService.getSimpleSysUserByUsername(pmsProjectTestReport.getCreateBy()));
pmsProjectTestReportDetailVo.setCreator(pmsCommonService.getSimpleSysUserByUsername(pmsProjectTestReport.getCreateBy()));
return pmsProjectTestReportDetailVo;
}
private PmsProjectTestReportChartVo getPmsProjectTestReportChartVo(PmsProjectTestReport pmsProjectTestReport) {
PmsProjectTestReportChartVo pmsProjectTestReportChartVo = new PmsProjectTestReportChartVo();
BeanUtils.copyProperties(pmsProjectTestReport, pmsProjectTestReportChartVo);
pmsProjectTestReportChartVo.setReportAssignee(commonService.getSimpleSysUserByGitlinkUserId(pmsProjectTestReport.getReportAssigneeId()));
pmsProjectTestReportChartVo.setReportAssignee(pmsCommonService.getSimpleSysUserByGitlinkUserId(pmsProjectTestReport.getReportAssigneeId()));
buildProjectTestReportChartVo(pmsProjectTestReportChartVo);
pmsCommonService.setBaseEntityVo(pmsProjectTestReportChartVo, pmsProjectTestReport);
return pmsProjectTestReportChartVo;
}
@ -304,7 +305,7 @@ public class PmsProjectTestReportServiceImpl implements IPmsProjectTestReportSer
String testerIdsString = Arrays.stream(testSheetCaseTesterIds)
.map(String::valueOf) // 将Long转换为String
.collect(Collectors.joining(",")); // 使用逗号连接所有字符串
return commonService.getSimpleSysUserListByGitlinkUserIdsAndCache(testerIdsString, null);
return pmsCommonService.getSimpleSysUserListByGitlinkUserIdsAndCache(testerIdsString, null);
}
private void setEarliestStartTimeAndLatestEndTimeToVo(List<PmsProjectTestsheetVo> pmsProjectTestSheetVos, PmsProjectTestReportChartVo pmsProjectTestReportChartVo) {
@ -409,7 +410,7 @@ public class PmsProjectTestReportServiceImpl implements IPmsProjectTestReportSer
params.put("sort_direction", "asc");
JSONObject result = null;
try {
result = gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_ISSUE_LIST(params));
result = pmsProjectIssuesService.setProjectIssueListUserState(gitLinkRequestHelper.doGet(PmsGitLinkRequestUrl.GET_ISSUE_LIST(params)));
} catch (URISyntaxException e) {
throw new RuntimeException(e);
} catch (ServiceException se) {

View File

@ -129,6 +129,19 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService
, x -> pmsProductModuleService.selectPmsProductModuleById(x, false)
, pmsProjectTestcase.getPmsModuleId()));
}
// 设置需求创建人
pmsProjectTestcaseDataVo.setCreateBy(
PmsUtils.getSelectObjectInCache(
hashMap
, pmsCommonService::getSimpleSysUserByUsername
, pmsProjectTestcase.getCreateBy())
);
// 设置需求更新人
pmsProjectTestcaseDataVo.setUpdateBy(
PmsUtils.getSelectObjectInCache(
hashMap
, pmsCommonService::getSimpleSysUserByUsername
, pmsProjectTestcase.getUpdateBy()));
return pmsProjectTestcaseDataVo;
}
@ -145,6 +158,7 @@ public class PmsProjectTestcaseServiceImpl implements IPmsProjectTestcaseService
// 设置附件列表
pmsProjectTestcaseDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProjectTestcase.getFileIdentifiers()));
pmsCommonService.setBaseEntityVo(pmsProjectTestcaseDetailVo, pmsProjectTestcase);
return pmsProjectTestcaseDetailVo;
}