feat: 添加申请次数和历史license显示差异

This commit is contained in:
caiyuchao
2025-08-15 18:47:29 +08:00
parent 929b3d169a
commit 0be3c5816c
4 changed files with 97 additions and 34 deletions

View File

@@ -109,6 +109,10 @@ public class LicenseRespVO implements VO {
@ExcelProperty("申请时间") @ExcelProperty("申请时间")
private LocalDateTime applicationTime; private LocalDateTime applicationTime;
@Schema(description = "申请次数")
@ExcelProperty("申请次数")
private Integer applyCount;
private LicenseRespVO oldLicense; private LicenseRespVO oldLicense;
private boolean hasHistory; private boolean hasHistory;

View File

@@ -123,6 +123,10 @@ public class ProjectRespVO implements VO {
@ExcelProperty("评论数") @ExcelProperty("评论数")
private Integer commentNum; private Integer commentNum;
@Schema(description = "申请数")
@ExcelProperty("申请数")
private Integer applyCount;
@Schema(description = "最后修改时间", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "最后修改时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("最后修改时间") @ExcelProperty("最后修改时间")
private LocalDateTime updateTime; private LocalDateTime updateTime;

View File

@@ -38,6 +38,7 @@ import org.agt.module.system.api.mail.MailSendApi;
import org.agt.module.system.api.mail.dto.MailSendSingleToUserReqDTO; import org.agt.module.system.api.mail.dto.MailSendSingleToUserReqDTO;
import org.agt.module.system.api.notify.NotifyMessageSendApi; import org.agt.module.system.api.notify.NotifyMessageSendApi;
import org.agt.module.system.api.notify.dto.NotifySendSingleToUserReqDTO; import org.agt.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@@ -480,7 +481,12 @@ public class LicenseServiceImpl implements LicenseService {
.eq(LicenseHistoryDO::getLicenseId, license.getId()) .eq(LicenseHistoryDO::getLicenseId, license.getId())
.orderByDesc(LicenseHistoryDO::getApplicationTime)); .orderByDesc(LicenseHistoryDO::getApplicationTime));
Optional<LicenseHistoryDO> histroyOptional = historyList.stream().findFirst(); Optional<LicenseHistoryDO> histroyOptional = historyList.stream().findFirst();
license.setHasHistory(histroyOptional.isPresent()); license.setHasHistory(LicenseStatusEnum.COMPLETED.getCode().equals(license.getStatus()) || histroyOptional.isPresent());
int applyCount = 1;
if (histroyOptional.isPresent()) {
applyCount = applyCount + historyList.size();
}
license.setApplyCount(applyCount);
if (LicenseStatusEnum.REAPPLYING.getCode().equals(license.getStatus())) { if (LicenseStatusEnum.REAPPLYING.getCode().equals(license.getStatus())) {
if (histroyOptional.isPresent()) { if (histroyOptional.isPresent()) {
LicenseHistoryDO historyDO = histroyOptional.get(); LicenseHistoryDO historyDO = histroyOptional.get();
@@ -492,44 +498,53 @@ public class LicenseServiceImpl implements LicenseService {
license.setOldLicense(oldLicense); license.setOldLicense(oldLicense);
int maxLength = oldDetails.size(); List<LicenseDetailVO> mergeDetails = fillMergeDetails(oldDetails, details, false);
if (oldDetails.size() < details.size()) {
maxLength = details.size();
}
List<LicenseDetailVO> mergeDetails = new ArrayList<>();
for (int i = 0; i < maxLength; i++) {
Map<String, String> activationCodeMap = new HashMap<>();
Map<String, List<Integer>> neListMap = new HashMap<>();
Map<String, List<String>> fileUrlListMap = new HashMap<>();
LicenseDetailVO mergeDetail = new LicenseDetailVO();
if (i < oldDetails.size()) {
activationCodeMap.put("old", oldDetails.get(i).getActivationCode());
neListMap.put("old", oldDetails.get(i).getNeList());
fileUrlListMap.put("old", null);
mergeDetail.setFileUrl(oldDetails.get(i).getFileUrl());
mergeDetail.setNeList(oldDetails.get(i).getNeList());
mergeDetail.setActivationCode(oldDetails.get(i).getActivationCode());
mergeDetail.setFileUrlList(oldDetails.get(i).getFileUrlList());
}
if (i < details.size()) {
activationCodeMap.put("new", details.get(i).getActivationCode());
neListMap.put("new", details.get(i).getNeList());
fileUrlListMap.put("new", null);
}
mergeDetail.setActivationCodeMap(activationCodeMap);
mergeDetail.setNeListMap(neListMap);
mergeDetail.setFileUrlListMap(fileUrlListMap);
mergeDetails.add(mergeDetail);
}
license.setNeCodeList(mergeDetails); license.setNeCodeList(mergeDetails);
} }
} }
} }
private static @NotNull List<LicenseDetailVO> fillMergeDetails(List<LicenseDetailVO> oldDetails, List<LicenseDetailVO> details, boolean isHistory) {
int maxLength = oldDetails.size();
if (oldDetails.size() < details.size()) {
maxLength = details.size();
}
List<LicenseDetailVO> mergeDetails = new ArrayList<>();
for (int i = 0; i < maxLength; i++) {
Map<String, String> activationCodeMap = new HashMap<>();
Map<String, List<Integer>> neListMap = new HashMap<>();
Map<String, List<String>> fileUrlListMap = new HashMap<>();
LicenseDetailVO mergeDetail = new LicenseDetailVO();
if (i < oldDetails.size()) {
activationCodeMap.put("old", oldDetails.get(i).getActivationCode());
neListMap.put("old", oldDetails.get(i).getNeList());
fileUrlListMap.put("old", null);
mergeDetail.setFileUrl(oldDetails.get(i).getFileUrl());
mergeDetail.setNeList(oldDetails.get(i).getNeList());
mergeDetail.setActivationCode(oldDetails.get(i).getActivationCode());
mergeDetail.setFileUrlList(oldDetails.get(i).getFileUrlList());
}
if (i < details.size()) {
activationCodeMap.put("new", details.get(i).getActivationCode());
neListMap.put("new", details.get(i).getNeList());
if (isHistory) {
fileUrlListMap.put("old", details.get(i).getFileUrlList());
} else {
fileUrlListMap.put("new", null);
}
}
mergeDetail.setActivationCodeMap(activationCodeMap);
mergeDetail.setNeListMap(neListMap);
mergeDetail.setFileUrlListMap(fileUrlListMap);
mergeDetails.add(mergeDetail);
}
return mergeDetails;
}
private void fillDetail(List<LicenseDetailVO> details, LicenseRespVO licenseRespVO) { private void fillDetail(List<LicenseDetailVO> details, LicenseRespVO licenseRespVO) {
for (LicenseDetailVO detail : details) { for (LicenseDetailVO detail : details) {
List<String> fileUrlList = new ArrayList<>(); List<String> fileUrlList = new ArrayList<>();
@@ -596,13 +611,31 @@ public class LicenseServiceImpl implements LicenseService {
@Override @Override
public List<LicenseRespVO> getLicenseHistory(Long id) { public List<LicenseRespVO> getLicenseHistory(Long id) {
LicenseDO licenseDO = licenseMapper.selectById(id);
List<LicenseRespVO> allLicenses = new ArrayList<>();
if (LicenseStatusEnum.COMPLETED.getCode().equals(licenseDO.getStatus())) {
LicenseRespVO license = BeanUtils.toBean(licenseDO, LicenseRespVO.class);
List<LicenseDetailDO> licenseDetailDOS = licenseDetailMapper.selectList(Wrappers.<LicenseDetailDO>lambdaQuery().eq(LicenseDetailDO::getLicenseId, license.getId()));
List<LicenseDetailVO> details = BeanUtils.toBean(licenseDetailDOS, LicenseDetailVO.class);
fillDetail(details, license);
allLicenses.add(license);
}
List<LicenseHistoryDO> historyDOList = licenseHistoryMapper.selectList(Wrappers.<LicenseHistoryDO>lambdaQuery() List<LicenseHistoryDO> historyDOList = licenseHistoryMapper.selectList(Wrappers.<LicenseHistoryDO>lambdaQuery()
.eq(LicenseHistoryDO::getLicenseId, id).orderByDesc(LicenseHistoryDO::getApplicationTime)); .eq(LicenseHistoryDO::getLicenseId, id).orderByDesc(LicenseHistoryDO::getApplicationTime));
List<LicenseRespVO> voList = BeanUtils.toBean(historyDOList, LicenseRespVO.class); List<LicenseRespVO> voList = BeanUtils.toBean(historyDOList, LicenseRespVO.class);
for (LicenseRespVO licenseRespVO : voList) { for (LicenseRespVO licenseRespVO : voList) {
fillLicenseHistoryRespVO(licenseRespVO); fillLicenseHistoryRespVO(licenseRespVO);
} }
return voList; allLicenses.addAll(voList);
for (int i = 0; i < allLicenses.size(); i++) {
if (i + 1 >= allLicenses.size()) {
continue;
}
allLicenses.get(i).setOldLicense(allLicenses.get(i + 1));
List<LicenseDetailVO> mergeDetails = fillMergeDetails(allLicenses.get(i).getOldLicense().getNeCodeList(), allLicenses.get(i).getNeCodeList(), true);
allLicenses.get(i).setNeCodeList(mergeDetails);
}
return allLicenses;
} }
@Override @Override

View File

@@ -17,9 +17,13 @@ import org.agt.module.license.controller.admin.project.vo.ProjectPageReqVO;
import org.agt.module.license.controller.admin.project.vo.ProjectRespVO; import org.agt.module.license.controller.admin.project.vo.ProjectRespVO;
import org.agt.module.license.controller.admin.project.vo.ProjectSaveReqVO; import org.agt.module.license.controller.admin.project.vo.ProjectSaveReqVO;
import org.agt.module.license.dal.dataobject.customer.CustomerDO; import org.agt.module.license.dal.dataobject.customer.CustomerDO;
import org.agt.module.license.dal.dataobject.license.LicenseDO;
import org.agt.module.license.dal.dataobject.license.LicenseHistoryDO;
import org.agt.module.license.dal.dataobject.project.ProjectDO; import org.agt.module.license.dal.dataobject.project.ProjectDO;
import org.agt.module.license.dal.mysql.comment.CommentMapper; import org.agt.module.license.dal.mysql.comment.CommentMapper;
import org.agt.module.license.dal.mysql.customer.CustomerMapper; import org.agt.module.license.dal.mysql.customer.CustomerMapper;
import org.agt.module.license.dal.mysql.license.LicenseHistoryMapper;
import org.agt.module.license.dal.mysql.license.LicenseMapper;
import org.agt.module.license.dal.mysql.project.ProjectMapper; import org.agt.module.license.dal.mysql.project.ProjectMapper;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@@ -27,6 +31,7 @@ import org.springframework.validation.annotation.Validated;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Optional;
import static org.agt.framework.common.exception.util.ServiceExceptionUtil.exception; import static org.agt.framework.common.exception.util.ServiceExceptionUtil.exception;
import static org.agt.module.license.enums.ErrorCodeConstants.PROJECT_CODE_DUPLICATE; import static org.agt.module.license.enums.ErrorCodeConstants.PROJECT_CODE_DUPLICATE;
@@ -53,6 +58,12 @@ public class ProjectServiceImpl implements ProjectService {
@Resource @Resource
private CommentMapper commentMapper; private CommentMapper commentMapper;
@Resource
private LicenseMapper licenseMapper;
@Resource
private LicenseHistoryMapper licenseHistoryMapper;
@Override @Override
public Long createProject(ProjectSaveReqVO createReqVO) { public Long createProject(ProjectSaveReqVO createReqVO) {
// 校验项目名称和编号是否唯一 // 校验项目名称和编号是否唯一
@@ -112,6 +123,17 @@ public class ProjectServiceImpl implements ProjectService {
for (ProjectRespVO record : page.getRecords()) { for (ProjectRespVO record : page.getRecords()) {
List<CommentTreeRespVO> comments = commentMapper.getCommentList(record.getId()); List<CommentTreeRespVO> comments = commentMapper.getCommentList(record.getId());
record.setCommentNum(comments.size()); record.setCommentNum(comments.size());
List<LicenseDO> licenseList = licenseMapper.selectList(Wrappers.<LicenseDO>lambdaQuery().eq(LicenseDO::getProjectId, record.getId()));
Optional<LicenseDO> licenseOptional = licenseList.stream().findFirst();
int applyCount = 0;
if (licenseOptional.isPresent()) {
List<LicenseHistoryDO> historyList = licenseHistoryMapper.selectList(Wrappers.<LicenseHistoryDO>lambdaQuery()
.eq(LicenseHistoryDO::getLicenseId, licenseOptional.get().getId()));
applyCount = 1 + historyList.size();
}
record.setApplyCount(applyCount);
} }
return new PageResult<>(page.getRecords(), page.getTotal()); return new PageResult<>(page.getRecords(), page.getTotal());
} }