From 1bf7f78c979c08f8724f927d948bbc7b87d77176 Mon Sep 17 00:00:00 2001 From: wuzhen <52326163@qq.com> Date: Wed, 13 Aug 2025 13:50:31 +0800 Subject: [PATCH] wuzhen update test2 --- .../controller/InternshipInfoController.java | 86 ++++++++ .../zsjy/domain/bo/InternshipInfoQueryBO.java | 139 ++++++++++++ .../zsjy/domain/vo/InternshipInfoVO.java | 202 ++++++++++++++++++ .../zsjy/mapper/InternshipInfoMapper.java | 54 +++++ .../zsjy/service/IInternshipInfoService.java | 75 +++++++ .../impl/InternshipInfoServiceImpl.java | 188 ++++++++++++++++ .../resources/mapper/InternshipInfoMapper.xml | 197 +++++++++++++++++ 7 files changed, 941 insertions(+) create mode 100644 backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/controller/InternshipInfoController.java create mode 100644 backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/InternshipInfoQueryBO.java create mode 100644 backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/vo/InternshipInfoVO.java create mode 100644 backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/mapper/InternshipInfoMapper.java create mode 100644 backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/IInternshipInfoService.java create mode 100644 backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/InternshipInfoServiceImpl.java create mode 100644 backend/ruoyi-modules/ruoyi-zsjy/src/main/resources/mapper/InternshipInfoMapper.xml diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/controller/InternshipInfoController.java b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/controller/InternshipInfoController.java new file mode 100644 index 00000000..94bfc509 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/controller/InternshipInfoController.java @@ -0,0 +1,86 @@ +package org.dromara.zsjy.controller; + +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.common.core.domain.R; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.web.core.BaseController; +import org.dromara.zsjy.domain.vo.InternshipInfoVO; +import org.dromara.zsjy.domain.bo.InternshipInfoQueryBO; +import org.dromara.zsjy.service.IInternshipInfoService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.constraints.NotEmpty; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import jakarta.servlet.http.HttpServletResponse; + +/** + * 实习信息管理Controller + * + * @author system + * @date 2025-01-03 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/zsjy/internship") +@Tag(name = "实习信息管理", description = "班主任查看学生实习情况管理") +public class InternshipInfoController extends BaseController { + + private final IInternshipInfoService internshipInfoService; + + /** + * 查询学生实习信息列表(班主任专用) + */ + @Operation(summary = "查询学生实习信息列表", description = "班主任查看本班学生实习情况") + @SaCheckPermission("zsjy:internship:list") + @GetMapping("/list") + public TableDataInfo list(@Validated InternshipInfoQueryBO queryBO, PageQuery pageQuery) { + return internshipInfoService.queryPageList(queryBO, pageQuery); + } + + /** + * 获取学生实习信息详细信息 + */ + @Operation(summary = "获取学生实习详情", description = "查看单个学生的实习详细信息") + @SaCheckPermission("zsjy:internship:query") + @GetMapping("/{studentId}") + public R getInfo( + @Parameter(description = "学生ID", required = true) + @PathVariable Long studentId) { + return R.ok(internshipInfoService.queryById(studentId)); + } + + /** + * 导出学生实习信息列表 + */ + @Operation(summary = "导出学生实习信息", description = "导出班级学生实习情况数据") + @SaCheckPermission("zsjy:internship:export") + @PostMapping("/export") + public void export(@Validated InternshipInfoQueryBO queryBO, HttpServletResponse response) { + internshipInfoService.exportInternshipInfo(queryBO, response); + } + + /** + * 获取班主任管理的班级信息 + */ + @Operation(summary = "获取班主任班级", description = "获取当前登录班主任管理的班级列表") + @SaCheckPermission("zsjy:internship:class") + @GetMapping("/classes") + public R getTeacherClasses() { + return R.ok(internshipInfoService.getTeacherClasses()); + } + + /** + * 统计实习状态数据 + */ + @Operation(summary = "实习状态统计", description = "统计班级学生实习状态分布") + @SaCheckPermission("zsjy:internship:statistics") + @GetMapping("/statistics") + public R getInternshipStatistics(@Validated InternshipInfoQueryBO queryBO) { + return R.ok(internshipInfoService.getInternshipStatistics(queryBO)); + } +} diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/InternshipInfoQueryBO.java b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/InternshipInfoQueryBO.java new file mode 100644 index 00000000..e90f38f4 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/bo/InternshipInfoQueryBO.java @@ -0,0 +1,139 @@ +package org.dromara.zsjy.domain.bo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.dromara.common.core.validate.QueryGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; + +import java.io.Serial; +import java.util.Date; + +/** + * 学生实习信息查询业务对象 InternshipInfoQueryBO + * + * @author system + * @date 2025-01-03 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@Schema(description = "学生实习信息查询业务对象") +public class InternshipInfoQueryBO extends BaseEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 学号 + */ + @Schema(description = "学号") + private String studentNo; + + /** + * 学生姓名 + */ + @Schema(description = "学生姓名") + private String studentName; + + /** + * 班级ID + */ + @Schema(description = "班级ID") + private String classId; + + /** + * 班级名称 + */ + @Schema(description = "班级名称") + private String className; + + /** + * 年级 + */ + @Schema(description = "年级") + private String grade; + + /** + * 学院名称 + */ + @Schema(description = "学院名称") + private String collegeName; + + /** + * 专业名称 + */ + @Schema(description = "专业名称") + private String majorName; + + /** + * 性别:0-男,1-女 + */ + @Schema(description = "性别:0-男,1-女") + private String gender; + + /** + * 实习状态:1-进行中,2-已完成,3-已暂停,4-已终止,null-未实习 + */ + @Schema(description = "实习状态:1-进行中,2-已完成,3-已暂停,4-已终止,null-未实习") + private String internshipStatus; + + /** + * 实习单位名称 + */ + @Schema(description = "实习单位名称") + private String companyName; + + /** + * 实习单位地址 + */ + @Schema(description = "实习单位地址") + private String companyAddress; + + /** + * 实习岗位 + */ + @Schema(description = "实习岗位") + private String internshipPosition; + + /** + * 实习协议状态:1-已签署,2-未签署 + */ + @Schema(description = "实习协议状态:1-已签署,2-未签署") + private String agreementStatus; + + /** + * 班主任ID(用于数据权限控制) + */ + @Schema(description = "班主任ID", hidden = true) + private Long classTeacherId; + + /** + * 辅导员ID(用于数据权限控制) + */ + @Schema(description = "辅导员ID", hidden = true) + private Long counselorId; + + /** + * 实习开始日期 - 开始 + */ + @Schema(description = "实习开始日期-开始") + private Date internshipStartDateBegin; + + /** + * 实习开始日期 - 结束 + */ + @Schema(description = "实习开始日期-结束") + private Date internshipStartDateEnd; + + /** + * 实习结束日期 - 开始 + */ + @Schema(description = "实习结束日期-开始") + private Date internshipEndDateBegin; + + /** + * 实习结束日期 - 结束 + */ + @Schema(description = "实习结束日期-结束") + private Date internshipEndDateEnd; +} diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/vo/InternshipInfoVO.java b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/vo/InternshipInfoVO.java new file mode 100644 index 00000000..a5c93d8c --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/domain/vo/InternshipInfoVO.java @@ -0,0 +1,202 @@ +package org.dromara.zsjy.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + +/** + * 学生实习信息视图对象 InternshipInfoVO + * + * @author system + * @date 2025-01-03 + */ +@Data +@Schema(description = "学生实习信息视图对象") +public class InternshipInfoVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 学生ID + */ + @Schema(description = "学生ID") + private Long studentId; + + /** + * 学号 + */ + @Schema(description = "学号") + private String studentNo; + + /** + * 学生姓名 + */ + @Schema(description = "学生姓名") + private String studentName; + + /** + * 性别:0-男,1-女 + */ + @Schema(description = "性别:0-男,1-女") + private String gender; + + /** + * 手机号码 + */ + @Schema(description = "手机号码") + private String phone; + + /** + * 班级ID + */ + @Schema(description = "班级ID") + private String classId; + + /** + * 班级名称 + */ + @Schema(description = "班级名称") + private String className; + + /** + * 年级 + */ + @Schema(description = "年级") + private String grade; + + /** + * 学院名称 + */ + @Schema(description = "学院名称") + private String collegeName; + + /** + * 专业名称 + */ + @Schema(description = "专业名称") + private String majorName; + + /** + * 辅导员姓名 + */ + @Schema(description = "辅导员姓名") + private String counselorName; + + /** + * 班主任姓名 + */ + @Schema(description = "班主任姓名") + private String classTeacherName; + + /** + * 实习信息ID + */ + @Schema(description = "实习信息ID") + private Long internshipId; + + /** + * 实习状态:1-进行中,2-已完成,3-已暂停,4-已终止 + */ + @Schema(description = "实习状态:1-进行中,2-已完成,3-已暂停,4-已终止,null-未实习") + private String internshipStatus; + + /** + * 实习状态显示名称 + */ + @Schema(description = "实习状态显示名称") + private String internshipStatusName; + + /** + * 实习单位名称 + */ + @Schema(description = "实习单位名称") + private String companyName; + + /** + * 实习单位地址 + */ + @Schema(description = "实习单位地址") + private String companyAddress; + + /** + * 实习岗位 + */ + @Schema(description = "实习岗位") + private String internshipPosition; + + /** + * 实习薪资 + */ + @Schema(description = "实习薪资") + private BigDecimal internshipAllowance; + + /** + * 实习开始时间 + */ + @Schema(description = "实习开始时间") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date internshipStartDate; + + /** + * 实习结束时间 + */ + @Schema(description = "实习结束时间") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date internshipEndDate; + + /** + * 联系人姓名 + */ + @Schema(description = "联系人姓名") + private String contactPersonName; + + /** + * 联系人电话 + */ + @Schema(description = "联系人电话") + private String contactPersonPhone; + + /** + * 实习协议状态:1-已签署,2-未签署 + */ + @Schema(description = "实习协议状态:1-已签署,2-未签署") + private String agreementStatus; + + /** + * 备注信息 + */ + @Schema(description = "备注信息") + private String remark; + + /** + * 创建者 + */ + @Schema(description = "创建者") + private Long createBy; + + /** + * 创建时间 + */ + @Schema(description = "创建时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 更新者 + */ + @Schema(description = "更新者") + private Long updateBy; + + /** + * 更新时间 + */ + @Schema(description = "更新时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Date updateTime; +} diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/mapper/InternshipInfoMapper.java b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/mapper/InternshipInfoMapper.java new file mode 100644 index 00000000..935e9fca --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/mapper/InternshipInfoMapper.java @@ -0,0 +1,54 @@ +package org.dromara.zsjy.mapper; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.dromara.zsjy.domain.bo.InternshipInfoQueryBO; +import org.dromara.zsjy.domain.vo.InternshipInfoVO; + +import java.util.List; +import java.util.Map; + +/** + * 实习信息管理Mapper接口 + * + * @author system + * @date 2025-01-03 + */ +@Mapper +public interface InternshipInfoMapper { + + /** + * 查询学生实习信息列表 + * + * @param page 分页参数(可选) + * @param queryBO 查询条件 + * @return 学生实习信息列表 + */ + List selectInternshipInfoList(@Param("page") Page page, + @Param("queryBO") InternshipInfoQueryBO queryBO); + + /** + * 根据学生ID查询实习信息详情 + * + * @param studentId 学生ID + * @return 学生实习信息详情 + */ + InternshipInfoVO selectInternshipInfoById(@Param("studentId") Long studentId); + + /** + * 查询班主任管理的班级信息 + * + * @param teacherId 班主任ID + * @return 班级信息列表 + */ + List> selectTeacherClasses(@Param("teacherId") Long teacherId); + + /** + * 查询实习状态统计数据 + * + * @param queryBO 查询条件 + * @return 统计数据 + */ + Map selectInternshipStatistics(@Param("queryBO") InternshipInfoQueryBO queryBO); +} diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/IInternshipInfoService.java b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/IInternshipInfoService.java new file mode 100644 index 00000000..60ab45c0 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/IInternshipInfoService.java @@ -0,0 +1,75 @@ +package org.dromara.zsjy.service; + +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.zsjy.domain.vo.InternshipInfoVO; +import org.dromara.zsjy.domain.bo.InternshipInfoQueryBO; +import jakarta.servlet.http.HttpServletResponse; + +import java.util.List; +import java.util.Map; + +/** + * 实习信息管理Service接口 + * + * @author system + * @date 2025-01-03 + */ +public interface IInternshipInfoService { + + /** + * 查询学生实习信息分页列表(班主任专用) + * + * @param queryBO 查询条件 + * @param pageQuery 分页参数 + * @return 学生实习信息分页列表 + */ + TableDataInfo queryPageList(InternshipInfoQueryBO queryBO, PageQuery pageQuery); + + /** + * 查询学生实习信息列表(不分页) + * + * @param queryBO 查询条件 + * @return 学生实习信息列表 + */ + List queryList(InternshipInfoQueryBO queryBO); + + /** + * 根据学生ID查询实习信息详情 + * + * @param studentId 学生ID + * @return 学生实习信息详情 + */ + InternshipInfoVO queryById(Long studentId); + + /** + * 导出学生实习信息 + * + * @param queryBO 查询条件 + * @param response HTTP响应对象 + */ + void exportInternshipInfo(InternshipInfoQueryBO queryBO, HttpServletResponse response); + + /** + * 获取班主任管理的班级信息 + * + * @return 班级信息列表 + */ + List> getTeacherClasses(); + + /** + * 获取实习状态统计数据 + * + * @param queryBO 查询条件 + * @return 统计数据 + */ + Map getInternshipStatistics(InternshipInfoQueryBO queryBO); + + /** + * 根据当前用户获取数据权限范围 + * (用于限制班主任只能查看自己班级的学生) + * + * @param queryBO 查询条件(会被设置权限参数) + */ + void setDataPermission(InternshipInfoQueryBO queryBO); +} diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/InternshipInfoServiceImpl.java b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/InternshipInfoServiceImpl.java new file mode 100644 index 00000000..b06d2e15 --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/service/impl/InternshipInfoServiceImpl.java @@ -0,0 +1,188 @@ +package org.dromara.zsjy.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.zsjy.domain.bo.InternshipInfoQueryBO; +import org.dromara.zsjy.domain.vo.InternshipInfoVO; +import org.dromara.zsjy.mapper.InternshipInfoMapper; +import org.dromara.zsjy.service.IInternshipInfoService; +import org.springframework.stereotype.Service; +import jakarta.servlet.http.HttpServletResponse; + +import java.util.*; + +/** + * 实习信息管理Service业务层处理 + * + * @author system + * @date 2025-01-03 + */ +@Slf4j +@RequiredArgsConstructor +@Service +public class InternshipInfoServiceImpl implements IInternshipInfoService { + + private final InternshipInfoMapper internshipInfoMapper; + + /** + * 查询学生实习信息分页列表(班主任专用) + */ + @Override + public TableDataInfo queryPageList(InternshipInfoQueryBO queryBO, PageQuery pageQuery) { + // 设置数据权限 + setDataPermission(queryBO); + + // 创建分页对象 + Page page = pageQuery.build(); + + // 查询数据 + List list = internshipInfoMapper.selectInternshipInfoList(page, queryBO); + + // 处理实习状态显示名称 + processInternshipStatusName(list); + + return TableDataInfo.build(page); + } + + /** + * 查询学生实习信息列表(不分页) + */ + @Override + public List queryList(InternshipInfoQueryBO queryBO) { + // 设置数据权限 + setDataPermission(queryBO); + + // 查询数据 + List list = internshipInfoMapper.selectInternshipInfoList(null, queryBO); + + // 处理实习状态显示名称 + processInternshipStatusName(list); + + return list; + } + + /** + * 根据学生ID查询实习信息详情 + */ + @Override + public InternshipInfoVO queryById(Long studentId) { + if (ObjectUtil.isNull(studentId)) { + return null; + } + + InternshipInfoVO vo = internshipInfoMapper.selectInternshipInfoById(studentId); + + if (ObjectUtil.isNotNull(vo)) { + // 处理实习状态显示名称 + processInternshipStatusName(Collections.singletonList(vo)); + } + + return vo; + } + + /** + * 导出学生实习信息 + */ + @Override + public void exportInternshipInfo(InternshipInfoQueryBO queryBO, HttpServletResponse response) { + List list = queryList(queryBO); + ExcelUtil.exportExcel(list, "学生实习信息", InternshipInfoVO.class, response); + } + + /** + * 获取班主任管理的班级信息 + */ + @Override + public List> getTeacherClasses() { + // 获取当前登录用户ID + Long currentUserId = LoginHelper.getUserId(); + + return internshipInfoMapper.selectTeacherClasses(currentUserId); + } + + /** + * 获取实习状态统计数据 + */ + @Override + public Map getInternshipStatistics(InternshipInfoQueryBO queryBO) { + // 设置数据权限 + setDataPermission(queryBO); + + // 查询统计数据 + Map statistics = internshipInfoMapper.selectInternshipStatistics(queryBO); + + if (ObjectUtil.isNull(statistics)) { + statistics = new HashMap<>(); + statistics.put("totalCount", 0); + statistics.put("internshipCount", 0); + statistics.put("noInternshipCount", 0); + statistics.put("internshipRate", "0.00%"); + } + + return statistics; + } + + /** + * 根据当前用户获取数据权限范围 + */ + @Override + public void setDataPermission(InternshipInfoQueryBO queryBO) { + try { + // 获取当前登录用户ID + Long currentUserId = LoginHelper.getUserId(); + + if (ObjectUtil.isNotNull(currentUserId)) { + // 设置班主任ID用于数据权限控制 + queryBO.setClassTeacherId(currentUserId); + + log.debug("设置数据权限:班主任ID={}", currentUserId); + } + } catch (Exception e) { + log.warn("获取数据权限失败:{}", e.getMessage()); + } + } + + /** + * 处理实习状态显示名称 + */ + private void processInternshipStatusName(List list) { + if (CollUtil.isEmpty(list)) { + return; + } + + for (InternshipInfoVO vo : list) { + String status = vo.getInternshipStatus(); + String statusName = getInternshipStatusName(status); + vo.setInternshipStatusName(statusName); + } + } + + /** + * 获取实习状态显示名称 + */ + private String getInternshipStatusName(String status) { + if (StrUtil.isBlank(status)) { + return "未实习"; + } + + return switch (status) { + case "1" -> "进行中"; + case "2" -> "已完成"; + case "3" -> "已暂停"; + case "4" -> "已终止"; + default -> "未知状态"; + }; + } +} diff --git a/backend/ruoyi-modules/ruoyi-zsjy/src/main/resources/mapper/InternshipInfoMapper.xml b/backend/ruoyi-modules/ruoyi-zsjy/src/main/resources/mapper/InternshipInfoMapper.xml new file mode 100644 index 00000000..a99087ae --- /dev/null +++ b/backend/ruoyi-modules/ruoyi-zsjy/src/main/resources/mapper/InternshipInfoMapper.xml @@ -0,0 +1,197 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT + s.id as student_id, + s.student_no, + s.name as student_name, + s.gender, + s.phone, + s.class_id, + s.class_name, + s.grade, + s.college_name, + s.major_name, + s.counselor_name, + s.class_teacher_name, + c.class_teacher_id, + c.counselor_id, + i.internship_id as internship_id, + i.internship_status, + i.company_name, + i.company_address, + i.position_name as internship_position, + i.internship_allowance, + i.start_date as internship_start_date, + i.end_date as internship_end_date, + i.company_contact as contact_person_name, + i.company_phone as contact_person_phone, + i.status as agreement_status, + COALESCE(i.remark, s.remark) as remark, + COALESCE(i.create_by, s.create_by) as create_by, + COALESCE(i.create_time, s.create_time) as create_time, + COALESCE(i.update_by, s.update_by) as update_by, + COALESCE(i.update_time, s.update_time) as update_time + FROM xg_student_msg s + LEFT JOIN xg_class_msg c ON s.class_id = c.id AND c.tenant_id = '000000' + LEFT JOIN zsjy_internship_info i ON s.id = i.student_id AND i.deleted = 0 AND i.tenant_id = '000000' + WHERE s.deleted = 0 + AND c.deleted = 0 + AND s.student_status = '1' + AND s.tenant_id = '000000' + + + + + + AND s.student_no LIKE CONCAT('%', #{queryBO.studentNo}, '%') + + + AND s.name LIKE CONCAT('%', #{queryBO.studentName}, '%') + + + AND s.class_id = #{queryBO.classId} + + + AND s.class_name LIKE CONCAT('%', #{queryBO.className}, '%') + + + AND s.grade = #{queryBO.grade} + + + AND s.college_name LIKE CONCAT('%', #{queryBO.collegeName}, '%') + + + AND s.major_name LIKE CONCAT('%', #{queryBO.majorName}, '%') + + + AND s.gender = #{queryBO.gender} + + + + + AND i.internship_status IS NULL + + + AND i.internship_status = #{queryBO.internshipStatus} + + + + + AND i.company_name LIKE CONCAT('%', #{queryBO.companyName}, '%') + + + AND i.company_address LIKE CONCAT('%', #{queryBO.companyAddress}, '%') + + + AND i.internship_position LIKE CONCAT('%', #{queryBO.internshipPosition}, '%') + + + AND i.agreement_status = #{queryBO.agreementStatus} + + + AND i.internship_start_date >= #{queryBO.internshipStartDateBegin} + + + AND i.internship_start_date <= #{queryBO.internshipStartDateEnd} + + + AND i.internship_end_date >= #{queryBO.internshipEndDateBegin} + + + AND i.internship_end_date <= #{queryBO.internshipEndDateEnd} + + + + AND c.class_teacher_id = #{queryBO.classTeacherId} + + + AND c.counselor_id = #{queryBO.counselorId} + + + + + + + + + + + + + + + +