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