Forráskód Böngészése

Merge branch 'pre'

dzx 5 hónapja
szülő
commit
3d33a45318
40 módosított fájl, 1543 hozzáadás és 167 törlés
  1. 30 5
      src/main/java/com/xjrsoft/module/internship/controller/InternshipPlanManageController.java
  2. 42 25
      src/main/java/com/xjrsoft/module/internship/controller/InternshipPlanManageParticipantController.java
  3. 0 2
      src/main/java/com/xjrsoft/module/internship/controller/InternshipPlanTeacherController.java
  4. 132 0
      src/main/java/com/xjrsoft/module/internship/controller/StudentInternshipRecordController.java
  5. 5 44
      src/main/java/com/xjrsoft/module/internship/dto/AddInternshipPlanManageParticipantDto.java
  6. 39 0
      src/main/java/com/xjrsoft/module/internship/dto/AddStudentInternshipAloneApplyDto.java
  7. 58 0
      src/main/java/com/xjrsoft/module/internship/dto/AddStudentInternshipRecordDto.java
  8. 34 0
      src/main/java/com/xjrsoft/module/internship/dto/EvaluateInternshipPlanManageParticipantDto.java
  9. 8 0
      src/main/java/com/xjrsoft/module/internship/dto/InternshipPlanManagePageDto.java
  10. 14 0
      src/main/java/com/xjrsoft/module/internship/dto/InternshipPlanManageParticipantPageDto.java
  11. 25 0
      src/main/java/com/xjrsoft/module/internship/dto/StudentInternshipRecordPageDto.java
  12. 24 0
      src/main/java/com/xjrsoft/module/internship/dto/UpdateStudentInternshipRecordDto.java
  13. 110 0
      src/main/java/com/xjrsoft/module/internship/entity/StudentInternshipAloneApply.java
  14. 109 0
      src/main/java/com/xjrsoft/module/internship/entity/StudentInternshipRecord.java
  15. 17 0
      src/main/java/com/xjrsoft/module/internship/mapper/StudentInternshipAloneApplyMapper.java
  16. 16 0
      src/main/java/com/xjrsoft/module/internship/mapper/StudentInternshipRecordMapper.java
  17. 16 0
      src/main/java/com/xjrsoft/module/internship/service/IInternshipPlanManageParticipantService.java
  18. 3 0
      src/main/java/com/xjrsoft/module/internship/service/IInternshipPlanManageService.java
  19. 17 0
      src/main/java/com/xjrsoft/module/internship/service/IStudentInternshipRecordService.java
  20. 208 0
      src/main/java/com/xjrsoft/module/internship/service/impl/InternshipPlanManageParticipantServiceImpl.java
  21. 46 2
      src/main/java/com/xjrsoft/module/internship/service/impl/InternshipPlanManageServiceImpl.java
  22. 47 0
      src/main/java/com/xjrsoft/module/internship/service/impl/StudentInternshipRecordServiceImpl.java
  23. 6 0
      src/main/java/com/xjrsoft/module/internship/vo/InternshipPlanManagePageVo.java
  24. 93 85
      src/main/java/com/xjrsoft/module/internship/vo/InternshipPlanManageParticipantPageVo.java
  25. 3 0
      src/main/java/com/xjrsoft/module/internship/vo/InternshipPlanManageVo.java
  26. 88 0
      src/main/java/com/xjrsoft/module/internship/vo/StudentInternshipRecordPageVo.java
  27. 63 0
      src/main/java/com/xjrsoft/module/internship/vo/StudentInternshipRecordVo.java
  28. 85 0
      src/main/java/com/xjrsoft/module/job/InternshipTask.java
  29. 56 0
      src/main/java/com/xjrsoft/module/oa/service/impl/OfficialDocumentReceivedServiceImpl.java
  30. 20 0
      src/main/java/com/xjrsoft/module/student/dto/BaseStudentInfoPageDto.java
  31. 3 0
      src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java
  32. 1 1
      src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentSchoolRollServiceImpl.java
  33. 9 0
      src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserPageVo.java
  34. 6 0
      src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java
  35. 5 0
      src/main/java/com/xjrsoft/module/xycxedu/service/impl/ExamSubjectScoreEnterServiceImpl.java
  36. 18 1
      src/main/resources/mapper/internship/InternshipPlanManageMapper.xml
  37. 8 1
      src/main/resources/mapper/student/BaseStudentMapper.xml
  38. 25 0
      src/main/resources/mapper/student/BaseStudentSchoolRollMapper.xml
  39. 29 1
      src/main/resources/sqlScript/20250623sql.sql
  40. 25 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 30 - 5
src/main/java/com/xjrsoft/module/internship/controller/InternshipPlanManageController.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.internship.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xjrsoft.common.annotation.XjrLog;
@@ -56,16 +57,40 @@ public class InternshipPlanManageController {
         return RT.ok(pageOutput);
     }
 
+    @GetMapping(value = "/teacher-page")
+    @ApiOperation(value="实习计划管理表教师列表(分页)")
+    @SaCheckPermission("internshipplanmanage:detail")
+    @XjrLog(value = "实习计划管理表教师列表(分页)")
+    public RT<PageOutput<InternshipPlanManagePageVo>> teacherPage(@Valid InternshipPlanManagePageDto dto){
+        if(dto.getTeacherId() == null){
+            dto.setTeacherId(StpUtil.getLoginIdAsLong());
+        }
+        Page<InternshipPlanManagePageVo> page = internshipPlanManageService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<InternshipPlanManagePageVo> pageOutput = ConventPage.getPageOutput(page, InternshipPlanManagePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/student-page")
+    @ApiOperation(value="实习计划管理表学生列表(分页)")
+    @SaCheckPermission("internshipplanmanage:detail")
+    @XjrLog(value = "实习计划管理表学生列表(分页)")
+    public RT<PageOutput<InternshipPlanManagePageVo>> studentPage(@Valid InternshipPlanManagePageDto dto){
+        if(dto.getStudentUserId() == null){
+            dto.setStudentUserId(StpUtil.getLoginIdAsLong());
+        }
+        Page<InternshipPlanManagePageVo> page = internshipPlanManageService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        PageOutput<InternshipPlanManagePageVo> pageOutput = ConventPage.getPageOutput(page, InternshipPlanManagePageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+
     @GetMapping(value = "/info")
     @ApiOperation(value="根据id查询实习计划管理表信息")
     @SaCheckPermission("internshipplanmanage:detail")
     @XjrLog(value = "根据id查询实习计划管理表信息")
     public RT<InternshipPlanManageVo> info(@RequestParam Long id){
-        InternshipPlanManage internshipPlanManage = internshipPlanManageService.getByIdDeep(id);
-        if (internshipPlanManage == null) {
-           return RT.error("找不到此数据!");
-        }
-        return RT.ok(BeanUtil.toBean(internshipPlanManage, InternshipPlanManageVo.class));
+        InternshipPlanManageVo internshipPlanManage = internshipPlanManageService.getInfoById(id);
+        return RT.ok(internshipPlanManage);
     }
 
 

+ 42 - 25
src/main/java/com/xjrsoft/module/internship/controller/InternshipPlanManageParticipantController.java

@@ -2,15 +2,13 @@ package com.xjrsoft.module.internship.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.model.result.RT;
-import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
-import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.internship.dto.AddInternshipPlanManageParticipantDto;
+import com.xjrsoft.module.internship.dto.EvaluateInternshipPlanManageParticipantDto;
 import com.xjrsoft.module.internship.dto.InternshipPlanManageParticipantPageDto;
 import com.xjrsoft.module.internship.dto.UpdateInternshipPlanManageParticipantDto;
 import com.xjrsoft.module.internship.entity.InternshipPlanManageParticipant;
@@ -48,32 +46,29 @@ public class InternshipPlanManageParticipantController {
     private final IInternshipPlanManageParticipantService internshipPlanManageParticipantService;
 
     @GetMapping(value = "/page")
-    @ApiOperation(value="实习计划参与人表列表(分页)")
+    @ApiOperation(value="所有参与人(分页)")
     @SaCheckPermission("internshipplanmanageparticipant:detail")
-    @XjrLog(value = "实习计划参与人表列表(分页)")
+    @XjrLog(value = "所有参与人(分页)")
     public RT<PageOutput<InternshipPlanManageParticipantPageVo>> page(@Valid InternshipPlanManageParticipantPageDto dto){
+        PageOutput<InternshipPlanManageParticipantPageVo> pageOutput = internshipPlanManageParticipantService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
+        return RT.ok(pageOutput);
+    }
 
-        MPJLambdaWrapper<InternshipPlanManageParticipant> queryWrapper = new MPJLambdaWrapper<>();
-        queryWrapper
-                    .orderByDesc(InternshipPlanManageParticipant::getId)
-                .select(InternshipPlanManageParticipant.class,x -> VoToColumnUtil.fieldsToColumns(InternshipPlanManageParticipantPageVo.class).contains(x.getProperty()));
-        IPage<InternshipPlanManageParticipant> page = internshipPlanManageParticipantService.page(ConventPage.getPage(dto), queryWrapper);
-        PageOutput<InternshipPlanManageParticipantPageVo> pageOutput = ConventPage.getPageOutput(page, InternshipPlanManageParticipantPageVo.class);
+    @GetMapping(value = "/team-student-page")
+    @ApiOperation(value="实习计划参与人表列表(分页)")
+    @SaCheckPermission("internshipplanmanageparticipant:detail")
+    @XjrLog(value = "实习计划参与人表列表(分页)")
+    public RT<PageOutput<InternshipPlanManageParticipantPageVo>> teamStudentPage(@Valid InternshipPlanManageParticipantPageDto dto){
+        PageOutput<InternshipPlanManageParticipantPageVo> pageOutput = internshipPlanManageParticipantService.getTeamStudentPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         return RT.ok(pageOutput);
     }
 
-    @GetMapping(value = "/student-page")
+    @GetMapping(value = "/choose-student-page")
     @ApiOperation(value="实习学生选择列表(分页)")
     @SaCheckPermission("internshipplanmanageparticipant:detail")
     @XjrLog(value = "实习学生选择列表(分页)")
     public RT<PageOutput<InternshipPlanManageParticipantPageVo>> studentPage(@Valid InternshipPlanManageParticipantPageDto dto){
-
-        MPJLambdaWrapper<InternshipPlanManageParticipant> queryWrapper = new MPJLambdaWrapper<>();
-        queryWrapper
-                .orderByDesc(InternshipPlanManageParticipant::getId)
-                .select(InternshipPlanManageParticipant.class,x -> VoToColumnUtil.fieldsToColumns(InternshipPlanManageParticipantPageVo.class).contains(x.getProperty()));
-        IPage<InternshipPlanManageParticipant> page = internshipPlanManageParticipantService.page(ConventPage.getPage(dto), queryWrapper);
-        PageOutput<InternshipPlanManageParticipantPageVo> pageOutput = ConventPage.getPageOutput(page, InternshipPlanManageParticipantPageVo.class);
+        PageOutput<InternshipPlanManageParticipantPageVo> pageOutput = internshipPlanManageParticipantService.getChooseStudentPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
         return RT.ok(pageOutput);
     }
 
@@ -95,9 +90,32 @@ public class InternshipPlanManageParticipantController {
     @SaCheckPermission("internshipplanmanageparticipant:add")
     @XjrLog(value = "新增实习计划参与人表")
     public RT<Boolean> add(@Valid @RequestBody AddInternshipPlanManageParticipantDto dto){
-        InternshipPlanManageParticipant internshipPlanManageParticipant = BeanUtil.toBean(dto, InternshipPlanManageParticipant.class);
-        boolean isSuccess = internshipPlanManageParticipantService.save(internshipPlanManageParticipant);
-    return RT.ok(isSuccess);
+        boolean isSuccess = internshipPlanManageParticipantService.add(dto);
+        return RT.ok(isSuccess);
+    }
+
+    @PostMapping(value = "/remove")
+    @ApiOperation(value = "移除实习参与学生")
+    @SaCheckPermission("internshipplanmanageparticipant:remove")
+    @XjrLog(value = "移除实习参与学生")
+    public RT<Boolean> remove(@Valid @RequestBody AddInternshipPlanManageParticipantDto dto){
+        boolean isSuccess = internshipPlanManageParticipantService.removeStudent(dto);
+        return RT.ok(isSuccess);
+    }
+
+    @PostMapping(value = "/evaluate")
+    @ApiOperation(value = "评价学生实习")
+    @SaCheckPermission("internshipplanmanageparticipant:evaluate")
+    @XjrLog(value = "评价学生实习")
+    public RT<Boolean> evaluate(@Valid @RequestBody EvaluateInternshipPlanManageParticipantDto dto){
+        InternshipPlanManageParticipant participant = internshipPlanManageParticipantService.getOne(
+                new QueryWrapper<InternshipPlanManageParticipant>().lambda()
+                        .eq(InternshipPlanManageParticipant::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+                        .eq(InternshipPlanManageParticipant::getParticipantUserId, dto.getId())
+        );
+        participant.setResult(dto.getResult());
+        internshipPlanManageParticipantService.updateById(participant);
+        return RT.ok(true);
     }
 
     @PutMapping
@@ -117,7 +135,6 @@ public class InternshipPlanManageParticipantController {
     @XjrLog(value = "删除实习计划参与人表")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
         return RT.ok(internshipPlanManageParticipantService.removeBatchByIds(ids));
-
     }
 
 }

+ 0 - 2
src/main/java/com/xjrsoft/module/internship/controller/InternshipPlanTeacherController.java

@@ -1,7 +1,6 @@
 package com.xjrsoft.module.internship.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
-import cn.hutool.core.bean.BeanUtil;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.xjrsoft.common.annotation.XjrLog;
 import com.xjrsoft.common.model.result.RT;
@@ -10,7 +9,6 @@ import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.module.internship.dto.AddInternshipPlanTeacherDto;
 import com.xjrsoft.module.internship.dto.InternshipPlanTeacherPageDto;
 import com.xjrsoft.module.internship.dto.UpdateInternshipPlanTeacherDto;
-import com.xjrsoft.module.internship.entity.InternshipPlanTeacher;
 import com.xjrsoft.module.internship.service.IInternshipPlanTeacherService;
 import com.xjrsoft.module.internship.vo.InternshipPlanTeacherPageVo;
 import com.xjrsoft.module.internship.vo.InternshipPlanTeacherVo;

+ 132 - 0
src/main/java/com/xjrsoft/module/internship/controller/StudentInternshipRecordController.java

@@ -0,0 +1,132 @@
+package com.xjrsoft.module.internship.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.xjrsoft.common.annotation.XjrLog;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.internship.dto.AddStudentInternshipAloneApplyDto;
+import com.xjrsoft.module.internship.dto.AddStudentInternshipRecordDto;
+import com.xjrsoft.module.internship.dto.StudentInternshipRecordPageDto;
+import com.xjrsoft.module.internship.dto.UpdateStudentInternshipRecordDto;
+import com.xjrsoft.module.internship.entity.StudentInternshipRecord;
+import com.xjrsoft.module.internship.service.IStudentInternshipRecordService;
+import com.xjrsoft.module.internship.vo.StudentInternshipRecordPageVo;
+import com.xjrsoft.module.internship.vo.StudentInternshipRecordVo;
+import com.xjrsoft.module.system.entity.File;
+import com.xjrsoft.module.system.service.IFileService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/internship" + "/studentInternshipRecord")
+@Api(value = "/internship"  + "/studentInternshipRecord",tags = "学生实习记录表代码")
+@AllArgsConstructor
+public class StudentInternshipRecordController {
+
+
+    private final IStudentInternshipRecordService studentInternshipRecordService;
+    private final IFileService fileService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="学生实习记录表列表(分页)")
+    @SaCheckPermission("studentinternshiprecord:detail")
+    @XjrLog(value = "学生实习记录表列表(分页)")
+    public RT<PageOutput<StudentInternshipRecordPageVo>> page(@Valid StudentInternshipRecordPageDto dto){
+
+        LambdaQueryWrapper<StudentInternshipRecord> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                .select(StudentInternshipRecord.class,x -> VoToColumnUtil.fieldsToColumns(StudentInternshipRecordPageVo.class).contains(x.getProperty()))
+                .eq(StudentInternshipRecord::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+                .eq(StudentInternshipRecord::getStudentUserId, dto.getStudentUserId())
+                .orderByDesc(StudentInternshipRecord::getId);
+
+        IPage<StudentInternshipRecord> page = studentInternshipRecordService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<StudentInternshipRecordPageVo> pageOutput = ConventPage.getPageOutput(page, StudentInternshipRecordPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询学生实习记录表信息")
+    @SaCheckPermission("studentinternshiprecord:detail")
+    @XjrLog(value = "根据id查询学生实习记录表信息")
+    public RT<StudentInternshipRecordVo> info(@RequestParam Long id){
+        StudentInternshipRecord studentInternshipRecord = studentInternshipRecordService.getById(id);
+        if (studentInternshipRecord == null) {
+           return RT.error("找不到此数据!");
+        }
+        File file = fileService.getOne(
+                new QueryWrapper<File>().lambda()
+                        .eq(File::getFolderId, studentInternshipRecord.getFolderId())
+        );
+        StudentInternshipRecordVo recordVo = BeanUtil.toBean(studentInternshipRecord, StudentInternshipRecordVo.class);
+        if(file != null){
+            recordVo.setFileUrl(file.getFileUrl());
+        }
+        return RT.ok(recordVo);
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增学生实习记录表")
+    @SaCheckPermission("studentinternshiprecord:add")
+    @XjrLog(value = "新增学生实习记录表")
+    public RT<Boolean> add(@Valid @RequestBody AddStudentInternshipRecordDto dto){
+        StudentInternshipRecord studentInternshipRecord = BeanUtil.toBean(dto, StudentInternshipRecord.class);
+        boolean isSuccess = studentInternshipRecordService.save(studentInternshipRecord);
+        return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改学生实习记录表")
+    @SaCheckPermission("studentinternshiprecord:edit")
+    @XjrLog(value = "修改学生实习记录表")
+    public RT<Boolean> update(@Valid @RequestBody UpdateStudentInternshipRecordDto dto){
+
+        StudentInternshipRecord studentInternshipRecord = BeanUtil.toBean(dto, StudentInternshipRecord.class);
+        return RT.ok(studentInternshipRecordService.updateById(studentInternshipRecord));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除学生实习记录表")
+    @SaCheckPermission("studentinternshiprecord:delete")
+    @XjrLog(value = "删除学生实习记录表")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(studentInternshipRecordService.removeBatchByIds(ids));
+
+    }
+
+    @PostMapping(value = "alone-material-submit")
+    @ApiOperation(value = "自主实习材料提交")
+    @SaCheckPermission("studentinternshiprecord:add")
+    @XjrLog(value = "自主实习材料提交")
+    public RT<Boolean> aloneMaterialSubmit(@Valid @RequestBody AddStudentInternshipAloneApplyDto dto){
+        boolean isSuccess = studentInternshipRecordService.aloneMaterialSubmit(dto);
+        return RT.ok(isSuccess);
+    }
+
+}

+ 5 - 44
src/main/java/com/xjrsoft/module/internship/dto/AddInternshipPlanManageParticipantDto.java

@@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
-
+import java.util.List;
 
 
 /**
@@ -28,50 +28,11 @@ public class AddInternshipPlanManageParticipantDto implements Serializable {
     */
     @ApiModelProperty("实习计划id")
     private Long internshipPlanManageId;
-    /**
-    * 实习参与人id
-    */
-    @ApiModelProperty("实习参与人id")
-    private Long participantUserId;
-    /**
-    * 实习参与人学号
-    */
-    @ApiModelProperty("实习参与人学号")
-    private String participantUserStudentId;
-    /**
-    * 实习参与人姓名
-    */
-    @ApiModelProperty("实习参与人姓名")
-    private String participantUserName;
-    /**
-    * 所属专业id(base_major)
-    */
-    @ApiModelProperty("所属专业id(base_major)")
-    private Long baseMajorId;
-    /**
-    * 所属专业名称
-    */
-    @ApiModelProperty("所属专业名称")
-    private String baseMajorName;
-    /**
-    * 班级id(base_class)
-    */
+
     @ApiModelProperty("班级id(base_class)")
     private Long classId;
-    /**
-    * 班级名称
-    */
-    @ApiModelProperty("班级名称")
-    private String className;
-    /**
-    * 带队老师(xjr_user)
-    */
-    @ApiModelProperty("带队老师(xjr_user)")
-    private Long teacherId;
-    /**
-    * 实习结果评价
-    */
-    @ApiModelProperty("实习结果评价")
-    private String result;
+
+    @ApiModelProperty("学生ids")
+    private List<Long> studentUserIds;
 
 }

+ 39 - 0
src/main/java/com/xjrsoft/module/internship/dto/AddStudentInternshipAloneApplyDto.java

@@ -0,0 +1,39 @@
+package com.xjrsoft.module.internship.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+* @title: 自主实习材料提交
+* @Author dzx
+* @Date: 2025-06-26
+* @Version 1.0
+*/
+@Data
+public class AddStudentInternshipAloneApplyDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("登记学生(xjr_user)")
+    private Long studentUserId;
+
+    @ApiModelProperty("实习报告内容")
+    private String reportContent;
+
+    @ApiModelProperty("合同附件(xjr_file)")
+    private Long contractFolderId;
+
+    @ApiModelProperty("工资流水附件(xjr_file)")
+    private Long wagesFolderId;
+
+    @ApiModelProperty("总结材料附件(xjr_file)")
+    private Long summarizeFolderId;
+
+    @ApiModelProperty("所属实习计划id(internship_plan_manage)")
+    private Long internshipPlanManageId;
+
+}

+ 58 - 0
src/main/java/com/xjrsoft/module/internship/dto/AddStudentInternshipRecordDto.java

@@ -0,0 +1,58 @@
+package com.xjrsoft.module.internship.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Data
+public class AddStudentInternshipRecordDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 登记学生(xjr_user)
+    */
+    @ApiModelProperty("登记学生(xjr_user)")
+    private Long studentUserId;
+    /**
+    * 实习时间
+    */
+    @ApiModelProperty("实习时间")
+    private LocalDateTime recordTime;
+    /**
+    * 实行类型(0:实习综合报告 1:周报 2:月报)
+    */
+    @ApiModelProperty("实行类型(0:实习综合报告 1:周报 2:月报)")
+    private Integer recordReportType;
+    /**
+    * 所属实习计划id(internship_plan_manage)
+    */
+    @ApiModelProperty("所属实习计划id(internship_plan_manage)")
+    private Long internshipPlanManageId;
+    /**
+    * 是否自主实习(1:是 0:否)
+    */
+    @ApiModelProperty("是否自主实习(1:是 0:否)")
+    private Integer isInternshipAlone;
+    /**
+    * 实习报告内容
+    */
+    @ApiModelProperty("实习报告内容")
+    private String recordContent;
+    /**
+    * 附件(xjr_file)
+    */
+    @ApiModelProperty("附件(xjr_file)")
+    private Long folderId;
+
+}

+ 34 - 0
src/main/java/com/xjrsoft/module/internship/dto/EvaluateInternshipPlanManageParticipantDto.java

@@ -0,0 +1,34 @@
+package com.xjrsoft.module.internship.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+* @title: 实习计划参与人表
+* @Author dzx
+* @Date: 2025-06-26
+* @Version 1.0
+*/
+@Data
+public class EvaluateInternshipPlanManageParticipantDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+    * 实习计划id
+    */
+    @ApiModelProperty("实习计划id")
+    private Long id;
+
+    @ApiModelProperty("实习结果评价")
+    private String result;
+
+    @ApiModelProperty("实习评价id")
+    private Long internshipPlanManageId;
+
+}

+ 8 - 0
src/main/java/com/xjrsoft/module/internship/dto/InternshipPlanManagePageDto.java

@@ -52,4 +52,12 @@ public class InternshipPlanManagePageDto extends PageInput {
 
     @ApiModelProperty("学期主键id(base_semester)")
     private Long baseSemesterId;
+
+
+    @ApiModelProperty("教师id")
+    private Long teacherId;
+
+
+    @ApiModelProperty("学生userId")
+    private Long studentUserId;
 }

+ 14 - 0
src/main/java/com/xjrsoft/module/internship/dto/InternshipPlanManageParticipantPageDto.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.internship.dto;
 
 import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -15,5 +16,18 @@ import lombok.EqualsAndHashCode;
 @EqualsAndHashCode(callSuper = false)
 public class InternshipPlanManageParticipantPageDto extends PageInput {
 
+    @ApiModelProperty("实习计划id")
+    private Long internshipPlanManageId;
 
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ApiModelProperty("班级名称")
+    private String className;
+
+    @ApiModelProperty("身份证号")
+    private String credentialNumber;
 }

+ 25 - 0
src/main/java/com/xjrsoft/module/internship/dto/StudentInternshipRecordPageDto.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.internship.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+* @title: 学生实习记录表分页查询入参
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class StudentInternshipRecordPageDto extends PageInput {
+
+
+    @ApiModelProperty("学生userId")
+    private Long studentUserId;
+
+    @ApiModelProperty("实习计划id")
+    private Long internshipPlanManageId;
+}

+ 24 - 0
src/main/java/com/xjrsoft/module/internship/dto/UpdateStudentInternshipRecordDto.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.internship.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Data
+public class UpdateStudentInternshipRecordDto extends AddStudentInternshipRecordDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+}

+ 110 - 0
src/main/java/com/xjrsoft/module/internship/entity/StudentInternshipAloneApply.java

@@ -0,0 +1,110 @@
+package com.xjrsoft.module.internship.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Data
+@TableName("student_internship_alone_apply")
+@ApiModel(value = "student_internship_alone_apply", description = "学生自主实习申请表")
+public class StudentInternshipAloneApply implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    @TableId
+    private Long id;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createDate;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+
+    @ApiModelProperty("缘由")
+    private String reason;
+
+    @ApiModelProperty("登记学生(xjr_user)")
+    private Long studentUserId;
+    /**
+    * 实习时间
+    */
+    @ApiModelProperty("所属班级(base_class)")
+    private Long classId;
+
+
+    /**
+    * 所属实习计划id(internship_plan_manage)
+    */
+    @ApiModelProperty("所属实习计划id(internship_plan_manage)")
+    private Long internshipPlanManageId;
+
+    /**
+    * 附件(xjr_file)
+    */
+    @ApiModelProperty("申请附件(xjr_file)")
+    private Long folderId;
+
+
+    @ApiModelProperty("实习报告内容")
+    private String reportContent;
+
+    @ApiModelProperty("合同附件(xjr_file)")
+    private Long contractFolderId;
+
+    @ApiModelProperty("工资流水附件(xjr_file)")
+    private Long wagesFolderId;
+
+    @ApiModelProperty("总结材料附件(xjr_file)")
+    private Long summarizeFolderId;
+
+}

+ 109 - 0
src/main/java/com/xjrsoft/module/internship/entity/StudentInternshipRecord.java

@@ -0,0 +1,109 @@
+package com.xjrsoft.module.internship.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Data
+@TableName("student_internship_record")
+@ApiModel(value = "student_internship_record", description = "学生实习记录表")
+public class StudentInternshipRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    @TableId
+    private Long id;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createDate;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 登记学生(xjr_user)
+    */
+    @ApiModelProperty("登记学生(xjr_user)")
+    private Long studentUserId;
+    /**
+    * 实习时间
+    */
+    @ApiModelProperty("实习时间")
+    private LocalDateTime recordTime;
+    /**
+    * 实行类型(0:实习综合报告 1:周报 2:月报)
+    */
+    @ApiModelProperty("实行类型(0:实习综合报告 1:周报 2:月报)")
+    private Integer recordReportType;
+    /**
+    * 所属实习计划id(internship_plan_manage)
+    */
+    @ApiModelProperty("所属实习计划id(internship_plan_manage)")
+    private Long internshipPlanManageId;
+    /**
+    * 是否自主实习(1:是 0:否)
+    */
+    @ApiModelProperty("是否自主实习(1:是 0:否)")
+    private Integer isInternshipAlone;
+    /**
+    * 实习报告内容
+    */
+    @ApiModelProperty("实习报告内容")
+    private String recordContent;
+    /**
+    * 附件(xjr_file)
+    */
+    @ApiModelProperty("附件(xjr_file)")
+    private Long folderId;
+
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/internship/mapper/StudentInternshipAloneApplyMapper.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.internship.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.internship.entity.StudentInternshipAloneApply;
+import com.xjrsoft.module.internship.entity.StudentInternshipRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Mapper
+public interface StudentInternshipAloneApplyMapper extends MPJBaseMapper<StudentInternshipAloneApply> {
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/internship/mapper/StudentInternshipRecordMapper.java

@@ -0,0 +1,16 @@
+package com.xjrsoft.module.internship.mapper;
+
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.internship.entity.StudentInternshipRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Mapper
+public interface StudentInternshipRecordMapper extends MPJBaseMapper<StudentInternshipRecord> {
+
+}

+ 16 - 0
src/main/java/com/xjrsoft/module/internship/service/IInternshipPlanManageParticipantService.java

@@ -1,7 +1,13 @@
 package com.xjrsoft.module.internship.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.module.internship.dto.AddInternshipPlanManageParticipantDto;
+import com.xjrsoft.module.internship.dto.InternshipPlanManageParticipantPageDto;
 import com.xjrsoft.module.internship.entity.InternshipPlanManageParticipant;
+import com.xjrsoft.module.internship.vo.InternshipPlanManageParticipantPageVo;
+import com.xjrsoft.module.student.vo.BaseStudentInfoPageVo;
 
 /**
 * @title: 实习计划参与人表
@@ -11,4 +17,14 @@ import com.xjrsoft.module.internship.entity.InternshipPlanManageParticipant;
 */
 
 public interface IInternshipPlanManageParticipantService extends MPJBaseService<InternshipPlanManageParticipant> {
+
+    Boolean add(AddInternshipPlanManageParticipantDto dto);
+
+    Boolean removeStudent(AddInternshipPlanManageParticipantDto dto);
+
+    PageOutput<InternshipPlanManageParticipantPageVo> getChooseStudentPage(Page<BaseStudentInfoPageVo> page, InternshipPlanManageParticipantPageDto dto);
+
+    PageOutput<InternshipPlanManageParticipantPageVo> getTeamStudentPage(Page<BaseStudentInfoPageVo> page, InternshipPlanManageParticipantPageDto dto);
+
+    PageOutput<InternshipPlanManageParticipantPageVo> getPage(Page<BaseStudentInfoPageVo> page, InternshipPlanManageParticipantPageDto dto);
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/internship/service/IInternshipPlanManageService.java

@@ -6,6 +6,7 @@ import com.xjrsoft.module.internship.dto.AddInternshipPlanManageDto;
 import com.xjrsoft.module.internship.dto.InternshipPlanManagePageDto;
 import com.xjrsoft.module.internship.entity.InternshipPlanManage;
 import com.xjrsoft.module.internship.vo.InternshipPlanManagePageVo;
+import com.xjrsoft.module.internship.vo.InternshipPlanManageVo;
 
 import java.util.List;
 
@@ -45,4 +46,6 @@ public interface IInternshipPlanManageService extends MPJBaseService<InternshipP
 
     Page<InternshipPlanManagePageVo> getPage(Page<InternshipPlanManagePageVo> page, InternshipPlanManagePageDto dto);
 
+    InternshipPlanManageVo getInfoById(Long id);
+
 }

+ 17 - 0
src/main/java/com/xjrsoft/module/internship/service/IStudentInternshipRecordService.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.internship.service;
+
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.internship.dto.AddStudentInternshipAloneApplyDto;
+import com.xjrsoft.module.internship.entity.StudentInternshipRecord;
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+
+public interface IStudentInternshipRecordService extends MPJBaseService<StudentInternshipRecord> {
+
+    Boolean aloneMaterialSubmit(AddStudentInternshipAloneApplyDto dto);
+}

+ 208 - 0
src/main/java/com/xjrsoft/module/internship/service/impl/InternshipPlanManageParticipantServiceImpl.java

@@ -1,11 +1,43 @@
 package com.xjrsoft.module.internship.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.module.base.entity.BaseClass;
+import com.xjrsoft.module.base.mapper.BaseClassMapper;
+import com.xjrsoft.module.internship.dto.AddInternshipPlanManageParticipantDto;
+import com.xjrsoft.module.internship.dto.InternshipPlanManageParticipantPageDto;
+import com.xjrsoft.module.internship.entity.InternshipPlanClass;
+import com.xjrsoft.module.internship.entity.InternshipPlanManage;
 import com.xjrsoft.module.internship.entity.InternshipPlanManageParticipant;
+import com.xjrsoft.module.internship.entity.InternshipPlanTeacher;
+import com.xjrsoft.module.internship.mapper.InternshipPlanClassMapper;
+import com.xjrsoft.module.internship.mapper.InternshipPlanManageMapper;
 import com.xjrsoft.module.internship.mapper.InternshipPlanManageParticipantMapper;
+import com.xjrsoft.module.internship.mapper.InternshipPlanTeacherMapper;
 import com.xjrsoft.module.internship.service.IInternshipPlanManageParticipantService;
+import com.xjrsoft.module.internship.vo.InternshipPlanManageParticipantPageVo;
+import com.xjrsoft.module.student.dto.BaseStudentInfoPageDto;
+import com.xjrsoft.module.student.dto.BaseStudentUserPageDto;
+import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
+import com.xjrsoft.module.student.service.IBaseStudentService;
+import com.xjrsoft.module.student.vo.BaseStudentInfoPageVo;
+import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
 * @title: 实习计划参与人表
@@ -16,4 +48,180 @@ import org.springframework.stereotype.Service;
 @Service
 @AllArgsConstructor
 public class InternshipPlanManageParticipantServiceImpl extends MPJBaseServiceImpl<InternshipPlanManageParticipantMapper, InternshipPlanManageParticipant> implements IInternshipPlanManageParticipantService {
+    private final InternshipPlanManageMapper internshipPlanManageMapper;
+    private final InternshipPlanClassMapper internshipPlanClassMapper;
+    private final InternshipPlanTeacherMapper internshipPlanTeacherMapper;
+    private final IBaseStudentService baseStudentService;
+    private final BaseStudentSchoolRollMapper baseStudentSchoolRollMapper;
+    private final BaseClassMapper baseClassMapper;
+    @Override
+    @Transactional
+    public Boolean add(AddInternshipPlanManageParticipantDto dto) {
+        InternshipPlanManage planManage = internshipPlanManageMapper.selectById(dto.getInternshipPlanManageId());
+
+        List<InternshipPlanManageParticipant> insertList = new ArrayList<>();
+
+        List<BaseStudentUserPageVo> studentList = baseStudentService.getStudentList(new BaseStudentUserPageDto() {{
+            setUserIds(dto.getStudentUserIds());
+        }});
+        List<Long> classIds = studentList.stream().map(BaseStudentUserPageVo::getClassId).collect(Collectors.toList());
+
+        List<InternshipPlanClass> planClassList = internshipPlanClassMapper.selectList(
+                new QueryWrapper<InternshipPlanClass>().lambda()
+                        .eq(InternshipPlanClass::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+                        .in(InternshipPlanClass::getClassId, classIds)
+        );
+
+        Map<Long, Long> classTeacherIdMaps = planClassList.stream().collect(Collectors.toMap(InternshipPlanClass::getClassId, InternshipPlanClass::getInternshipPlanTeacherId));
+        List<Long> internshipPlanTeacherIds = planClassList.stream().map(InternshipPlanClass::getInternshipPlanTeacherId).collect(Collectors.toList());
+        List<InternshipPlanTeacher> internshipPlanTeachers = internshipPlanTeacherMapper.selectBatchIds(internshipPlanTeacherIds);
+        Map<Long, Long> teacherMap = internshipPlanTeachers.stream().collect(Collectors.toMap(InternshipPlanTeacher::getId, InternshipPlanTeacher::getUserId));
+        for (BaseStudentUserPageVo student : studentList) {
+            insertList.add(new InternshipPlanManageParticipant(){{
+                setClassId(student.getClassId());
+                setParticipantUserId(Long.parseLong(student.getId()));
+                setInternshipPlanManageId(planManage.getId());
+                setTeacherId(teacherMap.get(classTeacherIdMaps.get(student.getClassId())));
+                setParticipantUserStudentId(student.getStudentId());
+                setParticipantUserName(student.getName());
+                setBaseMajorName(student.getMajorSetName());
+                setBaseMajorId(student.getMajorSetId());
+                setClassName(student.getClassName());
+            }});
+        }
+        if(!insertList.isEmpty()){
+            this.saveBatch(insertList);
+        }
+        return true;
+    }
+
+    @Override
+    @Transactional
+    public Boolean removeStudent(AddInternshipPlanManageParticipantDto dto) {
+        this.baseMapper.delete(
+                new QueryWrapper<InternshipPlanManageParticipant>().lambda()
+                        .eq(InternshipPlanManageParticipant::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+                        .in(InternshipPlanManageParticipant::getParticipantUserId, dto.getStudentUserIds())
+        );
+        return true;
+    }
+
+    @Override
+    public PageOutput<InternshipPlanManageParticipantPageVo> getChooseStudentPage(Page<BaseStudentInfoPageVo> page, InternshipPlanManageParticipantPageDto dto) {
+        //查询自主实习和特异体质的学生
+        String sql = "SELECT t1.* FROM student_internship_alone_apply t1" +
+                " INNER JOIN xjr_workflow_form_relation t2 ON t1.id = CAST(t2.form_key_value AS SIGNED)" +
+                " WHERE t1.delete_mark = 0 AND t1.enabled_mark = 1 AND t2.current_state = 'COMPLETED'";
+        List<Map<String, Object>> internshipAloneApplyList = SqlRunnerAdapter.db().selectList(sql);
+        List<Long> notInIds = new ArrayList<>();
+        for (Map<String, Object> objectMap : internshipAloneApplyList) {
+            notInIds.add(Long.parseLong(objectMap.get("id").toString()));
+        }
+
+        sql = "SELECT t1.* FROM student_special_constitution t1" +
+                " INNER JOIN xjr_workflow_form_relation t2 ON t1.id = CAST(t2.form_key_value AS SIGNED)" +
+                " WHERE t1.delete_mark = 0 AND t1.enabled_mark = 1 AND t2.current_state = 'COMPLETED'";
+        List<Map<String, Object>> specialConstitutionList = SqlRunnerAdapter.db().selectList(sql);
+        for (Map<String, Object> objectMap : specialConstitutionList) {
+            notInIds.add(Long.parseLong(objectMap.get("id").toString()));
+        }
+
+        BaseStudentInfoPageDto studentInfoPageDto = BeanUtil.toBean(dto, BaseStudentInfoPageDto.class);
+        studentInfoPageDto.setNotInIds(notInIds);
+
+        List<String> roleList = StpUtil.getRoleList();
+
+        long teacherId = StpUtil.getLoginIdAsLong();
+        List<BaseClass> classList = baseClassMapper.selectList(
+                new MPJLambdaWrapper<BaseClass>()
+                        .select(BaseClass::getId)
+                        .innerJoin(InternshipPlanClass.class, InternshipPlanClass::getClassId, BaseClass::getId)
+                        .eq(BaseClass::getTeacherId, teacherId)
+                        .eq(InternshipPlanClass::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+                        .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        if(classList.isEmpty()){
+            return new PageOutput<>();
+        }
+        if (roleList.size() == 2 && roleList.contains("CLASSTE")) {
+            studentInfoPageDto.setTeacherId(teacherId);
+        } else {
+            if (studentInfoPageDto.getClassId() == null) {
+                studentInfoPageDto.setClassId(classList.get(0).getId());
+            }
+        }
+        studentInfoPageDto.setKeyWord(dto.getKeyword());
+        Page<BaseStudentInfoPageVo> mobilePage = baseStudentSchoolRollMapper.getMobilePage(page, studentInfoPageDto);
+
+        List<InternshipPlanManageParticipant> participantList = this.list(
+                new QueryWrapper<InternshipPlanManageParticipant>().lambda()
+                        .eq(InternshipPlanManageParticipant::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+                        .eq(InternshipPlanManageParticipant::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        Map<Long, String> collect = participantList.stream().filter(x -> x.getResult() != null).collect(Collectors.toMap(InternshipPlanManageParticipant::getParticipantUserId, InternshipPlanManageParticipant::getResult));
+        PageOutput<InternshipPlanManageParticipantPageVo> pageOutput = ConventPage.getPageOutput(mobilePage, InternshipPlanManageParticipantPageVo.class);
+        for (InternshipPlanManageParticipantPageVo vo : pageOutput.getList()) {
+            if(collect.containsKey(vo.getId())){
+                vo.setIsSelected(1);
+            }else{
+                vo.setIsSelected(0);
+            }
+            vo.setEvaluateResult(collect.get(vo.getId()));
+        }
+        return pageOutput;
+    }
+
+    /**
+     * 查询带队的学生
+     * @param page
+     * @param dto
+     * @return
+     */
+    @Override
+    public PageOutput<InternshipPlanManageParticipantPageVo> getTeamStudentPage(Page<BaseStudentInfoPageVo> page, InternshipPlanManageParticipantPageDto dto) {
+        long teacherId = StpUtil.getLoginIdAsLong();
+
+        List<InternshipPlanManageParticipant> list = this.list(
+                new QueryWrapper<InternshipPlanManageParticipant>().lambda()
+                        .eq(dto.getInternshipPlanManageId() != null, InternshipPlanManageParticipant::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+                        .eq(InternshipPlanManageParticipant::getTeacherId, teacherId)
+        );
+        if(list.isEmpty()){
+            return new PageOutput<>();
+        }
+
+        Map<Long, String> collect = list.stream().filter(x -> x.getResult() != null).collect(Collectors.toMap(InternshipPlanManageParticipant::getParticipantUserId, InternshipPlanManageParticipant::getResult));
+
+        BaseStudentInfoPageDto studentInfoPageDto = BeanUtil.toBean(dto, BaseStudentInfoPageDto.class);
+        studentInfoPageDto.setInIds(list.stream().map(InternshipPlanManageParticipant::getParticipantUserId).collect(Collectors.toList()));
+        studentInfoPageDto.setKeyWord(dto.getKeyword());
+
+        Page<BaseStudentInfoPageVo> mobilePage = baseStudentSchoolRollMapper.getMobilePage(page, studentInfoPageDto);
+        PageOutput<InternshipPlanManageParticipantPageVo> pageOutput = ConventPage.getPageOutput(mobilePage, InternshipPlanManageParticipantPageVo.class);
+        for (InternshipPlanManageParticipantPageVo vo : pageOutput.getList()) {
+            vo.setEvaluateResult(collect.get(vo.getId()));
+        }
+        return pageOutput;
+    }
+
+    @Override
+    public PageOutput<InternshipPlanManageParticipantPageVo> getPage(Page<BaseStudentInfoPageVo> page, InternshipPlanManageParticipantPageDto dto) {
+        List<InternshipPlanManageParticipant> list = this.list(
+                new QueryWrapper<InternshipPlanManageParticipant>().lambda()
+                        .eq(dto.getInternshipPlanManageId() != null, InternshipPlanManageParticipant::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+        );
+
+        Map<Long, String> collect = list.stream().filter(x -> x.getResult() != null).collect(Collectors.toMap(InternshipPlanManageParticipant::getParticipantUserId, InternshipPlanManageParticipant::getResult));
+
+        BaseStudentInfoPageDto studentInfoPageDto = BeanUtil.toBean(dto, BaseStudentInfoPageDto.class);
+        studentInfoPageDto.setInIds(list.stream().map(InternshipPlanManageParticipant::getParticipantUserId).collect(Collectors.toList()));
+        studentInfoPageDto.setKeyWord(dto.getKeyword());
+
+        Page<BaseStudentInfoPageVo> mobilePage = baseStudentSchoolRollMapper.getMobilePage(page, studentInfoPageDto);
+        PageOutput<InternshipPlanManageParticipantPageVo> pageOutput = ConventPage.getPageOutput(mobilePage, InternshipPlanManageParticipantPageVo.class);
+        for (InternshipPlanManageParticipantPageVo vo : pageOutput.getList()) {
+            vo.setEvaluateResult(collect.get(vo.getId()));
+        }
+        return pageOutput;
+    }
 }

+ 46 - 2
src/main/java/com/xjrsoft/module/internship/service/impl/InternshipPlanManageServiceImpl.java

@@ -1,9 +1,13 @@
 package com.xjrsoft.module.internship.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.module.base.entity.BaseSemester;
 import com.xjrsoft.module.base.mapper.BaseSemesterMapper;
 import com.xjrsoft.module.internship.dto.AddInternshipPlanManageDto;
@@ -11,11 +15,14 @@ import com.xjrsoft.module.internship.dto.InternshipPlanManagePageDto;
 import com.xjrsoft.module.internship.entity.InternshipPlanClass;
 import com.xjrsoft.module.internship.entity.InternshipPlanManage;
 import com.xjrsoft.module.internship.entity.InternshipPlanTeacher;
+import com.xjrsoft.module.internship.entity.StudentInternshipAloneApply;
 import com.xjrsoft.module.internship.mapper.InternshipPlanClassMapper;
 import com.xjrsoft.module.internship.mapper.InternshipPlanManageMapper;
 import com.xjrsoft.module.internship.mapper.InternshipPlanTeacherMapper;
+import com.xjrsoft.module.internship.mapper.StudentInternshipAloneApplyMapper;
 import com.xjrsoft.module.internship.service.IInternshipPlanManageService;
 import com.xjrsoft.module.internship.vo.InternshipPlanManagePageVo;
+import com.xjrsoft.module.internship.vo.InternshipPlanManageVo;
 import com.xjrsoft.module.veb.entity.CompanyCoop;
 import com.xjrsoft.module.veb.entity.TrainingOutside;
 import com.xjrsoft.module.veb.entity.TrainingSchool;
@@ -27,7 +34,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
-import java.util.Objects;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -48,6 +55,7 @@ public class InternshipPlanManageServiceImpl extends MPJBaseServiceImpl<Internsh
     private final TrainingOutsideMapper trainingOutsideMapper;
     private final TrainingSchoolMapper trainingSchoolMapper;
     private final CompanyCoopMapper companyCoopMapper;
+    private final StudentInternshipAloneApplyMapper internshipAloneApplyMapper;
 
 
     @Override
@@ -115,6 +123,42 @@ public class InternshipPlanManageServiceImpl extends MPJBaseServiceImpl<Internsh
 
     @Override
     public Page<InternshipPlanManagePageVo> getPage(Page<InternshipPlanManagePageVo> page, InternshipPlanManagePageDto dto) {
-        return internshipPlanManageMapper.getPage(page, dto);
+        Page<InternshipPlanManagePageVo> mapperPage = internshipPlanManageMapper.getPage(page, dto);
+        if(dto.getStudentUserId() != null){
+            List<StudentInternshipAloneApply> aloneApplyList = internshipAloneApplyMapper.selectList(
+                    new QueryWrapper<StudentInternshipAloneApply>().lambda()
+                            .eq(StudentInternshipAloneApply::getStudentUserId, dto.getStudentUserId())
+            );
+            Set<Long> collect = aloneApplyList.stream().map(StudentInternshipAloneApply::getInternshipPlanManageId).collect(Collectors.toSet());
+            for (InternshipPlanManagePageVo record : mapperPage.getRecords()) {
+                if(collect.contains(Long.parseLong(record.getId()))){
+                    record.setIsInternshipAlone(1);
+                }else {
+                    record.setIsInternshipAlone(0);
+                }
+            }
+        }
+        return mapperPage;
+    }
+
+    @Override
+    public InternshipPlanManageVo getInfoById(Long id) {
+        InternshipPlanManage internshipPlanManage = this.getById(id);
+        if (internshipPlanManage == null) {
+            throw new MyException("找不到此数据!");
+        }
+        InternshipPlanManageVo manageVo = BeanUtil.toBean(internshipPlanManage, InternshipPlanManageVo.class);
+
+        StudentInternshipAloneApply aloneApply = internshipAloneApplyMapper.selectOne(
+                new QueryWrapper<StudentInternshipAloneApply>().lambda()
+                        .eq(StudentInternshipAloneApply::getStudentUserId, StpUtil.getLoginIdAsLong())
+                        .eq(StudentInternshipAloneApply::getInternshipPlanManageId, id)
+        );
+        if(aloneApply != null){
+            manageVo.setIsInternshipAlone(1);
+        }else{
+            manageVo.setIsInternshipAlone(0);
+        }
+        return manageVo;
     }
 }

+ 47 - 0
src/main/java/com/xjrsoft/module/internship/service/impl/StudentInternshipRecordServiceImpl.java

@@ -0,0 +1,47 @@
+package com.xjrsoft.module.internship.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.exception.MyException;
+import com.xjrsoft.module.internship.dto.AddStudentInternshipAloneApplyDto;
+import com.xjrsoft.module.internship.entity.StudentInternshipAloneApply;
+import com.xjrsoft.module.internship.entity.StudentInternshipRecord;
+import com.xjrsoft.module.internship.mapper.StudentInternshipAloneApplyMapper;
+import com.xjrsoft.module.internship.mapper.StudentInternshipRecordMapper;
+import com.xjrsoft.module.internship.service.IStudentInternshipRecordService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+* @title: 学生实习记录表
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class StudentInternshipRecordServiceImpl extends MPJBaseServiceImpl<StudentInternshipRecordMapper, StudentInternshipRecord> implements IStudentInternshipRecordService {
+
+    private final StudentInternshipAloneApplyMapper studentInternshipAloneApplyMapper;
+
+    @Override
+    @Transactional
+    public Boolean aloneMaterialSubmit(AddStudentInternshipAloneApplyDto dto) {
+
+        StudentInternshipAloneApply studentInternshipAloneApply = studentInternshipAloneApplyMapper.selectOne(
+                new QueryWrapper<StudentInternshipAloneApply>().lambda()
+                        .eq(StudentInternshipAloneApply::getStudentUserId, dto.getStudentUserId())
+                        .eq(StudentInternshipAloneApply::getInternshipPlanManageId, dto.getInternshipPlanManageId())
+        );
+        if(studentInternshipAloneApply == null){
+            throw new MyException("未提交自主实习申请,无法提交材料");
+        }
+        studentInternshipAloneApply.setContractFolderId(dto.getContractFolderId());
+        studentInternshipAloneApply.setWagesFolderId(dto.getWagesFolderId());
+        studentInternshipAloneApply.setSummarizeFolderId(dto.getSummarizeFolderId());
+        studentInternshipAloneApply.setReportContent(dto.getReportContent());
+        studentInternshipAloneApplyMapper.updateById(studentInternshipAloneApply);
+        return true;
+    }
+}

+ 6 - 0
src/main/java/com/xjrsoft/module/internship/vo/InternshipPlanManagePageVo.java

@@ -66,4 +66,10 @@ public class InternshipPlanManagePageVo {
     @ApiModelProperty("实训基地名称")
     private String trainingBaseName;
 
+    @ApiModelProperty("是否自主实习(1:是 0:否)")
+    private Integer isInternshipAlone;
+
+    @ApiModelProperty("实习岗位名称")
+    private String internshipJobName;
+
 }

+ 93 - 85
src/main/java/com/xjrsoft/module/internship/vo/InternshipPlanManageParticipantPageVo.java

@@ -1,9 +1,11 @@
 package com.xjrsoft.module.internship.vo;
 
+import com.alibaba.excel.annotation.write.style.ContentStyle;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
 * @title: 实习计划参与人表分页列表出参
@@ -14,95 +16,101 @@ import java.time.LocalDateTime;
 @Data
 public class InternshipPlanManageParticipantPageVo {
 
-    /**
-    * 主键编号
-    */
     @ApiModelProperty("主键编号")
-    private String id;
-    /**
-    * 创建人
-    */
-    @ApiModelProperty("创建人")
-    private Long createUserId;
-    /**
-    * 创建时间
-    */
-    @ApiModelProperty("创建时间")
-    private LocalDateTime createDate;
-    /**
-    * 修改人
-    */
-    @ApiModelProperty("修改人")
-    private Long modifyUserId;
-    /**
-    * 修改时间
-    */
-    @ApiModelProperty("修改时间")
-    private LocalDateTime modifyDate;
-    /**
-    * 删除标记
-    */
-    @ApiModelProperty("删除标记")
-    private Integer deleteMark;
-    /**
-    * 有效标志
-    */
-    @ApiModelProperty("有效标志")
-    private Integer enabledMark;
-    /**
-    * 序号
-    */
+    private Long id;
+
+    @ContentStyle(dataFormat = 49)
     @ApiModelProperty("序号")
     private Integer sortCode;
-    /**
-    * 实习计划id
-    */
-    @ApiModelProperty("实习计划id")
-    private Long internshipPlanManageId;
-    /**
-    * 实习参与人id
-    */
-    @ApiModelProperty("实习参与人id")
-    private Long participantUserId;
-    /**
-    * 实习参与人学号
-    */
-    @ApiModelProperty("实习参与人学号")
-    private String participantUserStudentId;
-    /**
-    * 实习参与人姓名
-    */
-    @ApiModelProperty("实习参与人姓名")
-    private String participantUserName;
-    /**
-    * 所属专业id(base_major)
-    */
-    @ApiModelProperty("所属专业id(base_major)")
-    private Long baseMajorId;
-    /**
-    * 所属专业名称
-    */
-    @ApiModelProperty("所属专业名称")
-    private String baseMajorName;
-    /**
-    * 班级id(base_class)
-    */
-    @ApiModelProperty("班级id(base_class)")
-    private Long classId;
-    /**
-    * 班级名称
-    */
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("学生姓名")
+    private String studentName;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("学号")
+    private String studentId;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("本人电话")
+    private String phone;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("监护人电话")
+    private String guardianPhone;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班主任名称")
+    private String teacherName;
+
+    @ContentStyle(dataFormat = 49)
+    @ApiModelProperty("班主任电话")
+    private String teacherPhone;
+
+    @ContentStyle(dataFormat = 49)
     @ApiModelProperty("班级名称")
     private String className;
-    /**
-    * 带队老师(xjr_user)
-    */
-    @ApiModelProperty("带队老师(xjr_user)")
-    private Long teacherId;
-    /**
-    * 实习结果评价
-    */
-    @ApiModelProperty("实习结果评价")
-    private String result;
+
+    @ApiModelProperty("学习形式")
+    private String rollModality;
+
+    @ApiModelProperty("学习形式")
+    private String rollModalityCode;
+
+    @ApiModelProperty("学籍状态(xjr_dictionary_item[archives_status])")
+    private String archivesStatus;
+
+    @ApiModelProperty("学籍状态(xjr_dictionary_item[archives_status])")
+    private String archivesStatusCode;
+
+    @ApiModelProperty("就读方式(xjr_dictionary_item[stduy_status])")
+    private String stduyStatus;
+
+    @ApiModelProperty("就读方式(xjr_dictionary_item[stduy_status])")
+    private String stduyStatusCode;
+
+    @ApiModelProperty("床位信息")
+    private String bedInfo;
+
+    @ApiModelProperty("头像")
+    private String avatar;
+
+    @ApiModelProperty("出生日期")
+    private Date birthDate;
+
+    @ApiModelProperty("民族")
+    private String nation;
+
+    private String majorSetName;
+
+    @ApiModelProperty("性别")
+    private String gender;
+
+    @ApiModelProperty("性别中文")
+    private String genderCn;
+
+    @ApiModelProperty("军训费")
+    private String jxf;
+
+    @ApiModelProperty("教材费")
+    private String jcf;
+
+    @ApiModelProperty("宿舍费")
+    private String ssf;
+
+    @ApiModelProperty("学生类别")
+    private String studentForm;
+
+    @ApiModelProperty("身份证号")
+    private String credentialNumber;
+
+    @ApiModelProperty("实习状态")
+    private String internshipStateCn;
+
+    @ApiModelProperty("是否已被选择(1:是 0:否)")
+    private Integer isSelected;
+
+    @ApiModelProperty("评价结果")
+    private String evaluateResult;
 
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/internship/vo/InternshipPlanManageVo.java

@@ -151,4 +151,7 @@ public class InternshipPlanManageVo {
     @ApiModelProperty("合作企业id")
     private String internshipUnitId;
 
+    @ApiModelProperty("是否自主实习(1:是 0:否)")
+    private Integer isInternshipAlone;
+
 }

+ 88 - 0
src/main/java/com/xjrsoft/module/internship/vo/StudentInternshipRecordPageVo.java

@@ -0,0 +1,88 @@
+package com.xjrsoft.module.internship.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+* @title: 学生实习记录表分页列表出参
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Data
+public class StudentInternshipRecordPageVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private String id;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    private LocalDateTime createDate;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    private LocalDateTime modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long modifyUserId;
+    /**
+    * 
+    */
+    @ApiModelProperty("")
+    private Long createUserId;
+    /**
+    * 登记学生(xjr_user)
+    */
+    @ApiModelProperty("登记学生(xjr_user)")
+    private Long studentUserId;
+    /**
+    * 实习时间
+    */
+    @ApiModelProperty("实习时间")
+    private LocalDateTime recordTime;
+    /**
+    * 实行类型(0:实习综合报告 1:周报 2:月报)
+    */
+    @ApiModelProperty("实行类型(0:实习综合报告 1:周报 2:月报)")
+    private Integer recordReportType;
+    /**
+    * 所属实习计划id(internship_plan_manage)
+    */
+    @ApiModelProperty("所属实习计划id(internship_plan_manage)")
+    private Long internshipPlanManageId;
+    /**
+    * 是否自主实习(1:是 0:否)
+    */
+    @ApiModelProperty("是否自主实习(1:是 0:否)")
+    private Integer isInternshipAlone;
+    /**
+    * 实习报告内容
+    */
+    @ApiModelProperty("实习报告内容")
+    private String recordContent;
+    /**
+    * 附件(xjr_file)
+    */
+    @ApiModelProperty("附件(xjr_file)")
+    private Long folderId;
+
+}

+ 63 - 0
src/main/java/com/xjrsoft/module/internship/vo/StudentInternshipRecordVo.java

@@ -0,0 +1,63 @@
+package com.xjrsoft.module.internship.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+* @title: 学生实习记录表表单出参
+* @Author dzx
+* @Date: 2025-07-01
+* @Version 1.0
+*/
+@Data
+public class StudentInternshipRecordVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("主键编号")
+    private Long id;
+    /**
+    * 登记学生(xjr_user)
+    */
+    @ApiModelProperty("登记学生(xjr_user)")
+    private Long studentUserId;
+    /**
+    * 实习时间
+    */
+    @ApiModelProperty("实习时间")
+    private LocalDateTime recordTime;
+    /**
+    * 实行类型(0:实习综合报告 1:周报 2:月报)
+    */
+    @ApiModelProperty("实行类型(0:实习综合报告 1:周报 2:月报)")
+    private Integer recordReportType;
+    /**
+    * 所属实习计划id(internship_plan_manage)
+    */
+    @ApiModelProperty("所属实习计划id(internship_plan_manage)")
+    private Long internshipPlanManageId;
+    /**
+    * 是否自主实习(1:是 0:否)
+    */
+    @ApiModelProperty("是否自主实习(1:是 0:否)")
+    private Integer isInternshipAlone;
+    /**
+    * 实习报告内容
+    */
+    @ApiModelProperty("实习报告内容")
+    private String recordContent;
+    /**
+    * 附件(xjr_file)
+    */
+    @ApiModelProperty("附件(xjr_file)")
+    private Long folderId;
+
+    @ApiModelProperty("附件地址(xjr_file)")
+    private String fileUrl;
+
+
+
+}

+ 85 - 0
src/main/java/com/xjrsoft/module/job/InternshipTask.java

@@ -0,0 +1,85 @@
+package com.xjrsoft.module.job;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.xjrsoft.common.enums.DeleteMark;
+import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
+import com.xjrsoft.common.utils.DateUtils;
+import com.xjrsoft.common.utils.LocalDateUtil;
+import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
+import com.xjrsoft.module.evaluate.entity.EvaluateManage;
+import com.xjrsoft.module.internship.entity.InternshipPlanManage;
+import com.xjrsoft.module.internship.entity.InternshipTeacherCollect;
+import com.xjrsoft.module.internship.service.IInternshipPlanManageService;
+import com.xjrsoft.module.internship.service.IInternshipTeacherCollectService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 实习相关数据处理
+ */
+@Component
+@Slf4j
+public class InternshipTask {
+
+    @Autowired
+    private IInternshipPlanManageService internshipPlanManageService;
+
+    @Autowired
+    private IInternshipTeacherCollectService internshipTeacherCollectService;
+
+    @Async
+    @Scheduled(cron = "0 0 0 * * ?")
+    public void addSubmitRecord() {
+        //查询实习计划,根据开始时间和结束时间来判断并修改状态
+        List<InternshipPlanManage> list = internshipPlanManageService.list(
+                new QueryWrapper<InternshipPlanManage>().lambda()
+                        .eq(InternshipPlanManage::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+        LocalDate now = LocalDate.now();
+        List<InternshipPlanManage> updateList = new ArrayList<>();
+        for (InternshipPlanManage planManage : list) {
+            if(LocalDateUtil.isDateInRange(now, planManage.getStartTime(), planManage.getEndTime())){
+                planManage.setStatus(1);
+                updateList.add(planManage);
+            }else if(now.isAfter(planManage.getEndTime())){
+                planManage.setStatus(2);
+                updateList.add(planManage);
+            }
+        }
+
+        if(!updateList.isEmpty()){
+            internshipPlanManageService.updateBatchById(updateList);
+        }
+
+
+        //查询实习计划,根据开始时间和结束时间来判断并修改状态
+        List<InternshipTeacherCollect> collectList = internshipTeacherCollectService.list(
+                new QueryWrapper<InternshipTeacherCollect>().lambda()
+                        .eq(InternshipTeacherCollect::getDeleteMark, DeleteMark.NODELETE.getCode())
+        );
+
+        List<InternshipTeacherCollect> collectUpdateList = new ArrayList<>();
+        for (InternshipTeacherCollect collect : collectList) {
+            if(LocalDateUtil.isDateInRange(now, collect.getStartDate(), collect.getEndDate())){
+                collect.setStatus(1);
+                collectUpdateList.add(collect);
+            }else if(now.isAfter(collect.getEndDate())){
+                collect.setStatus(2);
+                collectUpdateList.add(collect);
+            }
+        }
+
+        if(!collectUpdateList.isEmpty()){
+            internshipTeacherCollectService.updateBatchById(collectUpdateList);
+        }
+    }
+}

+ 56 - 0
src/main/java/com/xjrsoft/module/oa/service/impl/OfficialDocumentReceivedServiceImpl.java

@@ -127,6 +127,34 @@ public class OfficialDocumentReceivedServiceImpl extends MPJBaseServiceImpl<Offi
     @Override
     @Transactional(rollbackFor = Exception.class)
     public List<NextReviewerListVo> nextReviewerList(String taskId) {
+        if("0".equals(taskId)){
+            // 根据部门获取部门管理人员
+            MPJLambdaWrapper<XjrUser> xjrUserMPJLambdaWrapper = new MPJLambdaWrapper<>();
+            xjrUserMPJLambdaWrapper
+                    .selectAs(XjrUser::getId, NextReviewerListVo::getValue)
+                    .selectAs(XjrUser::getName, NextReviewerListVo::getLabel)
+                    .selectAs(Department::getName, NextReviewerListVo::getDeptName)
+                    .innerJoin(UserPostRelation.class, UserPostRelation::getUserId, XjrUser::getId)
+                    .innerJoin(Post.class, Post::getId, UserPostRelation::getPostId)
+                    .leftJoin(Department.class, Department::getId, Post::getDeptId)
+                    .and(wrapper ->
+                            wrapper
+                                    .like(Post::getName, "主任")
+                                    .or()
+                                    .like(Post::getName, "书记")
+                    )
+            ;
+            List<NextReviewerListVo> voList = xjrUserMapper.selectJoinList(NextReviewerListVo.class, xjrUserMPJLambdaWrapper);
+
+            for (NextReviewerListVo vo : voList){
+                if(ObjectUtils.isNotEmpty(vo.getDeptName())){
+                    vo.setLabel(vo.getLabel() + "(" + vo.getDeptName() + ")");
+                }
+            }
+
+            return voList;
+        }
+
         // 根据流程Id获取分管领导审核节点的审核人
         LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
         workflowRecordLambdaQueryWrapper
@@ -207,6 +235,34 @@ public class OfficialDocumentReceivedServiceImpl extends MPJBaseServiceImpl<Offi
     @Override
     @Transactional(rollbackFor = Exception.class)
     public List<NextReviewerListVo> nextExecutorList(String taskId) {
+        if("0".equals(taskId)){
+            // 根据部门获取部门管理人员
+            MPJLambdaWrapper<XjrUser> xjrUserMPJLambdaWrapper = new MPJLambdaWrapper<>();
+            xjrUserMPJLambdaWrapper
+                    .selectAs(XjrUser::getId, NextReviewerListVo::getValue)
+                    .selectAs(XjrUser::getName, NextReviewerListVo::getLabel)
+                    .selectAs(Department::getName, NextReviewerListVo::getDeptName)
+                    .innerJoin(UserPostRelation.class, UserPostRelation::getUserId, XjrUser::getId)
+                    .innerJoin(Post.class, Post::getId, UserPostRelation::getPostId)
+                    .leftJoin(Department.class, Department::getId, Post::getDeptId)
+                    .and(wrapper ->
+                            wrapper
+                                    .like(Post::getName, "副主任")
+                                    .or()
+                                    .like(Post::getName, "副书记")
+                    )
+            ;
+            List<NextReviewerListVo> voList = xjrUserMapper.selectJoinList(NextReviewerListVo.class, xjrUserMPJLambdaWrapper);
+
+            for (NextReviewerListVo vo : voList){
+                if(ObjectUtils.isNotEmpty(vo.getDeptName())){
+                    vo.setLabel(vo.getLabel() + "(" + vo.getDeptName() + ")");
+                }
+            }
+
+            return voList;
+        }
+
         // 根据流程Id获取部门主任意见审核节点的审核人
         LambdaQueryWrapper<WorkflowRecord> workflowRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
         workflowRecordLambdaQueryWrapper

+ 20 - 0
src/main/java/com/xjrsoft/module/student/dto/BaseStudentInfoPageDto.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 
 /**
  * @title: 学生职务设置分页查询入参
@@ -47,4 +49,22 @@ public class BaseStudentInfoPageDto extends PageInput {
 
     @ApiModelProperty("最新收费区间")
     private String beltcode;
+
+    @ApiModelProperty("不包含的学生id")
+    private List<Long> notInIds;
+
+    @ApiModelProperty("包含的学生id")
+    private List<Long> inIds;
+
+    @ApiModelProperty("姓名")
+    private String name;
+
+    @ApiModelProperty("手机号")
+    private String mobile;
+
+    @ApiModelProperty("班级名称")
+    private String className;
+
+    @ApiModelProperty("身份证号")
+    private String credentialNumber;
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/student/dto/BaseStudentUserPageDto.java

@@ -73,4 +73,7 @@ public class BaseStudentUserPageDto extends PageInput {
     @ApiModelProperty("身份证号")
     private String classIdStr;
 
+    @JsonIgnore
+    private List<Long> userIds;
+
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentSchoolRollServiceImpl.java

@@ -67,7 +67,7 @@ public class BaseStudentSchoolRollServiceImpl extends MPJBaseServiceImpl<BaseStu
                 new QueryWrapper<BaseClass>().lambda().eq(BaseClass::getTeacherId, teacherId)
                         .eq(BaseClass::getDeleteMark, DeleteMark.NODELETE.getCode())
         );
-        if (roleList.size() == 1 && roleList.contains("CLASSTE")) {
+        if (roleList.size() == 2 && roleList.contains("CLASSTE")) {
             if (classList != null && !classList.isEmpty()) {
                 dto.setTeacherId(teacherId);
             }

+ 9 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseStudentUserPageVo.java

@@ -56,4 +56,13 @@ public class BaseStudentUserPageVo {
 
     @ApiModelProperty("微信openId")
     private String openId;
+
+    @ApiModelProperty("学号")
+    private String studentId;
+
+    @ApiModelProperty("专业")
+    private String majorSetName;
+
+    @ApiModelProperty("专业id")
+    private Long majorSetId;
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/system/service/impl/MenuServiceImpl.java

@@ -447,6 +447,9 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
                 Long number = menuVos.stream().filter(x -> x.getParentId().equals(node.getId())).count();
                 if (number == 0 && !Objects.equals(parentId, GlobalConstant.FIRST_NODE_VALUE)) {
                     MenuVo parentMenu = getParentMenu(parentId, menuMap);
+                    if(parentMenu == null){
+                        return;
+                    }
                     node.setSystemId(parentMenu.getSystemId());
                     node.setSystemName(parentMenu.getSystemName());
                     node.setParentSortCode(parentMenu.getSortCode());
@@ -472,6 +475,9 @@ public class MenuServiceImpl extends MPJBaseServiceImpl<MenuMapper, Menu> implem
         if (menuVo != null && GlobalConstant.FIRST_NODE_VALUE.equals(menuVo.getParentId())) {
             return menuVo;
         }
+        if(menuVo == null){
+            return null;
+        }
         return getParentMenu(menuVo.getParentId(), menuMap);
     }
 

+ 5 - 0
src/main/java/com/xjrsoft/module/xycxedu/service/impl/ExamSubjectScoreEnterServiceImpl.java

@@ -36,6 +36,7 @@ import com.xjrsoft.module.xycxedu.vo.ExamSubjectScoreEnterPageVo;
 import com.xjrsoft.module.xycxedu.vo.ExamSubjectScoreEnterVo;
 import lombok.AllArgsConstructor;
 import me.zhyd.oauth.log.Log;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@@ -84,6 +85,7 @@ public class ExamSubjectScoreEnterServiceImpl extends MPJBaseServiceImpl<ExamSub
             if (credentialNumbers.isEmpty()) {
                 return true;
             }
+
             List<User> userList = userService.list(
                     new MPJLambdaWrapper<User>()
                             .select(User::getId)
@@ -106,6 +108,9 @@ public class ExamSubjectScoreEnterServiceImpl extends MPJBaseServiceImpl<ExamSub
             List<ExamSubjectScore> updateList = new ArrayList<>();
             for (ExamSubjectScoreEnterImportDto importVo : dataList) {
                 Long userId = userMaps.get(importVo.getCredentialNumber());
+                if(ObjectUtils.isEmpty(userId)){
+                    throw new MyException(importVo.getStudentName() + "不在" + importVo.getClassName() + "班级中,请核实学生基础数据");
+                }
                 ExamSubjectScore examSubjectScores = listMap.get(userId);
                 examSubjectScores.setCourseSubjectId(enter.getCourseSubjectId());
                 examSubjectScores.setScore(importVo.getScore() == null ? null : Float.parseFloat(importVo.getScore()));

+ 18 - 1
src/main/resources/mapper/internship/InternshipPlanManageMapper.xml

@@ -7,7 +7,7 @@
         SELECT t1.id,t1.base_semester,t1.internship_plan_name,t1.status,t1.start_time,t1.end_time,t2.name AS insurance_purchaser_cn,
         t3.name AS internship_plan_type_cn,t4.name AS internship_whereabouts_cn,t5.name AS insurance_type_cn,t1.internship_unit_name,
         t6.name AS enterprise_industry_cn,t7.name AS lodging_plan_cn,t8.name AS internship_site_type_cn,t9.name AS internship_unit_source_cn,
-        t10.name AS professional_relevance_enterprise_cn,IFNULL(t11.training_name,t12.training_name) AS training_base_name FROM internship_plan_manage t1
+        t10.name AS professional_relevance_enterprise_cn,IFNULL(t11.training_name,t12.training_name) AS training_base_name,t1.internship_job_name FROM internship_plan_manage t1
         LEFT JOIN xjr_dictionary_detail t2 ON t1.insurance_purchaser = t2.code AND t2.item_id = 1826514469123567618
         LEFT JOIN xjr_dictionary_detail t3 ON t1.internship_plan_type = t3.code AND t3.item_id = 1826151188882042882
         LEFT JOIN xjr_dictionary_detail t4 ON t1.internship_whereabouts = t4.code AND t4.item_id = 1826520014937174017
@@ -47,5 +47,22 @@
         <if test="dto.baseSemesterId != null">
             and t1.base_semester_id = #{dto.baseSemesterId}
         </if>
+        <if test="dto.teacherId != null">
+            and (t1.id in (
+                SELECT DISTINCT c1.internship_plan_manage_id FROM internship_plan_class c1
+                INNER JOIN base_class c2 ON c1.class_id = c2.id
+                WHERE c1.delete_mark = 0 AND c2.delete_mark = 0
+                AND c2.teacher_id = #{dto.teacherId}
+            ) or t1.id in (
+                SELECT DISTINCT internship_plan_manage_id FROM internship_plan_teacher
+                WHERE delete_mark = 0 AND user_id = #{dto.teacherId}
+            ))
+        </if>
+        <if test="dto.studentUserId != null">
+            and t1.id in (
+                SELECT DISTINCT internship_plan_manage_id FROM internship_plan_manage_participant
+                WHERE delete_mark = 0 AND participant_user_id = #{dto.studentUserId}
+            )
+        </if>
     </select>
 </mapper>

+ 8 - 1
src/main/resources/mapper/student/BaseStudentMapper.xml

@@ -138,12 +138,13 @@
     <select id="getStudentList" parameterType="com.xjrsoft.module.student.dto.BaseStudentUserPageDto" resultType="com.xjrsoft.module.student.vo.BaseStudentUserPageVo">
         SELECT t1.id,t4.name AS class_name,t5.name AS teacher_name,t1.name,t1.gender AS gender_cn,t1.credential_number,
         t1.mobile,t3.archives_status AS archives_status_cn ,t3.stduy_status AS stduy_status_cn,t3.student_type AS student_type_cn,
-        t3.learn_status as learn_status_cn,t3.grade_id,t6.name as grade_name,t3.class_id,t1.open_id FROM xjr_user t1
+        t3.learn_status as learn_status_cn,t3.grade_id,t6.name as grade_name,t3.class_id,t1.open_id,t2.student_id,t7.name as major_set_name, t3.major_set_id FROM xjr_user t1
         INNER JOIN base_student t2 ON t1.id = t2.user_id
         LEFT JOIN base_student_school_roll t3 ON t1.id = t3.user_id
         LEFT JOIN base_class t4 ON t4.id = t3.class_id
         LEFT JOIN xjr_user t5 ON t4.teacher_id = t5.id
         LEFT JOIN base_grade t6 ON t3.grade_id = t6.id
+        left join base_major_set t7 on t3.major_set_id = t7.id
         WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
         and t3.archives_status = 'FB2901' and t2.is_normal = 1
         <if test="dto.classIds != null and dto.classIds.size() > 0">
@@ -158,6 +159,12 @@
                 #{credentialNumber}
             </foreach>
         </if>
+        <if test="dto.userIds != null and dto.userIds.size() > 0">
+            and t1.id in
+            <foreach item="userId" index="index" collection="dto.userIds" open="(" close=")" separator=",">
+                #{userId}
+            </foreach>
+        </if>
     </select>
 
 </mapper>

+ 25 - 0
src/main/resources/mapper/student/BaseStudentSchoolRollMapper.xml

@@ -73,6 +73,31 @@
             OR t2.mobile LIKE concat('%', #{dto.keyWord}, '%')
             )
         </if>
+
+        <if test="dto.name != null and dto.name != ''">
+            AND t2.name LIKE concat('%', #{dto.name}, '%')
+        </if>
+        <if test="dto.mobile != null and dto.mobile != ''">
+            AND t2.mobile LIKE concat('%', #{dto.mobile}, '%')
+        </if>
+        <if test="dto.className != null and dto.className != ''">
+            AND t4.name LIKE concat('%', #{dto.className}, '%')
+        </if>
+        <if test="dto.credentialNumber != null and dto.credentialNumber != ''">
+            AND t2.credential_number LIKE concat('%', #{dto.credentialNumber}, '%')
+        </if>
+        <if test="dto.notInIds != null and dto.notInIds.size() > 0">
+            and t2.id in
+            <foreach item="notInId" index="index" collection="dto.notInIds" open="(" close=")" separator=",">
+                #{notInId}
+            </foreach>
+        </if>
+        <if test="dto.inIds != null and dto.inIds.size() > 0">
+            and t2.id in
+            <foreach item="inId" index="index" collection="dto.inIds" open="(" close=")" separator=",">
+                #{inId}
+            </foreach>
+        </if>
     </select>
 
     <select id="getInfoById" parameterType="com.xjrsoft.module.student.dto.BaseStudentInfoDetailDto" resultType="com.xjrsoft.module.student.vo.BaseStudentInfoDetailVo">

+ 29 - 1
src/main/resources/sqlScript/20250623sql.sql

@@ -146,11 +146,39 @@ CREATE TABLE `student_internship_alone_apply` (
   `student_user_id` BIGINT NOT NULL COMMENT '登记学生(xjr_user)',
   `class_id` BIGINT DEFAULT NULL COMMENT '所属班级(base_class)',
   `internship_plan_manage_id` BIGINT NOT NULL COMMENT '所属实习计划id(internship_plan_manage)',
-  `folder_id` BIGINT DEFAULT NULL COMMENT '附件(xjr_file)',
+  `folder_id` BIGINT DEFAULT NULL COMMENT '申请附件(xjr_file)',
+  `report_content` VARCHAR(1000) DEFAULT NULL COMMENT '实习报告内容',
+  `contract_folder_id` BIGINT DEFAULT NULL COMMENT '合同附件(xjr_file)',
+  `wages_folder_id` BIGINT DEFAULT NULL COMMENT '工资流水附件(xjr_file)',
+  `summarize_folder_id` BIGINT DEFAULT NULL COMMENT '总结材料附件(xjr_file)',
+  `teacher_id` BIGINT DEFAULT NULL COMMENT '班主任id(xjr_user)',
   PRIMARY KEY (`id`)
 ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生自主实习申请表';
 
 
+-- -------------------------------------------------------------------------------------------------------------------
+-- 学生实习记录
+-- -------------------------------------------------------------------------------------------------------------------
+DROP TABLE IF EXISTS student_internship_record;
+CREATE TABLE `student_internship_record` (
+  `id` BIGINT NOT NULL COMMENT '主键编号',
+  `create_date` DATETIME DEFAULT NULL COMMENT '创建时间',
+  `modify_date` DATETIME DEFAULT NULL COMMENT '修改时间',
+  `delete_mark` INT NOT NULL COMMENT '删除标记',
+  `enabled_mark` INT NOT NULL COMMENT '有效标志',
+  `modify_user_id` BIGINT DEFAULT NULL,
+  `create_user_id` BIGINT DEFAULT NULL,
+  `student_user_id` BIGINT NOT NULL COMMENT '登记学生(xjr_user)',
+  `record_time` DATETIME DEFAULT NULL COMMENT '实习时间',
+  `record_report_type` INT DEFAULT NULL COMMENT '实行类型(0:实习综合报告 1:周报 2:月报)',
+  `internship_plan_manage_id` BIGINT NOT NULL COMMENT '所属实习计划id(internship_plan_manage)',
+  `is_internship_alone` INT NOT NULL COMMENT '是否自主实习(1:是 0:否)',
+  `record_content` VARCHAR(1000) DEFAULT NULL COMMENT '实习报告内容',
+  `folder_id` BIGINT DEFAULT NULL COMMENT '附件(xjr_file)',
+  PRIMARY KEY (`id`)
+) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='学生实习记录表';
+
+
 
 
 

+ 25 - 0
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -5228,4 +5228,29 @@ public class FreeMarkerGeneratorTest {
 
         apiGeneratorService.generateCodes(params);
     }
+
+    @Test
+    public void gcstudent_internship_record() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("student_internship_record");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("dzx");//作者名称
+        params.setPackageName("internship");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(false);//是否生成导入接口
+        params.setExport(false);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+    }
 }