Browse Source

Merge remote-tracking branch 'origin/dev' into dev

大数据与最优化研究所 1 month ago
parent
commit
91dccfc746
27 changed files with 1081 additions and 76 deletions
  1. 45 0
      src/main/java/com/xjrsoft/common/enums/LearnStatusEnum.java
  2. 49 0
      src/main/java/com/xjrsoft/common/enums/RollModalityEnum.java
  3. 46 0
      src/main/java/com/xjrsoft/common/enums/StudentTypeEnum.java
  4. 139 0
      src/main/java/com/xjrsoft/module/base/controller/BaseCourseSubjectController.java
  5. 54 0
      src/main/java/com/xjrsoft/module/base/dto/AddBaseCourseSubjectDto.java
  6. 8 2
      src/main/java/com/xjrsoft/module/base/dto/AddCourseSubjectDetailDto.java
  7. 26 0
      src/main/java/com/xjrsoft/module/base/dto/BaseCourseSubjectListDto.java
  8. 26 0
      src/main/java/com/xjrsoft/module/base/dto/BaseCourseSubjectPageDto.java
  9. 33 0
      src/main/java/com/xjrsoft/module/base/dto/UpdateBaseCourseSubjectDto.java
  10. 51 33
      src/main/java/com/xjrsoft/module/base/entity/BaseCourseSubject.java
  11. 7 3
      src/main/java/com/xjrsoft/module/base/entity/CourseSubjectDetail.java
  12. 7 8
      src/main/java/com/xjrsoft/module/base/mapper/BaseCourseSubjectMapper.java
  13. 2 1
      src/main/java/com/xjrsoft/module/base/mapper/CourseSubjectDetailMapper.java
  14. 32 8
      src/main/java/com/xjrsoft/module/base/service/IBaseCourseSubjectService.java
  15. 76 8
      src/main/java/com/xjrsoft/module/base/service/impl/BaseCourseSubjectServiceImpl.java
  16. 104 0
      src/main/java/com/xjrsoft/module/base/vo/BaseCourseSubjectListVo.java
  17. 104 0
      src/main/java/com/xjrsoft/module/base/vo/BaseCourseSubjectPageVo.java
  18. 55 0
      src/main/java/com/xjrsoft/module/base/vo/BaseCourseSubjectVo.java
  19. 7 1
      src/main/java/com/xjrsoft/module/base/vo/CourseSubjectDetailVo.java
  20. 7 4
      src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java
  21. 2 0
      src/main/java/com/xjrsoft/module/student/service/IStudentChangeRecordService.java
  22. 11 8
      src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentAssessmentInspectionServiceImpl.java
  23. 43 0
      src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentSchoolRollServiceImpl.java
  24. 100 0
      src/main/java/com/xjrsoft/module/student/service/impl/StudentChangeRecordServiceImpl.java
  25. 6 0
      src/main/java/com/xjrsoft/module/student/service/impl/StudentManagerServiceImpl.java
  26. 7 0
      src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java
  27. 34 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 45 - 0
src/main/java/com/xjrsoft/common/enums/LearnStatusEnum.java

@@ -0,0 +1,45 @@
+package com.xjrsoft.common.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description: 学籍形式learn_status
+ * @author: dzx
+ * @create2025228
+ * @Version 1.0
+ */
+public enum LearnStatusEnum {
+
+    FB3101("FB3101", "全日制"),
+
+    FB3102("FB3102", "非全日制");
+
+    final String code;
+    final String value;
+
+    private static final Map<String, String> lookup = new HashMap<>();
+
+    static {
+        for (LearnStatusEnum s : LearnStatusEnum.values()) {
+            lookup.put(s.getCode(), s.getValue());
+        }
+    }
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    LearnStatusEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+
+    public static String fromCode(String code) {
+        return lookup.get(code);
+    }
+}

+ 49 - 0
src/main/java/com/xjrsoft/common/enums/RollModalityEnum.java

@@ -0,0 +1,49 @@
+package com.xjrsoft.common.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description: 学籍形式learn_status
+ * @author: dzx
+ * @create2025228
+ * @Version 1.0
+ */
+public enum RollModalityEnum {
+
+    borrowing("borrowing", "在校无本班学籍"),
+
+    normal("normal", "在校本班学籍"),
+
+    practice("practice", "外出实习本班学籍"),
+
+    practiceno("practiceno", "外出实习无本班学籍");
+
+    final String code;
+    final String value;
+
+    private static final Map<String, String> lookup = new HashMap<>();
+
+    static {
+        for (RollModalityEnum s : RollModalityEnum.values()) {
+            lookup.put(s.getCode(), s.getValue());
+        }
+    }
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    RollModalityEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+
+    public static String fromCode(String code) {
+        return lookup.get(code);
+    }
+}

+ 46 - 0
src/main/java/com/xjrsoft/common/enums/StudentTypeEnum.java

@@ -0,0 +1,46 @@
+package com.xjrsoft.common.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @description: 学生类别student_type
+ * @author: dzx
+ * @create2025228
+ * @Version 1.0
+ */
+public enum StudentTypeEnum {
+    FB2801("FB2801", "普惠制学生"),
+
+    FB2802("FB2802", "建卡、低保、特困学生"),
+
+    FB2803("FB2803", "其他贫困学生");
+
+    final String code;
+    final String value;
+
+    private static final Map<String, String> lookup = new HashMap<>();
+
+    static {
+        for (StudentTypeEnum s : StudentTypeEnum.values()) {
+            lookup.put(s.getCode(), s.getValue());
+        }
+    }
+
+    public String getCode() {
+        return this.code;
+    }
+
+    public String getValue() {
+        return this.value;
+    }
+
+    StudentTypeEnum(final String code, final String message) {
+        this.code = code;
+        this.value = message;
+    }
+
+    public static String fromCode(String code) {
+        return lookup.get(code);
+    }
+}

+ 139 - 0
src/main/java/com/xjrsoft/module/base/controller/BaseCourseSubjectController.java

@@ -0,0 +1,139 @@
+package com.xjrsoft.module.base.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+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.base.dto.AddBaseCourseSubjectDto;
+import com.xjrsoft.module.base.dto.BaseCourseSubjectPageDto;
+import com.xjrsoft.module.base.dto.UpdateBaseCourseSubjectDto;
+import com.xjrsoft.module.base.entity.BaseCourseSubject;
+import com.xjrsoft.module.base.entity.CourseSubjectDetail;
+import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
+import com.xjrsoft.module.base.vo.BaseCourseSubjectPageVo;
+import com.xjrsoft.module.base.vo.BaseCourseSubjectVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.http.ResponseEntity;
+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 org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+* @title: 课程学科
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/base" + "/baseCourseSubject")
+@Api(value = "/base"  + "/baseCourseSubject",tags = "课程学科代码")
+@AllArgsConstructor
+public class BaseCourseSubjectController {
+
+
+    private final IBaseCourseSubjectService baseCourseSubjectService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="课程学科列表(分页)")
+    @SaCheckPermission("basecoursesubject:detail")
+    @XjrLog(value = "课程学科列表(分页)")
+    public RT<PageOutput<BaseCourseSubjectPageVo>> page(@Valid BaseCourseSubjectPageDto dto){
+
+        LambdaQueryWrapper<BaseCourseSubject> queryWrapper = new LambdaQueryWrapper<>();
+        new MPJLambdaWrapper<BaseCourseSubject>()
+                .select(BaseCourseSubject::getId)
+                .select(BaseCourseSubject.class,x -> VoToColumnUtil.fieldsToColumns(BaseCourseSubjectPageVo.class).contains(x.getProperty()))
+                .innerJoin(CourseSubjectDetail.class, CourseSubjectDetail::getBaseCourseSubjectId, BaseCourseSubject::getId)
+                .orderByDesc(BaseCourseSubject::getId);
+        queryWrapper
+                    .orderByDesc(BaseCourseSubject::getId)
+                .select(BaseCourseSubject.class,x -> VoToColumnUtil.fieldsToColumns(BaseCourseSubjectPageVo.class).contains(x.getProperty()));
+        IPage<BaseCourseSubject> page = baseCourseSubjectService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<BaseCourseSubjectPageVo> pageOutput = ConventPage.getPageOutput(page, BaseCourseSubjectPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询课程学科信息")
+    @SaCheckPermission("basecoursesubject:detail")
+    @XjrLog(value = "根据id查询课程学科信息")
+    public RT<BaseCourseSubjectVo> info(@RequestParam Long id){
+        BaseCourseSubject baseCourseSubject = baseCourseSubjectService.getByIdDeep(id);
+        if (baseCourseSubject == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(baseCourseSubject, BaseCourseSubjectVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增课程学科")
+    @SaCheckPermission("basecoursesubject:add")
+    @XjrLog(value = "新增课程学科")
+    public RT<Boolean> add(@Valid @RequestBody AddBaseCourseSubjectDto dto){
+        BaseCourseSubject baseCourseSubject = BeanUtil.toBean(dto, BaseCourseSubject.class);
+        boolean isSuccess = baseCourseSubjectService.add(baseCourseSubject);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改课程学科")
+    @SaCheckPermission("basecoursesubject:edit")
+    @XjrLog(value = "修改课程学科")
+    public RT<Boolean> update(@Valid @RequestBody UpdateBaseCourseSubjectDto dto){
+
+        BaseCourseSubject baseCourseSubject = BeanUtil.toBean(dto, BaseCourseSubject.class);
+        return RT.ok(baseCourseSubjectService.update(baseCourseSubject));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除课程学科")
+    @SaCheckPermission("basecoursesubject:delete")
+    @XjrLog(value = "删除课程学科")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(baseCourseSubjectService.delete(ids));
+
+    }
+    @PostMapping("/import")
+    @ApiOperation(value = "导入")
+    @XjrLog(value = "导入", saveRequestData = false)
+    public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
+        List<BaseCourseSubjectPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(BaseCourseSubjectPageVo.class).sheet().doReadSync();
+        Boolean result = baseCourseSubjectService.saveBatch(BeanUtil.copyToList(savedDataList, BaseCourseSubject.class));
+        return RT.ok(result);
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    @XjrLog(value = "导出", saveRequestData = false)
+    public ResponseEntity<byte[]> exportData(@Valid BaseCourseSubjectPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<BaseCourseSubjectPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<BaseCourseSubjectPageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, BaseCourseSubjectPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "BaseCourseSubject" + ExcelTypeEnum.XLSX.getValue());
+    }
+}

+ 54 - 0
src/main/java/com/xjrsoft/module/base/dto/AddBaseCourseSubjectDto.java

@@ -0,0 +1,54 @@
+package com.xjrsoft.module.base.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+import com.xjrsoft.module.base.entity.CourseSubjectDetail;
+
+
+
+/**
+* @title: 课程学科
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
+@Data
+public class AddBaseCourseSubjectDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 课程学科名称
+    */
+    @ApiModelProperty("课程学科名称")
+    private String name;
+    /**
+    * 课程学科代码
+    */
+    @ApiModelProperty("课程学科代码")
+    private String code;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 标签id(base_label)
+    */
+    @ApiModelProperty("标签id(base_label)")
+    private Long baseLabelId;
+
+    /**
+    * courseSubjectDetail
+    */
+    @ApiModelProperty("courseSubjectDetail子表")
+    private List<AddCourseSubjectDetailDto> courseSubjectDetailList;
+}

+ 8 - 2
src/main/java/com/xjrsoft/module/base/dto/AddCourseSubjectDetailDto.java

@@ -2,15 +2,21 @@ package com.xjrsoft.module.base.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-
 import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
 
 
 
 /**
 * @title: 课程学科管理详情表
 * @Author dzx
-* @Date: 2024-11-26
+* @Date: 2025-02-28
 * @Version 1.0
 */
 @Data

+ 26 - 0
src/main/java/com/xjrsoft/module/base/dto/BaseCourseSubjectListDto.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.base.dto;
+
+import com.xjrsoft.common.page.ListInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 课程学科列表查询入参
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseCourseSubjectListDto extends ListInput {
+
+
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/base/dto/BaseCourseSubjectPageDto.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.base.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 课程学科分页查询入参
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseCourseSubjectPageDto extends PageInput {
+
+
+}

+ 33 - 0
src/main/java/com/xjrsoft/module/base/dto/UpdateBaseCourseSubjectDto.java

@@ -0,0 +1,33 @@
+package com.xjrsoft.module.base.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+import com.xjrsoft.module.base.entity.CourseSubjectDetail;
+
+
+
+/**
+* @title: 课程学科
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
+@Data
+public class UpdateBaseCourseSubjectDto extends AddBaseCourseSubjectDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键
+    */
+    @ApiModelProperty("主键")
+    private Long id;
+}

+ 51 - 33
src/main/java/com/xjrsoft/module/base/entity/BaseCourseSubject.java

@@ -2,86 +2,104 @@ package com.xjrsoft.module.base.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 com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-
 import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
 import java.util.Date;
 
+
 /**
- * <p>
- * 课程学科
- * </p>
- *
- * @author baomidou
- * @since 2023-09-02 04:52:58
- */
+* @title: 课程学科
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
 @Data
 @TableName("base_course_subject")
-@ApiModel(value = "BaseCourseSubject对象", description = "课程学科")
+@ApiModel(value = "base_course_subject", description = "课程学科")
 public class BaseCourseSubject implements Serializable {
 
     private static final long serialVersionUID = 1L;
 
     /**
-     * 主键编号
-     */
-    @ApiModelProperty("主键编号")
+    * 主键
+    */
+    @ApiModelProperty("主键")
     @TableId
     private Long id;
-
     /**
-     * 创建人
-     */
+    * 创建人
+    */
     @ApiModelProperty("创建人")
     @TableField(fill = FieldFill.INSERT)
     private Long createUserId;
     /**
-     * 创建时间
-     */
+    * 创建时间
+    */
     @ApiModelProperty("创建时间")
     @TableField(fill = FieldFill.INSERT)
     private Date createDate;
     /**
-     * 修改人
-     */
+    * 修改人
+    */
     @ApiModelProperty("修改人")
     @TableField(fill = FieldFill.UPDATE)
     private Long modifyUserId;
     /**
-     * 修改时间
-     */
+    * 修改时间
+    */
     @ApiModelProperty("修改时间")
     @TableField(fill = FieldFill.UPDATE)
     private Date modifyDate;
-
     /**
-     * 删除标记
-     */
+    * 删除标记
+    */
     @ApiModelProperty("删除标记")
     @TableField(fill = FieldFill.INSERT)
     @TableLogic
     private Integer deleteMark;
     /**
-     * 有效标志
-     */
+    * 有效标志
+    */
     @ApiModelProperty("有效标志")
     @TableField(fill = FieldFill.INSERT)
     private Integer enabledMark;
-
+    /**
+    * 课程学科名称
+    */
     @ApiModelProperty("课程学科名称")
     private String name;
-
+    /**
+    * 课程学科代码
+    */
     @ApiModelProperty("课程学科代码")
     private String code;
-
+    /**
+    * 备注
+    */
     @ApiModelProperty("备注")
     private String remark;
-
-    @ApiModelProperty("标签id")
+    /**
+    * 标签id(base_label)
+    */
+    @ApiModelProperty("标签id(base_label)")
     private Long baseLabelId;
-}
+
+    /**
+    * courseSubjectDetail
+    */
+    @ApiModelProperty("courseSubjectDetail子表")
+    @TableField(exist = false)
+    @EntityMapping(thisField = "id", joinField = "baseCourseSubjectId")
+    private List<CourseSubjectDetail> courseSubjectDetailList;
+
+}

+ 7 - 3
src/main/java/com/xjrsoft/module/base/entity/CourseSubjectDetail.java

@@ -2,21 +2,25 @@ package com.xjrsoft.module.base.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 com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-
 import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
 import java.util.Date;
 
 
 /**
 * @title: 课程学科管理详情表
 * @Author dzx
-* @Date: 2024-11-26
+* @Date: 2025-02-28
 * @Version 1.0
 */
 @Data

+ 7 - 8
src/main/java/com/xjrsoft/module/base/mapper/BaseCourseSubjectMapper.java

@@ -1,18 +1,17 @@
 package com.xjrsoft.module.base.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.base.entity.BaseCourseSubject;
 import org.apache.ibatis.annotations.Mapper;
 
 /**
- * <p>
- * 课程学科 Mapper 接口
- * </p>
- *
- * @author baomidou
- * @since 2023-09-02 04:52:58
- */
+* @title: 课程学科
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
 @Mapper
-public interface BaseCourseSubjectMapper extends BaseMapper<BaseCourseSubject> {
+public interface BaseCourseSubjectMapper extends MPJBaseMapper<BaseCourseSubject> {
 
 }

+ 2 - 1
src/main/java/com/xjrsoft/module/base/mapper/CourseSubjectDetailMapper.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.base.mapper;
 
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.base.entity.CourseSubjectDetail;
 import org.apache.ibatis.annotations.Mapper;
@@ -7,7 +8,7 @@ import org.apache.ibatis.annotations.Mapper;
 /**
 * @title: 课程学科管理详情表
 * @Author dzx
-* @Date: 2024-11-26
+* @Date: 2025-02-28
 * @Version 1.0
 */
 @Mapper

+ 32 - 8
src/main/java/com/xjrsoft/module/base/service/IBaseCourseSubjectService.java

@@ -1,16 +1,40 @@
 package com.xjrsoft.module.base.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.base.entity.BaseCourseSubject;
+import lombok.Data;
+import java.util.List;
 
 /**
- * <p>
- * 课程学科 服务类
- * </p>
- *
- * @author baomidou
- * @since 2023-09-02 04:52:58
- */
-public interface IBaseCourseSubjectService extends IService<BaseCourseSubject> {
+* @title: 课程学科
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
 
+public interface IBaseCourseSubjectService extends MPJBaseService<BaseCourseSubject> {
+    /**
+    * 新增
+    *
+    * @param baseCourseSubject
+    * @return
+    */
+    Boolean add(BaseCourseSubject baseCourseSubject);
+
+    /**
+    * 更新
+    *
+    * @param baseCourseSubject
+    * @return
+    */
+    Boolean update(BaseCourseSubject baseCourseSubject);
+
+    /**
+    * 删除
+    *
+    * @param ids
+    * @return
+    */
+    Boolean delete(List<Long> ids);
 }

+ 76 - 8
src/main/java/com/xjrsoft/module/base/service/impl/BaseCourseSubjectServiceImpl.java

@@ -1,20 +1,88 @@
 package com.xjrsoft.module.base.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.base.entity.CourseSubjectDetail;
+import com.xjrsoft.module.base.mapper.CourseSubjectDetailMapper;
 import com.xjrsoft.module.base.entity.BaseCourseSubject;
 import com.xjrsoft.module.base.mapper.BaseCourseSubjectMapper;
 import com.xjrsoft.module.base.service.IBaseCourseSubjectService;
+import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 
 /**
- * <p>
- * 课程学科 服务实现类
- * </p>
- *
- * @author baomidou
- * @since 2023-09-02 04:52:58
- */
+* @title: 课程学科
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
 @Service
-public class BaseCourseSubjectServiceImpl extends ServiceImpl<BaseCourseSubjectMapper, BaseCourseSubject> implements IBaseCourseSubjectService {
+@AllArgsConstructor
+public class BaseCourseSubjectServiceImpl extends MPJBaseServiceImpl<BaseCourseSubjectMapper, BaseCourseSubject> implements IBaseCourseSubjectService {
+    private final BaseCourseSubjectMapper baseCourseSubjectBaseCourseSubjectMapper;
 
+    private final CourseSubjectDetailMapper baseCourseSubjectCourseSubjectDetailMapper;
+
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean add(BaseCourseSubject baseCourseSubject) {
+        baseCourseSubjectBaseCourseSubjectMapper.insert(baseCourseSubject);
+        for (CourseSubjectDetail courseSubjectDetail : baseCourseSubject.getCourseSubjectDetailList()) {
+            courseSubjectDetail.setBaseCourseSubjectId(baseCourseSubject.getId());
+            baseCourseSubjectCourseSubjectDetailMapper.insert(courseSubjectDetail);
+        }
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean update(BaseCourseSubject baseCourseSubject) {
+        baseCourseSubjectBaseCourseSubjectMapper.updateById(baseCourseSubject);
+        //********************************* CourseSubjectDetail  增删改  开始 *******************************************/
+        {
+            // 查出所有子级的id
+            List<CourseSubjectDetail> courseSubjectDetailList = baseCourseSubjectCourseSubjectDetailMapper.selectList(Wrappers.lambdaQuery(CourseSubjectDetail.class).eq(CourseSubjectDetail::getBaseCourseSubjectId, baseCourseSubject.getId()).select(CourseSubjectDetail::getId));
+            List<Long> courseSubjectDetailIds = courseSubjectDetailList.stream().map(CourseSubjectDetail::getId).collect(Collectors.toList());
+            //原有子表单 没有被删除的主键
+            List<Long> courseSubjectDetailOldIds = baseCourseSubject.getCourseSubjectDetailList().stream().map(CourseSubjectDetail::getId).filter(Objects::nonNull).collect(Collectors.toList());
+            //找到需要删除的id
+            List<Long> courseSubjectDetailRemoveIds = courseSubjectDetailIds.stream().filter(item -> !courseSubjectDetailOldIds.contains(item)).collect(Collectors.toList());
+
+            for (CourseSubjectDetail courseSubjectDetail : baseCourseSubject.getCourseSubjectDetailList()) {
+                //如果不等于空则修改
+                if (courseSubjectDetail.getId() != null) {
+                    baseCourseSubjectCourseSubjectDetailMapper.updateById(courseSubjectDetail);
+                }
+                //如果等于空 则新增
+                else {
+                    //已经不存在的id 删除
+                    courseSubjectDetail.setBaseCourseSubjectId(baseCourseSubject.getId());
+                    baseCourseSubjectCourseSubjectDetailMapper.insert(courseSubjectDetail);
+                }
+            }
+            //已经不存在的id 删除
+            if(courseSubjectDetailRemoveIds.size() > 0){
+                baseCourseSubjectCourseSubjectDetailMapper.deleteBatchIds(courseSubjectDetailRemoveIds);
+            }
+        }
+        //********************************* CourseSubjectDetail  增删改  结束 *******************************************/
+
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delete(List<Long> ids) {
+        baseCourseSubjectBaseCourseSubjectMapper.deleteBatchIds(ids);
+        baseCourseSubjectCourseSubjectDetailMapper.delete(Wrappers.lambdaQuery(CourseSubjectDetail.class).in(CourseSubjectDetail::getBaseCourseSubjectId, ids));
+
+        return true;
+    }
 }

+ 104 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseCourseSubjectListVo.java

@@ -0,0 +1,104 @@
+package com.xjrsoft.module.base.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 课程学科列表列表入参
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
+@Data
+public class BaseCourseSubjectListVo {
+
+    /**
+    * 主键
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键")
+    @ApiModelProperty("主键")
+    private String id;
+    /**
+    * 创建人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建时间")
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改人")
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改时间")
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除标记")
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("有效标志")
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+    /**
+    * 课程学科名称
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("课程学科名称")
+    @ApiModelProperty("课程学科名称")
+    private String name;
+    /**
+    * 课程学科代码
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("课程学科代码")
+    @ApiModelProperty("课程学科代码")
+    private String code;
+    /**
+    * 备注
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("备注")
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 标签id(base_label)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("标签id(base_label)")
+    @ApiModelProperty("标签id(base_label)")
+    private Long baseLabelId;
+
+}

+ 104 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseCourseSubjectPageVo.java

@@ -0,0 +1,104 @@
+package com.xjrsoft.module.base.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 课程学科分页列表出参
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
+@Data
+public class BaseCourseSubjectPageVo {
+
+    /**
+    * 主键
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键")
+    @ApiModelProperty("主键")
+    private String id;
+    /**
+    * 创建人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建时间")
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改人")
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改时间")
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除标记")
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("有效标志")
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+    /**
+    * 课程学科名称
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("课程学科名称")
+    @ApiModelProperty("课程学科名称")
+    private String name;
+    /**
+    * 课程学科代码
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("课程学科代码")
+    @ApiModelProperty("课程学科代码")
+    private String code;
+    /**
+    * 备注
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("备注")
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 标签id(base_label)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("标签id(base_label)")
+    @ApiModelProperty("标签id(base_label)")
+    private Long baseLabelId;
+
+}

+ 55 - 0
src/main/java/com/xjrsoft/module/base/vo/BaseCourseSubjectVo.java

@@ -0,0 +1,55 @@
+package com.xjrsoft.module.base.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+import com.xjrsoft.module.base.entity.CourseSubjectDetail;
+
+/**
+* @title: 课程学科表单出参
+* @Author dzx
+* @Date: 2025-02-28
+* @Version 1.0
+*/
+@Data
+public class BaseCourseSubjectVo {
+
+    /**
+    * 主键
+    */
+    @ApiModelProperty("主键")
+    private Long id;
+    /**
+    * 课程学科名称
+    */
+    @ApiModelProperty("课程学科名称")
+    private String name;
+    /**
+    * 课程学科代码
+    */
+    @ApiModelProperty("课程学科代码")
+    private String code;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 标签id(base_label)
+    */
+    @ApiModelProperty("标签id(base_label)")
+    private Long baseLabelId;
+
+
+    /**
+    * courseSubjectDetail
+    */
+    @ApiModelProperty("courseSubjectDetail子表")
+    private List<CourseSubjectDetailVo> courseSubjectDetailList;
+
+}

+ 7 - 1
src/main/java/com/xjrsoft/module/base/vo/CourseSubjectDetailVo.java

@@ -3,10 +3,16 @@ package com.xjrsoft.module.base.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
 /**
 * @title: 课程学科管理详情表表单出参
 * @Author dzx
-* @Date: 2024-11-26
+* @Date: 2025-02-28
 * @Version 1.0
 */
 @Data

+ 7 - 4
src/main/java/com/xjrsoft/module/job/JianyuekbScheduleTask.java

@@ -4,6 +4,7 @@ import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fasterxml.jackson.core.type.TypeReference;
@@ -50,6 +51,7 @@ import com.xjrsoft.module.workflow.service.IWorkflowFormRelationService;
 import com.xjrsoft.module.workflow.service.IWorkflowRecordService;
 import lombok.extern.slf4j.Slf4j;
 import me.zhyd.oauth.log.Log;
+import org.apache.skywalking.apm.toolkit.trace.ActiveSpan;
 import org.camunda.bpm.engine.RuntimeService;
 import org.camunda.bpm.engine.TaskService;
 import org.camunda.bpm.engine.history.HistoricProcessInstance;
@@ -149,10 +151,10 @@ public class JianyuekbScheduleTask {
     }
     public void doExecute() {
         String active = SpringUtil.getActiveProfile();
-        if(!"prod".equals(active)){
-            log.info("非正式环境,无法执行获取课表数据");
-            return;
-        }
+//        if(!"prod".equals(active)){
+//            log.info("非正式环境,无法执行获取课表数据");
+//            return;
+//        }
         String sql = "SELECT * FROM course_receive_msg WHERE delete_mark = 0 AND is_callback IS NULL";
         List<Map<String, Object>> receiveMsgs = SqlRunnerAdapter.db().selectList(sql);
         if(receiveMsgs.isEmpty()){
@@ -290,6 +292,7 @@ public class JianyuekbScheduleTask {
     }
 
     void sendMsg(Set<String> techerIds, Long courseReceiveMsgId){
+        ActiveSpan.tag("params[ JianyuekbScheduleTaskSendMsg ]", "sendMsg");
         try {
             CourseReceiveMsg receiveMsg = receiveMsgService.getById(courseReceiveMsgId);
             JianyueData jianyueData = jianyueDataService.getOne(

+ 2 - 0
src/main/java/com/xjrsoft/module/student/service/IStudentChangeRecordService.java

@@ -27,4 +27,6 @@ public interface IStudentChangeRecordService extends MPJBaseService<StudentChang
 
     Page<StudentChangeRecordPageVo> getPage(Page<StudentChangeRecordPageVo> page, StudentChangeRecordPageDto dto);
 
+    Boolean insertDataByStudentUpdate(BaseStudentSchoolRoll beforeRoll, BaseStudentSchoolRoll afterRoll);
+
 }

+ 11 - 8
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentAssessmentInspectionServiceImpl.java

@@ -985,10 +985,6 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
 
             Set<String> categorys = savedDataList.stream().map(ImportBaseStudentAssessmentInspectionDto::getAssessmentCategory).collect(Collectors.toSet());
 
-            Set<String> projects = savedDataList.stream().map(ImportBaseStudentAssessmentInspectionDto::getAssessmentProject).collect(Collectors.toSet());
-
-            Set<String> items = savedDataList.stream().map(ImportBaseStudentAssessmentInspectionDto::getAssessmentItem).collect(Collectors.toSet());
-
             // 提取出所有身份证
             Set<String> credentialNumbers = savedDataList.stream().map(ImportBaseStudentAssessmentInspectionDto::getCredentialNumber).collect(Collectors.toSet());
 
@@ -1009,10 +1005,10 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
                             .eq(BaseStudentAssessmentProject::getDeleteMark, DeleteMark.NODELETE.getCode())
                             .eq(BaseStudentAssessmentProject::getEnabledMark, EnabledMark.ENABLED.getCode())
             );
-            Map<Long, Map<String, Long>> projectMap = projectList.stream().collect(
+            Map<Long, Map<String, BaseStudentAssessmentProject>> projectMap = projectList.stream().collect(
                     Collectors.groupingBy(
                             BaseStudentAssessmentProject::getBaseStudentAssessmentCategoryId,
-                            Collectors.toMap(BaseStudentAssessmentProject::getName, BaseStudentAssessmentProject::getId)
+                            Collectors.toMap(BaseStudentAssessmentProject::getName, x -> x)
                     )
             );
 
@@ -1081,12 +1077,19 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
                 data.setBaseStudentAssessmentItemId(itemGroup.get(dto.getAssessmentItem()));
 
 
-                Map<String, Long> projectGroup = projectMap.get(data.getBaseStudentAssessmentItemId());
+                Map<String, BaseStudentAssessmentProject> projectGroup = projectMap.get(data.getBaseStudentAssessmentItemId());
                 if(projectGroup == null || !projectGroup.containsKey(dto.getAssessmentProject())){
                     checkProjects.add("考核项目“" + dto.getAssessmentItem() + "”中不存在考核项“" + dto.getAssessmentProject() + "”" ) ;
                     continue;
                 }
-                data.setBaseStudentAssessmentProjectId(projectGroup.get(dto.getAssessmentProject()));
+                BaseStudentAssessmentProject project = projectGroup.get(dto.getAssessmentProject());
+                data.setBaseStudentAssessmentProjectId(project.getId());
+
+                if(project.getBasicPoints() > 0){
+                    data.setScoreType("score_add");
+                }else{
+                    data.setScoreType("score_minus");
+                }
 
                 data.setReason(dto.getReason());
                 data.setAssessmentUserId(StpUtil.getLoginIdAsLong());

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

@@ -5,8 +5,11 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.enums.ArchivesStatusEnum;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.GenderDictionaryEnum;
+import com.xjrsoft.common.enums.RollModalityEnum;
+import com.xjrsoft.common.enums.StudentChangeTypeEnum;
 import com.xjrsoft.common.enums.StudyStatusEnum;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.mapper.BaseClassMapper;
@@ -23,6 +26,7 @@ import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
 import com.xjrsoft.module.student.mapper.PbSemesterConfigMapper;
 import com.xjrsoft.module.student.mapper.PbVXsxxsfytbMapper;
 import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
+import com.xjrsoft.module.student.service.IStudentChangeRecordService;
 import com.xjrsoft.module.student.vo.BaseStudentInfoCategoryVo;
 import com.xjrsoft.module.student.vo.BaseStudentInfoDetailVo;
 import com.xjrsoft.module.student.vo.BaseStudentInfoPageDataVo;
@@ -54,6 +58,7 @@ public class BaseStudentSchoolRollServiceImpl extends MPJBaseServiceImpl<BaseStu
     private final PbSemesterConfigMapper pbSemesterConfigMapper;
     private final PbVXsxxsfytbMapper pbVXsxxsfytbMapper;
     private final UserMapper userMapper;
+    private final IStudentChangeRecordService recordService;
 
 
     @Override
@@ -102,6 +107,44 @@ public class BaseStudentSchoolRollServiceImpl extends MPJBaseServiceImpl<BaseStu
     @Override
     public Boolean updateInfo(UpdateBaseStudentInfoDto dto) {
         for (Long id : dto.getUserIds()) {
+            BaseStudentSchoolRoll schoolRoll = this.getOne(new QueryWrapper<BaseStudentSchoolRoll>().lambda().eq(BaseStudentSchoolRoll::getUserId, id));
+            if(!dto.getStduyStatus().equals(schoolRoll.getStduyStatus())){
+                recordService.insertData(
+                        StudyStatusEnum.fromCode(schoolRoll.getStduyStatus()),
+                        schoolRoll.getStduyStatus(),
+                        StudyStatusEnum.fromCode(dto.getStduyStatus()),
+                        dto.getStduyStatus(),
+                        id,
+                        StpUtil.getLoginIdAsLong(),
+                        StudentChangeTypeEnum.StduyStatus.getCode(),
+                        2
+                );
+            }
+            if(!dto.getRollModality().equals(schoolRoll.getLearnStatus())){
+                recordService.insertData(
+                        RollModalityEnum.fromCode(schoolRoll.getLearnStatus()),
+                        schoolRoll.getLearnStatus(),
+                        RollModalityEnum.fromCode(dto.getRollModality()),
+                        dto.getRollModality(),
+                        id,
+                        StpUtil.getLoginIdAsLong(),
+                        StudentChangeTypeEnum.LearnStatus.getCode(),
+                        2
+                );
+            }
+            if(schoolRoll.getArchivesStatus() != null && !schoolRoll.getArchivesStatus().equals(dto.getArchivesStatus())){
+                recordService.insertData(
+                        ArchivesStatusEnum.fromCode(schoolRoll.getArchivesStatus()),
+                        schoolRoll.getArchivesStatus(),
+                        ArchivesStatusEnum.fromCode(dto.getArchivesStatus()),
+                        dto.getArchivesStatus(),
+                        id,
+                        StpUtil.getLoginIdAsLong(),
+                        StudentChangeTypeEnum.ArchivesStatus.getCode(),
+                        2
+                );
+            }
+
             baseStudentSchoolRollMapper.updateInfoByUserId(dto, id);
         }
         return true;

+ 100 - 0
src/main/java/com/xjrsoft/module/student/service/impl/StudentChangeRecordServiceImpl.java

@@ -1,12 +1,17 @@
 package com.xjrsoft.module.student.service.impl;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.db.Entity;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.common.enums.ArchivesStatusEnum;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
+import com.xjrsoft.common.enums.LearnStatusEnum;
+import com.xjrsoft.common.enums.RollModalityEnum;
 import com.xjrsoft.common.enums.RoomApplicantTypeEnum;
 import com.xjrsoft.common.enums.StudentChangeTypeEnum;
+import com.xjrsoft.common.enums.StudentTypeEnum;
 import com.xjrsoft.common.enums.StudyStatusEnum;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.module.base.entity.BaseClass;
@@ -24,7 +29,9 @@ import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -163,4 +170,97 @@ public class StudentChangeRecordServiceImpl extends MPJBaseServiceImpl<StudentCh
         return this.baseMapper.getPage(page, dto);
     }
 
+    @Override
+    public Boolean insertDataByStudentUpdate(BaseStudentSchoolRoll beforeRoll, BaseStudentSchoolRoll afterRoll) {
+        List<StudentChangeRecord> insertList = new ArrayList<>();
+        if(!beforeRoll.getClassId().equals(afterRoll.getClassId())){
+            BaseClass afterClass = classService.getById(afterRoll.getClassId());
+            BaseClass beforeClass = classService.getById(beforeRoll.getClassId());
+
+            StudentChangeRecord record = new StudentChangeRecord() {{
+                setAfterData(afterClass.getName());
+                setAfterDataCode(afterClass.getId().toString());
+                setBeforeData(beforeClass.getName());
+                setBeforeDataCode(beforeClass.getId().toString());
+                setChangeType(StudentChangeTypeEnum.ChangeClass.getCode());
+                setUserId(beforeRoll.getUserId());
+                setCreateDate(new Date());
+                setDeleteMark(DeleteMark.NODELETE.getCode());
+                setEnabledMark(EnabledMark.ENABLED.getCode());
+                setCreateUserId(StpUtil.getLoginIdAsLong());
+                setOperateMode(2);
+            }};
+            insertList.add(record);
+        }
+
+        if(!beforeRoll.getArchivesStatus().equals(afterRoll.getArchivesStatus())){
+            StudentChangeRecord record = new StudentChangeRecord() {{
+                setAfterData(ArchivesStatusEnum.fromCode(afterRoll.getArchivesStatus()));
+                setAfterDataCode(afterRoll.getArchivesStatus());
+                setBeforeData(ArchivesStatusEnum.fromCode(beforeRoll.getArchivesStatus()));
+                setBeforeDataCode(beforeRoll.getArchivesStatus());
+                setChangeType(StudentChangeTypeEnum.ArchivesStatus.getCode());
+                setUserId(beforeRoll.getUserId());
+                setCreateDate(new Date());
+                setDeleteMark(DeleteMark.NODELETE.getCode());
+                setEnabledMark(EnabledMark.ENABLED.getCode());
+                setCreateUserId(StpUtil.getLoginIdAsLong());
+                setOperateMode(2);
+            }};
+            insertList.add(record);
+        }
+        if(!beforeRoll.getStudentType().equals(afterRoll.getStudentType())){
+            StudentChangeRecord record = new StudentChangeRecord() {{
+                setAfterData(StudentTypeEnum.fromCode(afterRoll.getStudentType()));
+                setAfterDataCode(afterRoll.getStudentType());
+                setBeforeData(StudentTypeEnum.fromCode(beforeRoll.getStudentType()));
+                setBeforeDataCode(beforeRoll.getStudentType());
+                setChangeType(StudentChangeTypeEnum.StudentType.getCode());
+                setUserId(beforeRoll.getUserId());
+                setCreateDate(new Date());
+                setDeleteMark(DeleteMark.NODELETE.getCode());
+                setEnabledMark(EnabledMark.ENABLED.getCode());
+                setCreateUserId(StpUtil.getLoginIdAsLong());
+                setOperateMode(2);
+            }};
+            insertList.add(record);
+        }
+
+        if(!beforeRoll.getStduyStatus().equals(afterRoll.getStduyStatus())){
+            StudentChangeRecord record = new StudentChangeRecord() {{
+                setAfterData(StudyStatusEnum.fromCode(afterRoll.getStduyStatus()));
+                setAfterDataCode(afterRoll.getStduyStatus());
+                setBeforeData(StudyStatusEnum.fromCode(beforeRoll.getStduyStatus()));
+                setBeforeDataCode(beforeRoll.getStduyStatus());
+                setChangeType(StudentChangeTypeEnum.StduyStatus.getCode());
+                setUserId(beforeRoll.getUserId());
+                setCreateDate(new Date());
+                setDeleteMark(DeleteMark.NODELETE.getCode());
+                setEnabledMark(EnabledMark.ENABLED.getCode());
+                setCreateUserId(StpUtil.getLoginIdAsLong());
+                setOperateMode(2);
+            }};
+            insertList.add(record);
+        }
+
+        if(!beforeRoll.getLearnStatus().equals(afterRoll.getLearnStatus())){
+            StudentChangeRecord record = new StudentChangeRecord() {{
+                setAfterData(RollModalityEnum.fromCode(afterRoll.getLearnStatus()));
+                setAfterDataCode(afterRoll.getLearnStatus());
+                setBeforeData(RollModalityEnum.fromCode(beforeRoll.getLearnStatus()));
+                setBeforeDataCode(beforeRoll.getLearnStatus());
+                setChangeType(StudentChangeTypeEnum.LearnStatus.getCode());
+                setUserId(beforeRoll.getUserId());
+                setCreateDate(new Date());
+                setDeleteMark(DeleteMark.NODELETE.getCode());
+                setEnabledMark(EnabledMark.ENABLED.getCode());
+                setCreateUserId(StpUtil.getLoginIdAsLong());
+                setOperateMode(2);
+            }};
+            insertList.add(record);
+        }
+
+        return this.saveBatch(insertList);
+    }
+
 }

+ 6 - 0
src/main/java/com/xjrsoft/module/student/service/impl/StudentManagerServiceImpl.java

@@ -63,6 +63,7 @@ import com.xjrsoft.module.student.service.IBaseStudentFamilyService;
 import com.xjrsoft.module.student.service.IBaseStudentSchoolRollService;
 import com.xjrsoft.module.student.service.IBaseStudentService;
 import com.xjrsoft.module.student.service.IBaseStudentSubsidizeService;
+import com.xjrsoft.module.student.service.IStudentChangeRecordService;
 import com.xjrsoft.module.student.service.IStudentManagerService;
 import com.xjrsoft.module.student.vo.BaseClassMajorSetVo;
 import com.xjrsoft.module.student.vo.BaseDepMajorGradeClassStudenTreeVo;
@@ -139,6 +140,8 @@ public class StudentManagerServiceImpl extends MPJBaseServiceImpl<BaseStudentUse
 
     private final IBaseGradeService baseGradeService;
     private IDictionarydetailService dictionarydetailService;
+    private final IStudentChangeRecordService recordService;
+
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -405,6 +408,9 @@ public class StudentManagerServiceImpl extends MPJBaseServiceImpl<BaseStudentUse
             for (BaseStudentSchoolRoll baseStudentSchoolRoll : baseStudentUser.getBaseStudentSchoolRollList()) {
                 //如果不等于空则修改
                 if (baseStudentSchoolRoll.getId() != null) {
+                    BaseStudentSchoolRoll beforeRoll = schoolRollService.getById(baseStudentSchoolRoll.getId());
+                    recordService.insertDataByStudentUpdate(beforeRoll, baseStudentSchoolRoll);
+
                     schoolRollService.updateById(baseStudentSchoolRoll);
                 }
                 //如果等于空 则新增

+ 7 - 0
src/main/java/com/xjrsoft/module/teacher/controller/TeacherAwardController.java

@@ -137,6 +137,12 @@ public class TeacherAwardController {
     @SaCheckPermission("teacheraward:detail")
     public ResponseEntity<byte[]> detailExportQuery(@Valid @RequestBody TeacherAwardDetailPageDto dto){
         try {
+            LocalDateTime createTimeStart = null;
+            LocalDateTime createTimeEnd = null;
+            if(ObjectUtil.isNotNull(dto.getCreateDateStart()) && ObjectUtil.isNotNull(dto.getCreateDateEnd())){
+                createTimeStart = dto.getCreateDateStart().atTime(0, 0, 0);
+                createTimeEnd = dto.getCreateDateEnd().atTime(23, 59, 59);
+            }
             MPJLambdaWrapper<TeacherAward> teacherAwardMPJLambdaWrapper = new MPJLambdaWrapper<>();
             teacherAwardMPJLambdaWrapper
                     .disableSubLogicDel()
@@ -153,6 +159,7 @@ public class TeacherAwardController {
                     .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName())
                     .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
                     .and((ObjectUtil.isNotNull(dto.getIssueDateStart()) && ObjectUtil.isNotNull(dto.getIssueDateEnd())), wq -> wq.between(TeacherAward::getAwardDate, dto.getIssueDateStart(), dto.getIssueDateEnd()).or().between(TeacherAward::getIssueDate, dto.getIssueDateStart(), dto.getIssueDateEnd()))
+                    .between((ObjectUtil.isNotNull(dto.getCreateDateStart()) && ObjectUtil.isNotNull(dto.getCreateDateEnd())),TeacherAward::getCreateDate, createTimeStart, createTimeEnd)
                     .orderByDesc(TeacherAward::getCreateDate)
             ;
             List<TeacherAwardDetailPageVo> list = teacherAwardService.selectJoinList(TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper);

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

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