From 4f02dbb1e20b68e0311c638c8c5effa79724af8a Mon Sep 17 00:00:00 2001 From: caiyuchao Date: Thu, 9 Oct 2025 18:04:36 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=95=88=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/license/LicenseController.java | 9 +- .../admin/license/vo/LicensePageRespVO.java | 117 ++++++++++++++++++ .../admin/project/vo/ProjectRespVO.java | 14 +-- .../service/license/LicenseService.java | 3 +- .../service/license/LicenseServiceImpl.java | 11 +- .../mapper/license/LicenseMapper.xml | 22 ++++ .../mapper/project/ProjectMapper.xml | 12 ++ 7 files changed, 169 insertions(+), 19 deletions(-) create mode 100644 agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/LicensePageRespVO.java 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 d4e30bd..39ab136 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 @@ -20,6 +20,7 @@ import org.agt.module.license.controller.admin.license.vo.LicenseCodeImportExcel import org.agt.module.license.controller.admin.license.vo.LicenseDetailVO; import org.agt.module.license.controller.admin.license.vo.LicenseImportExcelVO; import org.agt.module.license.controller.admin.license.vo.LicensePageReqVO; +import org.agt.module.license.controller.admin.license.vo.LicensePageRespVO; 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.service.license.LicenseService; @@ -120,8 +121,8 @@ public class LicenseController { @GetMapping("/page") @Operation(summary = "获得License分页") @PreAuthorize("@ss.hasPermission('license:license:query')") - public CommonResult> getLicensePage(@Valid LicensePageReqVO pageReqVO) { - PageResult pageResult = licenseService.getLicensePage(pageReqVO); + public CommonResult> getLicensePage(@Valid LicensePageReqVO pageReqVO) { + PageResult pageResult = licenseService.getLicensePage(pageReqVO); return success(pageResult); } @@ -144,7 +145,7 @@ public class LicenseController { pageReqVO = BeanUtils.toBean(exportReqVO, LicensePageReqVO.class); pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); } - List voList = licenseService.getLicensePage(pageReqVO).getList(); + List voList = licenseService.getLicensePage(pageReqVO).getList(); // List results = new ArrayList<>(); // for (LicenseRespVO license : voList) { @@ -184,7 +185,7 @@ public class LicenseController { // // } // 导出 Excel - ExcelUtils.writeSelected(response, "", pageReqVO.getSheetName(), LicenseRespVO.class, + ExcelUtils.writeSelected(response, "", pageReqVO.getSheetName(), LicensePageRespVO.class, TranslateUtils.translate(voList), pageReqVO.getIncludeFields()); } diff --git a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/LicensePageRespVO.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/LicensePageRespVO.java new file mode 100644 index 0000000..e36819d --- /dev/null +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/license/vo/LicensePageRespVO.java @@ -0,0 +1,117 @@ +package org.agt.module.license.controller.admin.license.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.fhs.core.trans.vo.VO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.agt.framework.excel.core.annotations.DictFormat; +import org.agt.framework.excel.core.convert.DictConvert; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.util.List; + +@Schema(description = "管理后台 - License Response VO") +@Data +@ExcelIgnoreUnannotated +public class LicensePageRespVO implements VO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25585") +// @ExcelProperty("主键") + private Long id; + + @Schema(description = "客户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31667") +// @Trans(type = TransType.SIMPLE, target = CustomerDO.class, fields = "name", ref = "customerName") + private Long customerId; + + @Schema(description = "客户名称") + @ExcelProperty("客户名称") + private String customerName; + + @Schema(description = "项目ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "2496") +// @Trans(type = TransType.SIMPLE, target = ProjectDO.class, fields = "name", ref = "projectName") + private Long projectId; + + @Schema(description = "项目名称") + @ExcelProperty("项目名称") + private String projectName; + + @Schema(description = "sn", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("SN") + private String serialNo; + + @Schema(description = "到期时间") + private LocalDateTime expiryDate; + + @Schema(description = "到期时间导出") + @ExcelProperty("到期时间") + private LocalDate expiryDateExt; + + @Schema(description = "网元") + @ExcelProperty("网元") + private String neListStr; + + @Schema(description = "激活码") + @ExcelProperty("激活码") + private String activationCode; + + @Schema(description = "网元激活码列表") + private List neCodeList; + + @Schema(description = "用户数") + @ExcelProperty("用户数") + private Integer userNumber; + + @Schema(description = "基站数") + @ExcelProperty("基站数") + private Integer ranNumber; + + @Schema(description = "文件URL") +// @ExcelProperty("文件URL") + private String fileUrl; + + @Schema(description = "申请人ID") +// @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "applicantName") + private Long applicant; + + @Schema(description = "申请人", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("申请人") + private String applicantName; + + @Schema(description = "审批人") +// @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "approverName") + private Long approver; + + @Schema(description = "审批人", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("审批人") + private String approverName; + + @Schema(description = "状态", example = "1") + @ExcelProperty(value = "状态", converter = DictConvert.class) + @DictFormat("lic_license_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer status; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("说明") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) +// @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "申请时间") + @ExcelProperty("申请时间") + private LocalDateTime applicationTime; + + @Schema(description = "license申请次数") + @ExcelProperty("申请次数") + private Integer applyCount; + + @Schema(description = "数据类型") + private Integer dataType; + + private LicensePageRespVO 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/controller/admin/project/vo/ProjectRespVO.java b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/project/vo/ProjectRespVO.java index e80fd5a..ffcd901 100644 --- a/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/project/vo/ProjectRespVO.java +++ b/agt-module-license/agt-module-license-server/src/main/java/org/agt/module/license/controller/admin/project/vo/ProjectRespVO.java @@ -2,15 +2,11 @@ package org.agt.module.license.controller.admin.project.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; -import com.fhs.core.trans.anno.Trans; -import com.fhs.core.trans.constant.TransType; import com.fhs.core.trans.vo.VO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import org.agt.framework.excel.core.annotations.DictFormat; import org.agt.framework.excel.core.convert.DictConvert; -import org.agt.module.license.dal.dataobject.customer.CustomerDO; -import org.agt.module.system.api.user.AdminUserApi; import java.time.LocalDateTime; @@ -24,7 +20,7 @@ public class ProjectRespVO implements VO { private Long id; @Schema(description = "客户ID") - @Trans(type = TransType.SIMPLE, target = CustomerDO.class, fields = "name", ref = "customerName") +// @Trans(type = TransType.SIMPLE, target = CustomerDO.class, fields = "name", ref = "customerName") private Long customerId; @Schema(description = "客户名称") @@ -57,19 +53,19 @@ public class ProjectRespVO implements VO { private Integer status; @Schema(description = "业务负责人ID", requiredMode = Schema.RequiredMode.REQUIRED) - @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "businessOwnerName") +// @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "businessOwnerName") private Long businessOwner; @Schema(description = "技术负责人1ID", requiredMode = Schema.RequiredMode.REQUIRED) - @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "technicalOwnerAName") +// @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "technicalOwnerAName") private Long technicalOwnerA; @Schema(description = "技术负责人2ID") - @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "technicalOwnerBName") +// @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "technicalOwnerBName") private Long technicalOwnerB; @Schema(description = "技术负责人3ID") - @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "technicalOwnerCName") +// @Trans(type = TransType.AUTO_TRANS, key = AdminUserApi.PREFIX, fields = "nickname", ref = "technicalOwnerCName") private Long technicalOwnerC; @Schema(description = "业务负责人", requiredMode = Schema.RequiredMode.REQUIRED) 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 df8814c..a2796a0 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 @@ -8,6 +8,7 @@ import org.agt.module.license.controller.admin.license.vo.LicenseCodeImportExcel import org.agt.module.license.controller.admin.license.vo.LicenseDetailVO; import org.agt.module.license.controller.admin.license.vo.LicenseImportExcelVO; import org.agt.module.license.controller.admin.license.vo.LicensePageReqVO; +import org.agt.module.license.controller.admin.license.vo.LicensePageRespVO; 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.LicenseDetailDO; @@ -80,7 +81,7 @@ public interface LicenseService { * @param pageReqVO 分页查询 * @return License分页 */ - PageResult getLicensePage(LicensePageReqVO pageReqVO); + PageResult getLicensePage(LicensePageReqVO pageReqVO); List getLicenseByExpiryDate(); 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 814604b..9080cff 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 @@ -27,6 +27,7 @@ import org.agt.module.license.controller.admin.license.vo.LicenseCodeImportExcel import org.agt.module.license.controller.admin.license.vo.LicenseDetailVO; import org.agt.module.license.controller.admin.license.vo.LicenseImportExcelVO; import org.agt.module.license.controller.admin.license.vo.LicensePageReqVO; +import org.agt.module.license.controller.admin.license.vo.LicensePageRespVO; 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.customer.CustomerDO; @@ -616,16 +617,16 @@ public class LicenseServiceImpl implements LicenseService { } @Override - public PageResult getLicensePage(LicensePageReqVO pageReqVO) { + public PageResult getLicensePage(LicensePageReqVO pageReqVO) { if (StrUtil.isNotBlank(pageReqVO.getSortField())) { pageReqVO.setSortField(StrUtil.toUnderlineCase(pageReqVO.getSortField())); } IPage page = licenseMapper.queryPage(new Page<>(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO); - PageResult voPageResult = BeanUtils.toBean(new PageResult<>(page.getRecords(), page.getTotal()), LicenseRespVO.class); - for (LicenseRespVO licenseRespVO : voPageResult.getList()) { - fillLicenseRespVO(licenseRespVO); - } + PageResult voPageResult = BeanUtils.toBean(new PageResult<>(page.getRecords(), page.getTotal()), LicensePageRespVO.class); +// for (LicenseRespVO licenseRespVO : voPageResult.getList()) { +// fillLicenseRespVO(licenseRespVO); +// } return voPageResult; } diff --git a/agt-module-license/agt-module-license-server/src/main/resources/mapper/license/LicenseMapper.xml b/agt-module-license/agt-module-license-server/src/main/resources/mapper/license/LicenseMapper.xml index b6bfc0c..70a2958 100644 --- a/agt-module-license/agt-module-license-server/src/main/resources/mapper/license/LicenseMapper.xml +++ b/agt-module-license/agt-module-license-server/src/main/resources/mapper/license/LicenseMapper.xml @@ -49,11 +49,33 @@ l.update_time, l.deleted, l.tenant_id, + p.`name` project_name, + c.`name` customer_name, + al.nickname applicant_name, + ar.nickname approver_name, + ifnull( lh.apply_count, 1 ) apply_count, p.customer_id FROM crm_license_server l LEFT JOIN crm_project p ON l.project_id = p.id AND p.deleted = 0 + LEFT JOIN crm_customer c ON p.customer_id = c.id + AND c.deleted = 0 + LEFT JOIN system_users al ON l.applicant = al.id + AND al.deleted = 0 + LEFT JOIN system_users ar ON l.approver = ar.id + AND ar.deleted = 0 + LEFT JOIN ( + SELECT + lh.license_id, + count( lh.license_id ) + 1 apply_count + FROM + crm_license_server_history lh + WHERE + lh.deleted = 0 + GROUP BY + lh.license_id + ) lh ON l.id = lh.license_id WHERE l.deleted = 0 diff --git a/agt-module-license/agt-module-license-server/src/main/resources/mapper/project/ProjectMapper.xml b/agt-module-license/agt-module-license-server/src/main/resources/mapper/project/ProjectMapper.xml index 3d5d2ef..ed365b8 100644 --- a/agt-module-license/agt-module-license-server/src/main/resources/mapper/project/ProjectMapper.xml +++ b/agt-module-license/agt-module-license-server/src/main/resources/mapper/project/ProjectMapper.xml @@ -88,10 +88,22 @@ SELECT p.*, l.serial_no, + cu.`name` customer_name, + bo.nickname business_owner_name, + toa.nickname technical_owner_a_name, + tob.nickname technical_owner_b_name, ifnull( pc.comment_num, 0 ) comment_num, ifnull( pl.apply_count, 0 ) apply_count FROM crm_project p + LEFT JOIN crm_customer cu ON p.customer_id = cu.id + AND cu.deleted = 0 + LEFT JOIN system_users bo ON p.business_owner = bo.id + AND bo.deleted = 0 + LEFT JOIN system_users toa ON p.technical_owner_a = toa.id + AND toa.deleted = 0 + LEFT JOIN system_users tob ON p.technical_owner_b = tob.id + AND tob.deleted = 0 LEFT JOIN ( SELECT project_id, GROUP_CONCAT( serial_no ) serial_no FROM crm_license_server WHERE deleted = 0 GROUP BY project_id ) l ON p.id = l.project_id LEFT JOIN ( SELECT c.project_id, count( c.id ) comment_num FROM crm_comment c WHERE c.deleted = 0 GROUP BY c.project_id ) pc ON p.id = pc.project_id LEFT JOIN (