From 1650350a4a2cced05cdcbc0ef1120cb1df775949 Mon Sep 17 00:00:00 2001 From: ccsens_zhengzhichuan Date: Tue, 13 Jan 2026 14:44:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=A6=E7=94=9F=E5=9C=A8?= =?UTF-8?q?=E8=AF=BB=E7=8A=B6=E6=80=81=E7=BB=9F=E8=AE=A1=EF=BC=8C=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AF=BC=E5=87=BA=E6=8A=A5=E5=91=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/project/GroupController.java | 5 ++ .../research/system/domain/dto/GroupDto.java | 3 + .../system/domain/po/KtsKtGroupMember.java | 11 ++++ .../domain/po/KtsKtGroupMemberExample.java | 60 ++++++++++++++++++ .../research/system/domain/vo/GroupVO.java | 14 ++++- .../system/persist/dao/KtsGroupDao.java | 1 + .../system/service/KtsGroupService.java | 2 + .../service/impl/ExportServiceImpl.java | 61 +++++++++++++++++++ .../service/impl/KtsGroupServiceImpl.java | 14 +++-- .../main/resources/mapper/dao/KtsGroupDao.xml | 21 +++++-- .../main/resources/mapper/dao/OutcomeDao.xml | 4 +- .../mapper/system/KtsKtGroupMemberMapper.xml | 25 ++++++-- 12 files changed, 202 insertions(+), 19 deletions(-) diff --git a/research-admin/src/main/java/com/research/web/controller/client/project/GroupController.java b/research-admin/src/main/java/com/research/web/controller/client/project/GroupController.java index 7bca028a..0230c02c 100644 --- a/research-admin/src/main/java/com/research/web/controller/client/project/GroupController.java +++ b/research-admin/src/main/java/com/research/web/controller/client/project/GroupController.java @@ -181,6 +181,11 @@ public class GroupController { return JsonResponse.ok(ktsGroupService.workerStatistics()); } + @PostMapping("/studentStatistics") + public JsonResponse> queryStudentList(){ + return JsonResponse.ok(ktsGroupService.queryStudentList(new GroupDto.Query())); + } + private void aduit(Long memberId) throws Exception { //1.流程初始化表单 diff --git a/research-system/src/main/java/com/research/system/domain/dto/GroupDto.java b/research-system/src/main/java/com/research/system/domain/dto/GroupDto.java index f6c5a476..06f25595 100644 --- a/research-system/src/main/java/com/research/system/domain/dto/GroupDto.java +++ b/research-system/src/main/java/com/research/system/domain/dto/GroupDto.java @@ -156,6 +156,9 @@ public class GroupDto { @JsonFormat(pattern = "yyyy-MM-dd") @ApiModelProperty("毕业时间") private Date graduationTime; + + @ApiModelProperty("在读状态(0在读硕士、1在读博士、2在读博士后)") + private Byte readingStatus; } @Data diff --git a/research-system/src/main/java/com/research/system/domain/po/KtsKtGroupMember.java b/research-system/src/main/java/com/research/system/domain/po/KtsKtGroupMember.java index 744f8bb6..7ff4fa6b 100644 --- a/research-system/src/main/java/com/research/system/domain/po/KtsKtGroupMember.java +++ b/research-system/src/main/java/com/research/system/domain/po/KtsKtGroupMember.java @@ -54,6 +54,8 @@ public class KtsKtGroupMember implements Serializable { private Date graduationTime; + private Byte readingStatus; + private static final long serialVersionUID = 1L; public Long getId() { @@ -256,6 +258,14 @@ public class KtsKtGroupMember implements Serializable { this.graduationTime = graduationTime; } + public Byte getReadingStatus() { + return readingStatus; + } + + public void setReadingStatus(Byte readingStatus) { + this.readingStatus = readingStatus; + } + @Override public String toString() { StringBuilder sb = new StringBuilder(); @@ -287,6 +297,7 @@ public class KtsKtGroupMember implements Serializable { sb.append(", remark=").append(remark); sb.append(", enrollTime=").append(enrollTime); sb.append(", graduationTime=").append(graduationTime); + sb.append(", readingStatus=").append(readingStatus); sb.append("]"); return sb.toString(); } diff --git a/research-system/src/main/java/com/research/system/domain/po/KtsKtGroupMemberExample.java b/research-system/src/main/java/com/research/system/domain/po/KtsKtGroupMemberExample.java index 9c008643..2f94fd3c 100644 --- a/research-system/src/main/java/com/research/system/domain/po/KtsKtGroupMemberExample.java +++ b/research-system/src/main/java/com/research/system/domain/po/KtsKtGroupMemberExample.java @@ -1721,6 +1721,66 @@ public class KtsKtGroupMemberExample { addCriterion("graduation_time not between", value1, value2, "graduationTime"); return (Criteria) this; } + + public Criteria andReadingStatusIsNull() { + addCriterion("reading_status is null"); + return (Criteria) this; + } + + public Criteria andReadingStatusIsNotNull() { + addCriterion("reading_status is not null"); + return (Criteria) this; + } + + public Criteria andReadingStatusEqualTo(Byte value) { + addCriterion("reading_status =", value, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusNotEqualTo(Byte value) { + addCriterion("reading_status <>", value, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusGreaterThan(Byte value) { + addCriterion("reading_status >", value, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusGreaterThanOrEqualTo(Byte value) { + addCriterion("reading_status >=", value, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusLessThan(Byte value) { + addCriterion("reading_status <", value, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusLessThanOrEqualTo(Byte value) { + addCriterion("reading_status <=", value, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusIn(List values) { + addCriterion("reading_status in", values, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusNotIn(List values) { + addCriterion("reading_status not in", values, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusBetween(Byte value1, Byte value2) { + addCriterion("reading_status between", value1, value2, "readingStatus"); + return (Criteria) this; + } + + public Criteria andReadingStatusNotBetween(Byte value1, Byte value2) { + addCriterion("reading_status not between", value1, value2, "readingStatus"); + return (Criteria) this; + } } public static class Criteria extends GeneratedCriteria { diff --git a/research-system/src/main/java/com/research/system/domain/vo/GroupVO.java b/research-system/src/main/java/com/research/system/domain/vo/GroupVO.java index 7ef4c71c..833d8224 100644 --- a/research-system/src/main/java/com/research/system/domain/vo/GroupVO.java +++ b/research-system/src/main/java/com/research/system/domain/vo/GroupVO.java @@ -326,6 +326,16 @@ public class GroupVO { } } + @Data + public static class StudentResult { + private Long orgId; + private String orgName; + @ApiModelProperty("在读人数") + private int zd; + @ApiModelProperty("毕业人数") + private int by; + } + @Data public static class WorkerStatistics { private List titleList; @@ -336,13 +346,13 @@ public class GroupVO { private Long orgId; private String orgName; private int gj;//高级 - private int fg;//副高 +// private int fg;//副高 private int zj;//中级 private int cj;//初级 private GjDto gjList; - private FgjDto fgjList; +// private FgjDto fgjList; private ZjDto zjList; diff --git a/research-system/src/main/java/com/research/system/persist/dao/KtsGroupDao.java b/research-system/src/main/java/com/research/system/persist/dao/KtsGroupDao.java index 82214b32..b0301826 100644 --- a/research-system/src/main/java/com/research/system/persist/dao/KtsGroupDao.java +++ b/research-system/src/main/java/com/research/system/persist/dao/KtsGroupDao.java @@ -44,4 +44,5 @@ public interface KtsGroupDao { GroupVO.WorkerStatistics.Title.ZjDto queryZjTitleStatistics(@Param("orgId") Long orgId); + List<GroupVO.StudentResult> queryStudentStatistics(GroupDto.Query query); } diff --git a/research-system/src/main/java/com/research/system/service/KtsGroupService.java b/research-system/src/main/java/com/research/system/service/KtsGroupService.java index 07ae4263..9d8234b9 100644 --- a/research-system/src/main/java/com/research/system/service/KtsGroupService.java +++ b/research-system/src/main/java/com/research/system/service/KtsGroupService.java @@ -61,4 +61,6 @@ public interface KtsGroupService { GroupVO.Statistics statistics(); GroupVO.WorkerStatistics workerStatistics(); + + List<GroupVO.StudentResult> queryStudentList(GroupDto.Query query); } diff --git a/research-system/src/main/java/com/research/system/service/impl/ExportServiceImpl.java b/research-system/src/main/java/com/research/system/service/impl/ExportServiceImpl.java index 86a54fdc..25385d6c 100644 --- a/research-system/src/main/java/com/research/system/service/impl/ExportServiceImpl.java +++ b/research-system/src/main/java/com/research/system/service/impl/ExportServiceImpl.java @@ -155,6 +155,7 @@ public class ExportServiceImpl implements ExportService { map.put("table3", tableData); } + //学术交流 List<OutcomeVo.Result> results2 = outcomeMap.get(71L); if (CollUtil.isNotEmpty(results2)) { TextRenderData text1 = Texts.of("标题").bold().fontSize(12).create(); @@ -180,6 +181,66 @@ public class ExportServiceImpl implements ExportService { .create(); map.put("table4", tableData); } + + //高层次科技人才 + List<OutcomeVo.Result> results3 = outcomeMap.get(5L); + if (CollUtil.isNotEmpty(results3)) { + Map<Long, List<OutcomeVo.Result>> collect = results3.stream().collect(Collectors.groupingBy(OutcomeVo.Result::getCategoryId2)); + if (CollUtil.isNotEmpty(collect.get(6L))) { + TextRenderData text1 = Texts.of("序号").bold().fontSize(12).create(); + TextRenderData text2 = Texts.of("姓名").bold().fontSize(12).create(); + TextRenderData text3 = Texts.of("性别").bold().fontSize(12).create(); + TextRenderData text4 = Texts.of("年龄").bold().fontSize(12).create(); + TextRenderData text5 = Texts.of("职称").bold().fontSize(12).create(); + TextRenderData text6 = Texts.of("入选人才计划或项目").bold().fontSize(12).create(); + RowRenderData headerRow = Rows.of(text1, text2, text3, text4, text5, text6).center().create(); + Tables.TableBuilder of = Tables.of(headerRow); + int i = 0; + for (OutcomeVo.Result result : collect.get(6L)) { + i++; + RowRenderData rowRenderData = Rows.of( + i + "", + result.getName(), + StrUtil.isNotEmpty(result.getSex()) ? "未知" : "0".equals(result.getSex()) ? "女" : "男", + result.getAge() + "", + result.getTitle(), + result.getProjects() + ).center().create(); + of.addRow(rowRenderData).center(); + } + TableRenderData tableData = of + .create(); + map.put("table5", tableData); + } + + if (CollUtil.isNotEmpty(collect.get(7L))) { + TextRenderData text1 = Texts.of("序号").bold().fontSize(12).create(); + TextRenderData text2 = Texts.of("姓名").bold().fontSize(12).create(); + TextRenderData text3 = Texts.of("性别").bold().fontSize(12).create(); + TextRenderData text4 = Texts.of("年龄").bold().fontSize(12).create(); + TextRenderData text5 = Texts.of("职称晋升").bold().fontSize(12).create(); + TextRenderData text6 = Texts.of("入选人才计划或项目").bold().fontSize(12).create(); + RowRenderData headerRow = Rows.of(text1, text2, text3, text4, text5, text6).center().create(); + Tables.TableBuilder of = Tables.of(headerRow); + int i = 0; + for (OutcomeVo.Result result : collect.get(6L)) { + i++; + RowRenderData rowRenderData = Rows.of( + i + "", + result.getName(), + StrUtil.isNotEmpty(result.getSex()) ? "未知" : "0".equals(result.getSex()) ? "女" : "男", + result.getAge() + "", + result.getTitle(), + result.getProjects() + ).center().create(); + of.addRow(rowRenderData).center(); + } + TableRenderData tableData = of + .create(); + map.put("table6", tableData); + } + } + } diff --git a/research-system/src/main/java/com/research/system/service/impl/KtsGroupServiceImpl.java b/research-system/src/main/java/com/research/system/service/impl/KtsGroupServiceImpl.java index f41a81c0..c20d371b 100644 --- a/research-system/src/main/java/com/research/system/service/impl/KtsGroupServiceImpl.java +++ b/research-system/src/main/java/com/research/system/service/impl/KtsGroupServiceImpl.java @@ -526,14 +526,11 @@ public class KtsGroupServiceImpl implements KtsGroupService { if (StrUtil.isEmpty(memberResult.getTitle())) { continue; } - if (memberResult.getTitle().contains("1") || memberResult.getTitle().contains("5") || memberResult.getTitle().contains("8") || memberResult.getTitle().contains("12")) { + if (memberResult.getTitle().contains("1") || memberResult.getTitle().contains("5") || memberResult.getTitle().contains("8") || memberResult.getTitle().contains("12") + || memberResult.getTitle().contains("2") || memberResult.getTitle().contains("6") || memberResult.getTitle().contains("9") || memberResult.getTitle().contains("13")) { title.setGj(title.getGj() + 1); continue; } - if (memberResult.getTitle().contains("2") || memberResult.getTitle().contains("6") || memberResult.getTitle().contains("9") || memberResult.getTitle().contains("13")) { - title.setFg(title.getFg() + 1); - continue; - } if (memberResult.getTitle().contains("3") || memberResult.getTitle().contains("10") || memberResult.getTitle().contains("14")) { title.setZj(title.getZj() + 1); continue; @@ -546,7 +543,7 @@ public class KtsGroupServiceImpl implements KtsGroupService { title.setGjList(ktsGroupDao.queryGjTitleStatistics(entry.getKey())); title.setCjList(ktsGroupDao.queryCjTitleStatistics(entry.getKey())); title.setZjList(ktsGroupDao.queryZjTitleStatistics(entry.getKey())); - title.setFgjList(ktsGroupDao.queryFgjTitleStatistics(entry.getKey())); +// title.setFgjList(ktsGroupDao.queryFgjTitleStatistics(entry.getKey())); titleList.add(title); workerStatistics.setTitleList(titleList); } @@ -555,5 +552,10 @@ public class KtsGroupServiceImpl implements KtsGroupService { return workerStatistics; } + @Override + public List<GroupVO.StudentResult> queryStudentList(GroupDto.Query query) { + return ktsGroupDao.queryStudentStatistics(query); + } + } diff --git a/research-system/src/main/resources/mapper/dao/KtsGroupDao.xml b/research-system/src/main/resources/mapper/dao/KtsGroupDao.xml index 9d5ba3df..fad5bd5d 100644 --- a/research-system/src/main/resources/mapper/dao/KtsGroupDao.xml +++ b/research-system/src/main/resources/mapper/dao/KtsGroupDao.xml @@ -228,10 +228,10 @@ <select id="queryGjTitleStatistics" resultType="com.research.system.domain.vo.GroupVO$WorkerStatistics$Title$GjDto"> select o.id as orgId, o.org_name as orgName, - SUM(CASE WHEN FIND_IN_SET('1', m.title) > 0 THEN 1 ELSE 0 END) AS js, - SUM(CASE WHEN FIND_IN_SET('5', m.title) > 0 THEN 1 ELSE 0 END) AS yjy, - SUM(CASE WHEN FIND_IN_SET('8', m.title) > 0 THEN 1 ELSE 0 END) AS zrys, - SUM(CASE WHEN FIND_IN_SET('12', m.title) > 0 THEN 1 ELSE 0 END) AS gjgcs + SUM(CASE WHEN FIND_IN_SET('1', m.title) > 0 or FIND_IN_SET('2', m.title) > 0 THEN 1 ELSE 0 END) AS js, + SUM(CASE WHEN FIND_IN_SET('5', m.title) > 0 or FIND_IN_SET('6', m.title) > 0 THEN 1 ELSE 0 END) AS yjy, + SUM(CASE WHEN FIND_IN_SET('8', m.title) > 0 or FIND_IN_SET('8', m.title) > 0 THEN 1 ELSE 0 END) AS zrys, + SUM(CASE WHEN FIND_IN_SET('12', m.title) > 0 or FIND_IN_SET('13', m.title) > 0 THEN 1 ELSE 0 END) AS gjgcs from prj_proj_org o left join kts_kt_group g on g.proj_org_id = o.id and g.del_flag = 0 @@ -288,4 +288,17 @@ and o.id = #{orgId} group by o.id </select> + + <select id="queryStudentStatistics" resultType="com.research.system.domain.vo.GroupVO$StudentResult"> + select o.id as orgId, + o.org_name as orgName, + SUM(CASE WHEN m.graduation_time is not null and m.graduation_time <= now() and m.category = 1 THEN 1 ELSE 0 END) AS `by`, + SUM(CASE WHEN m.graduation_time is not null and m.graduation_time > now() and m.category = 1 THEN 1 ELSE 0 END) AS zd + from prj_proj_org o + left join + kts_kt_group g on g.proj_org_id = o.id and g.del_flag = 0 + LEFT JOIN kts_kt_group_member m on m.kt_group_id = g.id + where o.del_flag = 0 + group by o.id + </select> </mapper> diff --git a/research-system/src/main/resources/mapper/dao/OutcomeDao.xml b/research-system/src/main/resources/mapper/dao/OutcomeDao.xml index cf8dd558..5826412c 100644 --- a/research-system/src/main/resources/mapper/dao/OutcomeDao.xml +++ b/research-system/src/main/resources/mapper/dao/OutcomeDao.xml @@ -60,8 +60,8 @@ a.status FROM ach_achievement a - left join prj_proj_org p on a.proj_org_id = p.id - left join kts_kt_group g on a.kt_group_id = g.id + left join prj_proj_org p on a.proj_org_id = p.id and p.del_flag = 0 + left join kts_kt_group g on a.kt_group_id = g.id and g.del_flag = 0 WHERE a.del_flag = 0 <if test="dto.title != null and dto.title != ''"> diff --git a/research-system/src/main/resources/mapper/system/KtsKtGroupMemberMapper.xml b/research-system/src/main/resources/mapper/system/KtsKtGroupMemberMapper.xml index 7e0c909b..78a0abec 100644 --- a/research-system/src/main/resources/mapper/system/KtsKtGroupMemberMapper.xml +++ b/research-system/src/main/resources/mapper/system/KtsKtGroupMemberMapper.xml @@ -27,6 +27,7 @@ <result column="remark" jdbcType="VARCHAR" property="remark" /> <result column="enroll_time" jdbcType="TIMESTAMP" property="enrollTime" /> <result column="graduation_time" jdbcType="TIMESTAMP" property="graduationTime" /> + <result column="reading_status" jdbcType="TINYINT" property="readingStatus" /> </resultMap> <sql id="Example_Where_Clause"> <where> @@ -90,7 +91,7 @@ id, user_id, kt_group_id, parent_member_id, member_name, member_phone, member_email, member_gender, member_birth, type, category, qualification, title, sort, intro, audit_status, member_status, del_flag, create_by, create_time, update_by, update_time, remark, - enroll_time, graduation_time + enroll_time, graduation_time, reading_status </sql> <select id="selectByExample" parameterType="com.research.system.domain.po.KtsKtGroupMemberExample" resultMap="BaseResultMap"> select @@ -125,7 +126,7 @@ audit_status, member_status, del_flag, create_by, create_time, update_by, update_time, remark, enroll_time, - graduation_time) + graduation_time, reading_status) values (#{id,jdbcType=BIGINT}, #{userId,jdbcType=BIGINT}, #{ktGroupId,jdbcType=BIGINT}, #{parentMemberId,jdbcType=VARCHAR}, #{memberName,jdbcType=VARCHAR}, #{memberPhone,jdbcType=VARCHAR}, #{memberEmail,jdbcType=VARCHAR}, #{memberGender,jdbcType=TINYINT}, #{memberBirth,jdbcType=DATE}, @@ -134,7 +135,7 @@ #{auditStatus,jdbcType=TINYINT}, #{memberStatus,jdbcType=TINYINT}, #{delFlag,jdbcType=TINYINT}, #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP}, #{updateBy,jdbcType=VARCHAR}, #{updateTime,jdbcType=TIMESTAMP}, #{remark,jdbcType=VARCHAR}, #{enrollTime,jdbcType=TIMESTAMP}, - #{graduationTime,jdbcType=TIMESTAMP}) + #{graduationTime,jdbcType=TIMESTAMP}, #{readingStatus,jdbcType=TINYINT}) </insert> <insert id="insertSelective" parameterType="com.research.system.domain.po.KtsKtGroupMember"> insert into kts_kt_group_member @@ -214,6 +215,9 @@ <if test="graduationTime != null"> graduation_time, </if> + <if test="readingStatus != null"> + reading_status, + </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> <if test="id != null"> @@ -291,6 +295,9 @@ <if test="graduationTime != null"> #{graduationTime,jdbcType=TIMESTAMP}, </if> + <if test="readingStatus != null"> + #{readingStatus,jdbcType=TINYINT}, + </if> </trim> </insert> <select id="countByExample" parameterType="com.research.system.domain.po.KtsKtGroupMemberExample" resultType="java.lang.Long"> @@ -377,6 +384,9 @@ <if test="record.graduationTime != null"> graduation_time = #{record.graduationTime,jdbcType=TIMESTAMP}, </if> + <if test="record.readingStatus != null"> + reading_status = #{record.readingStatus,jdbcType=TINYINT}, + </if> </set> <if test="_parameter != null"> <include refid="Update_By_Example_Where_Clause" /> @@ -408,7 +418,8 @@ update_time = #{record.updateTime,jdbcType=TIMESTAMP}, remark = #{record.remark,jdbcType=VARCHAR}, enroll_time = #{record.enrollTime,jdbcType=TIMESTAMP}, - graduation_time = #{record.graduationTime,jdbcType=TIMESTAMP} + graduation_time = #{record.graduationTime,jdbcType=TIMESTAMP}, + reading_status = #{record.readingStatus,jdbcType=TINYINT} <if test="_parameter != null"> <include refid="Update_By_Example_Where_Clause" /> </if> @@ -488,6 +499,9 @@ <if test="graduationTime != null"> graduation_time = #{graduationTime,jdbcType=TIMESTAMP}, </if> + <if test="readingStatus != null"> + reading_status = #{readingStatus,jdbcType=TINYINT}, + </if> </set> where id = #{id,jdbcType=BIGINT} </update> @@ -516,7 +530,8 @@ update_time = #{updateTime,jdbcType=TIMESTAMP}, remark = #{remark,jdbcType=VARCHAR}, enroll_time = #{enrollTime,jdbcType=TIMESTAMP}, - graduation_time = #{graduationTime,jdbcType=TIMESTAMP} + graduation_time = #{graduationTime,jdbcType=TIMESTAMP}, + reading_status = #{readingStatus,jdbcType=TINYINT} where id = #{id,jdbcType=BIGINT} </update> </mapper> \ No newline at end of file