diff --git a/agt-module-license/agt-module-license-api/src/main/java/org/agt/module/license/enums/ErrorCodeConstants.java b/agt-module-license/agt-module-license-api/src/main/java/org/agt/module/license/enums/ErrorCodeConstants.java index dca37de..c57bf3c 100644 --- a/agt-module-license/agt-module-license-api/src/main/java/org/agt/module/license/enums/ErrorCodeConstants.java +++ b/agt-module-license/agt-module-license-api/src/main/java/org/agt/module/license/enums/ErrorCodeConstants.java @@ -15,4 +15,5 @@ public interface ErrorCodeConstants { ErrorCode PROJECT_NAME_DUPLICATE = new ErrorCode(1_100_001_002, "项目名称`{}`已存在"); ErrorCode PROJECT_CODE_DUPLICATE = new ErrorCode(1_100_001_003, "项目编号`{}`已存在"); ErrorCode LICENSE_NOT_EXISTS = new ErrorCode(1_100_002_001, "License不存在"); + ErrorCode LICENSE_SN_DUPLICATE = new ErrorCode(1_100_001_002, "License SN`{}`已存在"); } 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 c470436..f97d08e 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 @@ -1,33 +1,38 @@ package org.agt.module.license.controller.admin.license; -import org.springframework.web.bind.annotation.*; -import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.security.access.prepost.PreAuthorize; -import io.swagger.v3.oas.annotations.tags.Tag; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Operation; - -import jakarta.validation.constraints.*; -import jakarta.validation.*; -import jakarta.servlet.http.*; -import java.util.*; -import java.io.IOException; - +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.agt.framework.apilog.core.annotation.ApiAccessLog; +import org.agt.framework.common.pojo.CommonResult; import org.agt.framework.common.pojo.PageParam; import org.agt.framework.common.pojo.PageResult; -import org.agt.framework.common.pojo.CommonResult; import org.agt.framework.common.util.object.BeanUtils; -import static org.agt.framework.common.pojo.CommonResult.success; - import org.agt.framework.excel.core.util.ExcelUtils; - -import org.agt.framework.apilog.core.annotation.ApiAccessLog; -import static org.agt.framework.apilog.core.enums.OperateTypeEnum.*; - -import org.agt.module.license.controller.admin.license.vo.*; +import org.agt.module.license.controller.admin.license.vo.LicensePageReqVO; +import org.agt.module.license.controller.admin.license.vo.LicenseRespVO; +import org.agt.module.license.controller.admin.license.vo.LicenseSaveReqVO; import org.agt.module.license.dal.dataobject.license.LicenseDO; import org.agt.module.license.service.license.LicenseService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.io.IOException; +import java.util.List; + +import static org.agt.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static org.agt.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - License") @RestController @@ -92,4 +97,10 @@ public class LicenseController { BeanUtils.toBean(list, LicenseRespVO.class)); } + @GetMapping("/sn-unique") + @Operation(summary = "校验License的sn是否唯一") + public CommonResult validateLicenseSnUnique(@RequestParam(value = "sn", required = false) String sn, @RequestParam(value = "id", required = false) Long id) { + Boolean isExists = licenseService.validateLicenseSnUnique(sn, id); + return success(isExists); + } } \ No newline at end of file diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/license/LicenseMapper.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/license/LicenseMapper.java index 358e838..002201b 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/license/LicenseMapper.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/dal/mysql/license/LicenseMapper.java @@ -36,4 +36,7 @@ public interface LicenseMapper extends BaseMapperX { .orderByDesc(LicenseDO::getId)); } + default LicenseDO selectBySn(String sn) { + return selectOne(LicenseDO::getSn, sn); + } } \ 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 c13dfbd..f117275 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 @@ -1,11 +1,10 @@ package org.agt.module.license.service.license; -import java.util.*; -import jakarta.validation.*; -import org.agt.module.license.controller.admin.license.vo.*; -import org.agt.module.license.dal.dataobject.license.LicenseDO; +import jakarta.validation.Valid; import org.agt.framework.common.pojo.PageResult; -import org.agt.framework.common.pojo.PageParam; +import org.agt.module.license.controller.admin.license.vo.LicensePageReqVO; +import org.agt.module.license.controller.admin.license.vo.LicenseSaveReqVO; +import org.agt.module.license.dal.dataobject.license.LicenseDO; /** * License Service 接口 @@ -52,4 +51,12 @@ public interface LicenseService { */ PageResult getLicensePage(LicensePageReqVO pageReqVO); + /** + * 校验License的sn是否唯一 + * + * @param sn sn + * @param id id + * @return boolean + */ + Boolean validateLicenseSnUnique(String sn, 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 0b512a9..f7d70c5 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 @@ -1,21 +1,19 @@ package org.agt.module.license.service.license; -import org.springframework.stereotype.Service; +import cn.hutool.core.util.StrUtil; import jakarta.annotation.Resource; -import org.springframework.validation.annotation.Validated; -import org.springframework.transaction.annotation.Transactional; - -import java.util.*; -import org.agt.module.license.controller.admin.license.vo.*; -import org.agt.module.license.dal.dataobject.license.LicenseDO; import org.agt.framework.common.pojo.PageResult; -import org.agt.framework.common.pojo.PageParam; import org.agt.framework.common.util.object.BeanUtils; - +import org.agt.module.license.controller.admin.license.vo.LicensePageReqVO; +import org.agt.module.license.controller.admin.license.vo.LicenseSaveReqVO; +import org.agt.module.license.dal.dataobject.license.LicenseDO; import org.agt.module.license.dal.mysql.license.LicenseMapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; import static org.agt.framework.common.exception.util.ServiceExceptionUtil.exception; -import static org.agt.module.license.enums.ErrorCodeConstants.*; +import static org.agt.module.license.enums.ErrorCodeConstants.LICENSE_NOT_EXISTS; +import static org.agt.module.license.enums.ErrorCodeConstants.LICENSE_SN_DUPLICATE; /** * License Service 实现类 @@ -31,6 +29,10 @@ public class LicenseServiceImpl implements LicenseService { @Override public Long createLicense(LicenseSaveReqVO createReqVO) { + // 校验项目Sn是否唯一 + if (!validateLicenseSnUnique(createReqVO.getSn(), createReqVO.getId())) { + throw exception(LICENSE_SN_DUPLICATE, createReqVO.getSn()); + } // 插入 LicenseDO license = BeanUtils.toBean(createReqVO, LicenseDO.class); licenseMapper.insert(license); @@ -40,6 +42,10 @@ public class LicenseServiceImpl implements LicenseService { @Override public void updateLicense(LicenseSaveReqVO updateReqVO) { + // 校验项目Sn是否唯一 + if (!validateLicenseSnUnique(updateReqVO.getSn(), updateReqVO.getId())) { + throw exception(LICENSE_SN_DUPLICATE, updateReqVO.getSn()); + } // 校验存在 validateLicenseExists(updateReqVO.getId()); // 更新 @@ -71,4 +77,22 @@ public class LicenseServiceImpl implements LicenseService { return licenseMapper.selectPage(pageReqVO); } + @Override + public Boolean validateLicenseSnUnique(String sn, Long id) { + if (StrUtil.isBlank(sn)) { + return true; + } + LicenseDO license = licenseMapper.selectBySn(sn); + if (license == null) { + return true; + } + // 如果 id 为空,说明不用比较是否为相同 id 的License + if (id == null) { + return false; + } + if (!license.getId().equals(id)) { + return false; + } + return true; + } } \ No newline at end of file