diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/LicenseController.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/LicenseController.java index 31b8c40..8a400a8 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/LicenseController.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/LicenseController.java @@ -52,7 +52,7 @@ public class LicenseController { @Operation(summary = "创建License") @PreAuthorize("@ss.hasPermission('license:license:create')") public CommonResult createLicense(@Valid @RequestBody LicenseSaveReqVO createReqVO) { - return success(licenseService.createLicense(createReqVO)); + return success(licenseService.createLicense(createReqVO, false)); } @PutMapping("/update") @@ -105,6 +105,14 @@ public class LicenseController { return success(license); } + @GetMapping("/history") + @Operation(summary = "获得License历史列表") + @PreAuthorize("@ss.hasPermission('license:license:query')") + public CommonResult> getLicensePage(@RequestParam("id") Long id) { + List licenseHistory = licenseService.getLicenseHistory(id); + return success(licenseHistory); + } + @GetMapping("/page") @Operation(summary = "获得License分页") @PreAuthorize("@ss.hasPermission('license:license:query')") diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/LicenseRespVO.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/LicenseRespVO.java index c46d2bb..b2ec102 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/LicenseRespVO.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/LicenseRespVO.java @@ -13,6 +13,7 @@ import org.agt.module.license.dal.dataobject.customer.CustomerDO; import org.agt.module.license.dal.dataobject.project.ProjectDO; import org.agt.module.system.api.user.AdminUserApi; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; @@ -47,12 +48,7 @@ public class LicenseRespVO implements VO { @Schema(description = "到期时间") @ExcelProperty("到期时间") - private LocalDateTime expiryDate; - - @Schema(description = "网元开关") -// @ExcelProperty(value = "网元开关", converter = DictConvert.class) - @DictFormat("lic_ne_switch") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 - private List neList; + private LocalDate expiryDate; @Schema(description = "网元") @ExcelProperty("网元") @@ -85,10 +81,6 @@ public class LicenseRespVO implements VO { @ExcelProperty("申请人") private String applicantName; - @Schema(description = "申请时间") -// @ExcelProperty("申请时间") - private LocalDateTime applicationTime; - @Schema(description = "审批人") @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "approverName") private Long approver; @@ -107,8 +99,14 @@ public class LicenseRespVO implements VO { private String remark; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("创建时间") +// @ExcelProperty("创建时间") private LocalDateTime createTime; + @Schema(description = "申请时间") + @ExcelProperty("申请时间") + private LocalDateTime applicationTime; + private LicenseRespVO oldLicense; + + private boolean hasHistory; } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseService.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseService.java index 3c9d4d8..e65806f 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseService.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseService.java @@ -22,7 +22,7 @@ public interface LicenseService { * @param createReqVO 创建信息 * @return 编号 */ - Long createLicense(@Valid LicenseSaveReqVO createReqVO); + Long createLicense(@Valid LicenseSaveReqVO createReqVO, boolean isReapply); /** * 更新License @@ -85,4 +85,6 @@ public interface LicenseService { * @return boolean */ Boolean validateLicenseSnUnique(String sn, Long id); + + List getLicenseHistory(Long id); } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseServiceImpl.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseServiceImpl.java index 90720eb..63c6a6f 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseServiceImpl.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/service/license/LicenseServiceImpl.java @@ -98,8 +98,8 @@ public class LicenseServiceImpl implements LicenseService { @Override @Transactional(rollbackFor = Exception.class) - public Long createLicense(LicenseSaveReqVO createReqVO) { - // 校验项目Sn是否唯一 + public Long createLicense(LicenseSaveReqVO createReqVO, boolean isReapply) { + // 校验项目Sn是否唯一, boolean isReapply if (!validateLicenseSnUnique(createReqVO.getSerialNo(), createReqVO.getId())) { throw exception(LICENSE_SN_DUPLICATE, createReqVO.getSerialNo()); } @@ -110,7 +110,19 @@ public class LicenseServiceImpl implements LicenseService { // 插入 LicenseDO license = BeanUtils.toBean(createReqVO, LicenseDO.class); license.setStatus(LicenseStatusEnum.NOT_APPLIED.getCode()); - licenseMapper.insert(license); + if (isReapply) { + licenseMapper.update(Wrappers.lambdaUpdate() + .eq(LicenseDO::getId, license.getId()) + .set(LicenseDO::getExpiryDate, license.getExpiryDate()) + .set(LicenseDO::getUserNumber, license.getUserNumber()) + .set(LicenseDO::getRanNumber, license.getRanNumber()) + .set(LicenseDO::getRemark, StrUtil.isBlank(license.getRemark()) ? null : license.getRemark()) + .set(LicenseDO::getApprover, license.getApprover()) + .set(LicenseDO::getFileUrl, null) + ); + } else { + licenseMapper.insert(license); + } List neCodeList = createReqVO.getNeCodeList(); @@ -207,10 +219,12 @@ public class LicenseServiceImpl implements LicenseService { licenseDetailMapper.updateBatch(licenseDetails); // 更新表 - updateReqVO.setStatus(LicenseStatusEnum.IN_APPLICATION.getCode()); - updateReqVO.setApplicant(WebFrameworkUtils.getLoginUserId()); - updateReqVO.setApplicationTime(LocalDateTime.now()); - updateLicense(updateReqVO); + LicenseDO licenseDO = new LicenseDO(); + licenseDO.setId(updateReqVO.getId()); + licenseDO.setStatus(LicenseStatusEnum.IN_APPLICATION.getCode()); + licenseDO.setApplicant(WebFrameworkUtils.getLoginUserId()); + licenseDO.setApplicationTime(LocalDateTime.now()); + licenseMapper.updateById(licenseDO); } @Override @@ -224,23 +238,23 @@ public class LicenseServiceImpl implements LicenseService { LicenseHistoryDO historyDO = BeanUtils.toBean(licenseDO, LicenseHistoryDO.class); - licenseMapper.deleteById(updateReqVO.getId()); licenseDetailMapper.delete(Wrappers.lambdaQuery().eq(LicenseDetailDO::getLicenseId, licenseDO.getId())); - updateReqVO.setId(null); - Long licenseId = createLicense(updateReqVO); - + for (LicenseDetailVO neCode : updateReqVO.getNeCodeList()) { + neCode.setFileUrlLegacy(null); + neCode.setFileUrl(null); + neCode.setProviderId(null); + } + Long licenseId = createLicense(updateReqVO, true); + historyDO.setId(null); historyDO.setLicenseId(licenseId); - historyDO.setFileUrl(null); licenseHistoryMapper.insert(historyDO); if (CollUtil.isNotEmpty(licenseDetailDOS)) { List detailHistoryDOList = BeanUtils.toBean(licenseDetailDOS, LicenseDetailHistoryDO.class); detailHistoryDOList.forEach(c -> { - c.setLicenseId(licenseId); - c.setFileUrlLegacy(null); - c.setFileUrl(null); - c.setProviderId(null); + c.setId(null); + c.setLicenseId(historyDO.getId()); }); licenseDetailHistoryMapper.insertBatch(detailHistoryDOList); } @@ -380,7 +394,7 @@ public class LicenseServiceImpl implements LicenseService { // File tempFile = new File("D:/temp/temp.zip"); File tempFile = new File("/usr/local/licGen/temp.zip"); ZipUtil.zip(tempFile, pathList.toArray(new String[0]), inputStreamList.toArray(new ByteArrayInputStream[inputStreamList.size()])); - String fileURL = fileApi.createFile(FileUtil.readBytes(tempFile), licenseDO.getSerialNo() + "_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))+".zip"); + String fileURL = fileApi.createFile(FileUtil.readBytes(tempFile), licenseDO.getSerialNo() + "_" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) + ".zip"); FileUtil.del(tempFile); licenseDO.setFileUrl(fileURL); @@ -423,6 +437,15 @@ public class LicenseServiceImpl implements LicenseService { validateLicenseExists(id); // 删除 licenseMapper.deleteById(id); + + licenseDetailMapper.delete(Wrappers.lambdaQuery().eq(LicenseDetailDO::getLicenseId, id)); + + List licenseHistoryDOS = licenseHistoryMapper.selectList(Wrappers.lambdaQuery().eq(LicenseHistoryDO::getLicenseId, id)); + for (LicenseHistoryDO licenseHistoryDO : licenseHistoryDOS) { + licenseDetailHistoryMapper.delete(Wrappers.lambdaQuery().eq(LicenseDetailHistoryDO::getLicenseId, licenseHistoryDO.getId())); + } + licenseHistoryMapper.delete(Wrappers.lambdaQuery().eq(LicenseHistoryDO::getLicenseId, id)); + } private void validateLicenseExists(Long id) { @@ -443,11 +466,12 @@ public class LicenseServiceImpl implements LicenseService { List licenseDetailDOS = licenseDetailMapper.selectList(Wrappers.lambdaQuery().eq(LicenseDetailDO::getLicenseId, license.getId())); List details = BeanUtils.toBean(licenseDetailDOS, LicenseDetailVO.class); fillDetail(details, license); + List historyList = licenseHistoryMapper.selectList(Wrappers.lambdaQuery() + .eq(LicenseHistoryDO::getLicenseId, license.getId()) + .orderByDesc(LicenseHistoryDO::getApplicationTime)); + Optional histroyOptional = historyList.stream().findFirst(); + license.setHasHistory(histroyOptional.isPresent()); if (LicenseStatusEnum.REAPPLYING.getCode().equals(license.getStatus())) { - List historyList = licenseHistoryMapper.selectList(Wrappers.lambdaQuery() - .eq(LicenseHistoryDO::getLicenseId, license.getId()) - .orderByDesc(LicenseHistoryDO::getApplicationTime)); - Optional histroyOptional = historyList.stream().findFirst(); if (histroyOptional.isPresent()) { LicenseHistoryDO historyDO = histroyOptional.get(); LicenseRespVO oldLicense = BeanUtils.toBean(historyDO, LicenseRespVO.class); @@ -473,7 +497,7 @@ public class LicenseServiceImpl implements LicenseService { if (i < oldDetails.size()) { activationCodeMap.put("old", oldDetails.get(i).getActivationCode()); neListMap.put("old", oldDetails.get(i).getNeList()); - fileUrlListMap.put("old", oldDetails.get(i).getFileUrlList()); + fileUrlListMap.put("old", null); mergeDetail.setFileUrl(oldDetails.get(i).getFileUrl()); mergeDetail.setNeList(oldDetails.get(i).getNeList()); mergeDetail.setActivationCode(oldDetails.get(i).getActivationCode()); @@ -488,7 +512,7 @@ public class LicenseServiceImpl implements LicenseService { neListMap.put("new", details.get(i).getNeList()); } if (!(i < oldDetails.size() && Objects.equals(oldDetails.get(i).getFileUrlList(), details.get(i).getFileUrlList()))) { - fileUrlListMap.put("new", details.get(i).getFileUrlList()); + fileUrlListMap.put("new", null); } } mergeDetail.setActivationCodeMap(activationCodeMap); @@ -557,5 +581,21 @@ public class LicenseServiceImpl implements LicenseService { return true; } + @Override + public List getLicenseHistory(Long id) { + List historyDOList = licenseHistoryMapper.selectList(Wrappers.lambdaQuery() + .eq(LicenseHistoryDO::getLicenseId, id).orderByDesc(LicenseHistoryDO::getApplicationTime)); + List voList = BeanUtils.toBean(historyDOList, LicenseRespVO.class); + for (LicenseRespVO licenseRespVO : voList) { + fillLicenseHistoryRespVO(licenseRespVO); + } + return voList; + } + private void fillLicenseHistoryRespVO(LicenseRespVO license) { + List licenseDetailDOS = licenseDetailHistoryMapper.selectList(Wrappers.lambdaQuery().eq(LicenseDetailHistoryDO::getLicenseId, license.getId())); + List details = BeanUtils.toBean(licenseDetailDOS, LicenseDetailVO.class); + fillDetail(details, license); + + } } \ No newline at end of file