diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperController.java b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperController.java index d791468c..70fc977c 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperController.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/controller/PaperController.java @@ -93,6 +93,18 @@ public class PaperController { return SingleResponse.success(pageInfo); } + /** + * 根据试卷id查询试卷基本信息(不含试题列表) + * + * @param paperId 试卷id + * @return 试卷基础信息 + */ + @ApiOperation("试卷基本信息查询") + @GetMapping("/paper/basic/info") + public SingleResponse paperBasicInfo(@RequestParam("paperId") @ApiParam(value = "试卷id", required = true) Long paperId) { + return SingleResponse.success(paperService.paperBasicInfo(paperId)); + } + /** * 下载试卷PDF:查询试卷考试信息(同paperExamInfo)后渲染为PDF文件流,浏览器直接访问即触发下载 * diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassManagementDTO.java b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassManagementDTO.java index 02009e6d..b3617d02 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassManagementDTO.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/model/dto/ClassManagementDTO.java @@ -78,11 +78,6 @@ public class ClassManagementDTO { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime delayTime; - /** - * 试卷类型(如:1自动生成试卷、2平台组卷等) - */ - @ApiModelProperty("试卷类型(如:1自动生成试卷、2平台组卷等)") - private Integer paperType; /** * 考试时长(分) diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperService.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperService.java index 599f2fad..83397f9e 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperService.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/PaperService.java @@ -108,6 +108,14 @@ public interface PaperService extends IService { */ PaperExamInfoVO paperExamInfo(Long paperId); + /** + * 根据试卷id查询试卷基本信息(不含试题列表) + * + * @param paperId 试卷id + * @return 试卷基础信息 + */ + PaperBasicInfoVO paperBasicInfo(Long paperId); + /** * 将试卷考试信息渲染为PDF字节数组(用于试卷下载) * diff --git a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java index 31cb0719..8d663b00 100644 --- a/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java +++ b/safety-cedu-service/src/main/java/org/qinan/cedu/service/impl/ClassManagementServiceImpl.java @@ -159,7 +159,6 @@ public class ClassManagementServiceImpl extends ServiceImpl implemen return examInfoVO; } + @Override + public PaperBasicInfoVO paperBasicInfo(Long paperId) { + PaperDO paper = this.lambdaQuery() + .eq(PaperDO::getId, paperId) + .eq(PaperDO::getDeleteEnum, DeleteEnum.FALSE.getCode()) + .one(); + if (paper == null) { + throw new IllegalArgumentException("试卷不存在"); + } + return paperConvertor.convertEToBasicVo(paper); + } + /** * 批量填充试题选项:一次查询所有试题的选项后按试题id分组回填 * diff --git a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgPersonnelController.java b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgPersonnelController.java index 279a9ea6..0c6ad0b2 100644 --- a/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgPersonnelController.java +++ b/safety-eval-adapter/src/main/java/org/qinan/safetyeval/adapter/web/OrgPersonnelController.java @@ -4,6 +4,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.qinan.safetyeval.client.api.OrgPersonnelApi; +import org.qinan.safetyeval.client.co.ClassSelectPersonnelCO; import org.qinan.safetyeval.client.co.OrgPersonnelCO; import org.qinan.safetyeval.client.co.OrgPersonnelDeptCountCO; import org.qinan.safetyeval.client.co.OrgPersonnelImportResultCO; @@ -60,6 +61,12 @@ public class OrgPersonnelController { return orgPersonnelApi.page(query); } + @ApiOperation("班级选择人员分页查询") + @GetMapping("/classSelect/page") + public PageResponse classSelectPage(@Validated ClassSelectPersonnelPageQuery query) { + return orgPersonnelApi.classSelectPage(query); + } + @ApiOperation("资质备案人员分页查询") @GetMapping("/filing/page") public PageResponse filingPage(@Validated OrgFilingPersonnelPageQuery query) { diff --git a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java index e4d9bbd2..b4185e64 100644 --- a/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java +++ b/safety-eval-app/src/main/java/org/qinan/safetyeval/app/executor/OrgPersonnelExecutor.java @@ -259,6 +259,14 @@ public class OrgPersonnelExecutor implements OrgPersonnelApi { return PageResponse.of(records, pageResult.getTotal()); } + @Override + public PageResponse classSelectPage(ClassSelectPersonnelPageQuery query) { + // 直连 infrastructure 层 Mapper,跳过 domain,由 XML 直接返回 CO,无需转换 + Page page = new Page<>(query.getCurrent(), query.getSize()); + IPage result = orgPersonnelMapper.classSelectPage(page, query); + return PageResponse.of(result.getRecords(), result.getTotal()); + } + @Override public PageResponse filingPage(OrgFilingPersonnelPageQuery query) { query.setOrgId(ThreadLocalUserInfoAdapter.getOrgId()); diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgPersonnelApi.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgPersonnelApi.java index 290569ca..eb2c6d2c 100644 --- a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgPersonnelApi.java +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/api/OrgPersonnelApi.java @@ -1,9 +1,6 @@ package org.qinan.safetyeval.client.api; -import org.qinan.safetyeval.client.co.OrgPersonnelCO; -import org.qinan.safetyeval.client.co.OrgPersonnelDeptCountCO; -import org.qinan.safetyeval.client.co.OrgPersonnelImportResultCO; -import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; +import org.qinan.safetyeval.client.co.*; import org.qinan.safetyeval.client.dto.*; import org.springframework.web.multipart.MultipartFile; @@ -27,6 +24,14 @@ public interface OrgPersonnelApi { PageResponse page(OrgPersonnelPageQuery query); + /** + * 班级选择人员分页查询(支持学员名称、参训单位、部门筛选,排除人员id集合 not in)。 + * + * @param query 查询条件 + * @return 可选人员分页结果 + */ + PageResponse classSelectPage(ClassSelectPersonnelPageQuery query); + PageResponse filingPage(OrgFilingPersonnelPageQuery query); SingleResponse resetPassword(Long id, String resetPassword); diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/ClassSelectPersonnelCO.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/ClassSelectPersonnelCO.java new file mode 100644 index 00000000..4f3c1e2b --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/co/ClassSelectPersonnelCO.java @@ -0,0 +1,31 @@ +package org.qinan.safetyeval.client.co; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * 班级选择人员CO(Client Object) + * + * @author safety-eval + */ +@Data +public class ClassSelectPersonnelCO { + + @ApiModelProperty(value = "主键ID") + private Long id; + + @ApiModelProperty(value = "用户姓名") + private String userName; + + @ApiModelProperty(value = "账号") + private String account; + + @ApiModelProperty(value = "身份证号") + private String idCardNo; + + @ApiModelProperty(value = "参训单位名称") + private String unitName; + + @ApiModelProperty(value = "部门ID") + private Long deptId; +} diff --git a/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/ClassSelectPersonnelPageQuery.java b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/ClassSelectPersonnelPageQuery.java new file mode 100644 index 00000000..5cf706e3 --- /dev/null +++ b/safety-eval-client/src/main/java/org/qinan/safetyeval/client/dto/ClassSelectPersonnelPageQuery.java @@ -0,0 +1,29 @@ +package org.qinan.safetyeval.client.dto; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.List; + +/** + * 班级选择人员分页查询参数 + * + * @author safety-eval + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ClassSelectPersonnelPageQuery extends BasePageQuery { + + @ApiModelProperty(value = "学员名称(模糊)") + private String userName; + + @ApiModelProperty(value = "参训单位id") + private Long orgId; + + @ApiModelProperty(value = "部门id") + private Long deptId; + + @ApiModelProperty(value = "需排除的人员id集合(如已加入班级的人员,不为空时 not in)") + private List excludePersonnelIds; +} diff --git a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/OrgPersonnelMapper.java b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/OrgPersonnelMapper.java index 0f9369a6..64e651d9 100644 --- a/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/OrgPersonnelMapper.java +++ b/safety-eval-infrastructure/src/main/java/org/qinan/safetyeval/infrastructure/mapper/OrgPersonnelMapper.java @@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.qinan.safetyeval.client.co.ClassSelectPersonnelCO; import org.qinan.safetyeval.client.co.IndustryProfessionalPersonCo; import org.qinan.safetyeval.client.co.QualFilingPersonnelInfoCO; +import org.qinan.safetyeval.client.dto.ClassSelectPersonnelPageQuery; import org.qinan.safetyeval.client.dto.OrgFilingPersonnelPageQuery; import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDO; import org.qinan.safetyeval.infrastructure.dataobject.OrgPersonnelDeptCountDO; @@ -50,4 +52,14 @@ public interface OrgPersonnelMapper extends BaseMapper { */ IPage filingPage(Page page, @Param("query") OrgFilingPersonnelPageQuery query); + + /** + * 班级选择人员分页查询(关联单位、部门信息),由 XML 直接返回 CO,无需转换。 + * + * @param page 分页参数 + * @param query 查询条件(学员名称、参训单位、部门、排除人员id集合) + * @return 可选人员分页结果 + */ + IPage classSelectPage(Page page, + @Param("query") ClassSelectPersonnelPageQuery query); } diff --git a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml index 55f7ec01..65ad9a35 100644 --- a/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml +++ b/safety-eval-infrastructure/src/main/resources/mapper/OrgPersonnelMapper.xml @@ -110,4 +110,31 @@ ORDER BY p.id DESC + + +