添加培训人员查询功能

dev
zhangyue 2026-04-07 17:30:35 +08:00
parent 6b6bb27969
commit 17c650c40b
11 changed files with 213 additions and 8 deletions

View File

@ -8,6 +8,7 @@ import com.alibaba.cola.dto.SingleResponse;
import com.jjb.saas.framework.auth.model.SSOUser;
import com.jjb.saas.framework.auth.utils.AuthContext;
import com.zcloud.edu.api.study.StudentServiceI;
import com.zcloud.edu.dto.clientobject.study.EducationUserCO;
import com.zcloud.edu.dto.clientobject.study.StudentCO;
import com.zcloud.edu.dto.study.*;
import io.swagger.annotations.Api;
@ -46,6 +47,12 @@ public class StudentController {
return studentService.listPage(qry);
}
@ApiOperation("获取培训人员")
@PostMapping("/educationUserList")
public PageResponse<EducationUserCO> educationUserList(@RequestBody EducationUserQry qry) {
return studentService.educationUserList(qry);
}
@ApiOperation("一人一档分页")

View File

@ -9,15 +9,18 @@ import com.zcloud.edu.domain.model.archives.ClassArchivesE;
import com.zcloud.edu.domain.model.archives.PersonArchivesE;
import com.zcloud.edu.domain.model.study.*;
import com.zcloud.edu.dto.archives.ClassArchivesQry;
import com.zcloud.edu.dto.clientobject.study.EducationUserCO;
import com.zcloud.edu.dto.clientobject.study.StudentCO;
import com.zcloud.edu.dto.clientobject.study.StudentSignCO;
import com.zcloud.edu.dto.data.archives.ClassArchivesDTO;
import com.zcloud.edu.dto.data.archives.PersonArchivesDTO;
import com.zcloud.edu.dto.study.EducationUserQry;
import com.zcloud.edu.dto.study.StudentCountQry;
import com.zcloud.edu.dto.study.StudentPageQry;
import com.zcloud.edu.persistence.dataobject.study.*;
import com.zcloud.edu.persistence.repository.study.*;
import com.zcloud.gbscommon.utils.PageQueryHelper;
import com.zcloud.gbscommon.utils.Tools;
import lombok.AllArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
@ -244,5 +247,14 @@ public class StudentQueryExe {
StudentCO studentCO = BeanUtil.copyProperties(studentDO, StudentCO.class);
return SingleResponse.of(studentCO);
}
public PageResponse<EducationUserCO> educationUserList(EducationUserQry qry) {
Map<String, Object> params = PageQueryHelper.toHashMap(qry);
if (!Tools.isEmpty(params.get("likePhone"))) {
params.put("phoneArr",String.valueOf(params.get("likePhone")).split(","));
}
PageResponse<EducationUserCO> pageResponse = studentRepository.educationUserList(params);
return pageResponse;
}
}

View File

@ -9,13 +9,11 @@ import com.zcloud.edu.command.study.StudentAddExe;
import com.zcloud.edu.command.study.StudentRemoveExe;
import com.zcloud.edu.command.study.StudentUpdateExe;
import com.zcloud.edu.dto.archives.ClassArchivesQry;
import com.zcloud.edu.dto.clientobject.study.EducationUserCO;
import com.zcloud.edu.dto.clientobject.study.StudentCO;
import com.zcloud.edu.dto.data.archives.ClassArchivesDTO;
import com.zcloud.edu.dto.data.archives.PersonArchivesDTO;
import com.zcloud.edu.dto.study.StudentAddCmd;
import com.zcloud.edu.dto.study.StudentCountQry;
import com.zcloud.edu.dto.study.StudentPageQry;
import com.zcloud.edu.dto.study.StudentUpdateCmd;
import com.zcloud.edu.dto.study.*;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
@ -118,5 +116,10 @@ public class StudentServiceImpl implements StudentServiceI {
public SingleResponse<StudentCO> getInfoByStudentId(String studentId) {
return studentQueryExe.executeGetInfoByStudentId(studentId);
}
@Override
public PageResponse<EducationUserCO> educationUserList(EducationUserQry qry) {
return studentQueryExe.educationUserList(qry);
}
}

View File

@ -4,13 +4,11 @@ import com.alibaba.cola.dto.MultiResponse;
import com.alibaba.cola.dto.PageResponse;
import com.alibaba.cola.dto.SingleResponse;
import com.zcloud.edu.dto.archives.ClassArchivesQry;
import com.zcloud.edu.dto.clientobject.study.EducationUserCO;
import com.zcloud.edu.dto.clientobject.study.StudentCO;
import com.zcloud.edu.dto.data.archives.ClassArchivesDTO;
import com.zcloud.edu.dto.data.archives.PersonArchivesDTO;
import com.zcloud.edu.dto.study.StudentAddCmd;
import com.zcloud.edu.dto.study.StudentCountQry;
import com.zcloud.edu.dto.study.StudentPageQry;
import com.zcloud.edu.dto.study.StudentUpdateCmd;
import com.zcloud.edu.dto.study.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -52,5 +50,7 @@ public interface StudentServiceI {
MultiResponse<StudentCO> listStudentCount(StudentCountQry qry);
SingleResponse<StudentCO> getInfoByStudentId(String studentId);
PageResponse<EducationUserCO> educationUserList(EducationUserQry qry);
}

View File

@ -0,0 +1,47 @@
package com.zcloud.edu.dto.clientobject.study;
import com.alibaba.cola.dto.ClientObject;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
/**
* web-client
* @Author zhy
* @Date 2025-11-25 15:46:08
*/
@Data
public class EducationUserCO extends ClientObject {
@ApiModelProperty(value = "所属相关方id")
private String corpinfoId;
@ApiModelProperty(value = "所属相关方名称")
private String corpinfoName;
@ApiModelProperty(value = "所属项目id")
private String projectId;
@ApiModelProperty(value = "所属项目名称")
private String projectName;
@ApiModelProperty(value = "用户岗位名称")
private String postName;
@ApiModelProperty(value = "用户部门名称")
private String deptName;
@ApiModelProperty(value = "用户名称")
private String name;
@ApiModelProperty(value = "手机号")
private String phone;
@ApiModelProperty(value = "身份证")
private String userIdCard;
@ApiModelProperty(value = "申请状态")
private Integer applyStatus;
@ApiModelProperty(value = "开始时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime startTime;
@ApiModelProperty(value = "结束时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime endTime;
@ApiModelProperty(value = "审核状态")
private String examineStatus;
}

View File

@ -0,0 +1,48 @@
package com.zcloud.edu.dto.study;
import com.alibaba.cola.dto.PageQuery;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* web-client
*
* @Author zhy
* @Date 2025-11-25 15:46:08
*/
@Data
public class EducationUserQry extends PageQuery {
/**
* ,
* - `like`: SQLLIKE
* - `eq`: SQL=
* - `gt`:
* - `lt`:
* - `ge`:
* - `le`:
* - `ne`: SQL!=
*/
@ApiModelProperty(value = "项目所属相关方")
private String eqProjectXgfCorpInfoId;
@ApiModelProperty(value = "项目申请相关方")
private String eqApplicationProjectCorpInfoId;
@ApiModelProperty(value = "申请状态")
private String eqApplyStatus;
@ApiModelProperty(value = "是否在有效期")
private Integer isValid;
@ApiModelProperty(value = "用户所属相关方")
private String eqUserCorpInfoId;
@ApiModelProperty(value = "项目所属相关方")
private String eqProjectCorpInfoId;
@ApiModelProperty(value = "用户名称")
private String likeName;
@ApiModelProperty(value = "用户手机号")
private String likePhone;
@ApiModelProperty(value = "项目名称")
private String likeProjectName;
private Integer endTimeStatus;
private String menuPath;
}

View File

@ -39,5 +39,9 @@
<groupId>com.jjb.saas</groupId>
<artifactId>jjb-saas-framework-facade</artifactId>
</dependency>
<dependency>
<groupId>com.zcloud.edu</groupId>
<artifactId>web-client</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -3,8 +3,10 @@ package com.zcloud.edu.persistence.mapper.study;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jjb.saas.framework.datascope.annotation.DataScope;
import com.jjb.saas.framework.datascope.annotation.DataScopes;
import com.zcloud.edu.dto.clientobject.study.EducationUserCO;
import com.zcloud.edu.persistence.dataobject.study.ClassDO;
import com.zcloud.edu.persistence.dataobject.study.StudentDO;
import com.zcloud.edu.persistence.mapper.po.study.StudentCountPO;
@ -48,5 +50,8 @@ public interface StudentMapper extends BaseMapper<StudentDO> {
List<StudentDO> listStudentCount(@Param("params") Map<String, Object> params);
StudentDO findInfoByStudentId(@Param("studentId") String studentId);
IPage<EducationUserCO> educationUserList(Page<Map<String, Object>> page, Map<String, Object> params, String menuPerms);
}

View File

@ -4,9 +4,11 @@ import com.alibaba.cola.dto.PageResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jjb.saas.framework.repository.common.PageHelper;
import com.jjb.saas.framework.repository.repo.impl.BaseRepositoryImpl;
import com.zcloud.edu.domain.enums.MenuEnum;
import com.zcloud.edu.dto.clientobject.study.EducationUserCO;
import com.zcloud.edu.persistence.dataobject.study.ClassDO;
import com.zcloud.edu.persistence.dataobject.study.StudentDO;
import com.zcloud.edu.persistence.mapper.po.study.StudentCountPO;
@ -136,5 +138,16 @@ public class StudentRepositoryImpl extends BaseRepositoryImpl<StudentMapper, Stu
return studentMapper.listStudentCount(params);
}
@Override
public PageResponse<EducationUserCO> educationUserList(Map<String, Object> params) {
Page<Map<String, Object>> page = new Page<>(Integer.parseInt(params.get("pageIndex").toString()), Integer.parseInt(params.get("pageSize").toString()));
String menuPerms = "";
if (!org.springframework.util.ObjectUtils.isEmpty(params.get("menuPath"))) {
menuPerms = MenuEnum.getMenuKeyByPath(params.get("menuPath").toString());
}
IPage<EducationUserCO> iPage = studentMapper.educationUserList(page, params,menuPerms);
return PageHelper.pageToResponse(iPage, iPage.getRecords());
}
}

View File

@ -2,6 +2,7 @@ package com.zcloud.edu.persistence.repository.study;
import com.alibaba.cola.dto.PageResponse;
import com.jjb.saas.framework.repository.repo.BaseRepository;
import com.zcloud.edu.dto.clientobject.study.EducationUserCO;
import com.zcloud.edu.persistence.dataobject.study.ClassDO;
import com.zcloud.edu.persistence.dataobject.study.StudentDO;
import com.zcloud.edu.persistence.mapper.po.study.StudentCountPO;
@ -46,5 +47,7 @@ public interface StudentRepository extends BaseRepository<StudentDO> {
List<StudentDO> countStudentByCorpId(Map<String, Object> params);
List<StudentDO> listStudentCount(Map<String, Object> params);
PageResponse<EducationUserCO> educationUserList(Map<String, Object> params);
}

View File

@ -420,5 +420,68 @@
</where>
group by s.student_id
</select>
<select id="educationUserList" resultType="com.zcloud.edu.dto.clientobject.study.EducationUserCO">
SELECT
GROUP_CONCAT(DISTINCT p.corpinfo_id SEPARATOR ', ') AS corpinfo_id,
GROUP_CONCAT(DISTINCT p.corpinfo_name SEPARATOR ', ') AS corpinfo_name,
GROUP_CONCAT(DISTINCT p.project_id SEPARATOR ', ') AS project_id,
GROUP_CONCAT(DISTINCT p.project_name SEPARATOR ', ') AS project_name,
u.name,
po.post_name,
d.name dept_name,
u.phone,
u.user_id_card,
tu.apply_status,
tu.start_time,
tu.end_time,
tu.examine_status
FROM training_apply_user tau
left join training_apply_record tar on tau.training_apply_record_id = tar.training_apply_record_id
left join (
SELECT *, ROW_NUMBER() OVER (PARTITION BY training_apply_record_id ORDER BY apply_type DESC) as rn
FROM training_apply_process
WHERE delete_enum = 'FALSE' AND apply_type IN (2, 3)
) tap ON tap.training_apply_record_id = tau.training_apply_record_id AND tap.rn = 1
left join user u on tau.user_id = u.id
left join project_user f on u.id = f.user_id
left join project p on p.id = f.project_id and p.project_status = 4
left join department d on d.id = u.department_id
left join post po on u.post_id = po.id
left join training_user tu on tu.phone = u.phone
LEFT JOIN project_approval_flow paf on paf.project_id = p.id and paf.delete_enum = 'FALSE' and paf.audit_type = 2 and paf.approval_status = 2
and paf.corpinfo_id = #{params.eqProjectCorpInfoId}
where f.delete_enum = 'FALSE'
and tap.corpinfo_id = #{params.eqProjectCorpInfoId}
and tau.delete_enum = 'FALSE'
and tar.delete_enum = 'FALSE'
and tau.apply_status = 2
<if test="params.endTimeStatus != null and params.endTimeStatus == 1">
and tu.end_time is not null
</if>
<if test="params.endTimeStatus != null and params.endTimeStatus == -1">
and tu.end_time is null
</if>
<!-- 相关方id-->
<if test="params.eqApplicationProjectCorpInfoId != null and params.eqApplicationProjectCorpInfoId != ''">
and p.corpinfo_id = #{params.eqApplicationProjectCorpInfoId}
</if>
<if test="params.eqApplyStatus != null and params.eqApplyStatus != ''">
and tu.apply_status = #{params.eqApplyStatus}
</if>
<if test="params.likeName != null and params.likeName != ''">
and u.name like concat('%',#{params.likeName},'%')
</if>
<if test="params.likeProjectName != null and params.likeProjectName != ''">
and p.project_name like concat('%',#{params.likeProjectName},'%')
</if>
group by tau.phone
</select>
</mapper>