Bläddra i källkod

更新学生成绩导入

Administrator 1 år sedan
förälder
incheckning
27cd390d27

+ 1 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/record/RecordLeaveController.java

@@ -32,7 +32,7 @@ import org.dromara.common.excel.utils.ExcelUtil;
 @Validated
 @RequiredArgsConstructor
 @RestController
-@RequestMapping("/record/Leave")
+@RequestMapping("/record/leave")
 public class RecordLeaveController extends BaseController {
 
     private final IRecordLeaveService recordLeaveService;

+ 21 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/score/ScoreDataController.java

@@ -6,10 +6,16 @@ import lombok.RequiredArgsConstructor;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.constraints.*;
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.dromara.common.excel.core.ExcelResult;
 import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.system.domain.score.ScoreData;
 import org.dromara.system.domain.score.bo.ScoreDataBo;
 import org.dromara.system.domain.score.vo.ScoreDataVo;
+import org.dromara.system.domain.vo.SysUserImportVo;
+import org.dromara.system.listener.ScoreDataListener;
+import org.dromara.system.listener.SysUserImportListener;
 import org.dromara.system.service.score.IScoreDataService;
+import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.dromara.common.idempotent.annotation.RepeatSubmit;
@@ -21,6 +27,7 @@ import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
 import org.dromara.common.log.enums.BusinessType;
 import org.dromara.common.excel.utils.ExcelUtil;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  * 成绩
@@ -31,7 +38,7 @@ import org.dromara.common.excel.utils.ExcelUtil;
 @Validated
 @RequiredArgsConstructor
 @RestController
-@RequestMapping("/score/score")
+@RequestMapping("/score/data")
 public class ScoreDataController extends BaseController {
 
     private final IScoreDataService scoreDataService;
@@ -56,6 +63,19 @@ public class ScoreDataController extends BaseController {
         ExcelUtil.exportExcel(list, "成绩", ScoreDataVo.class, response);
     }
 
+    /**
+     * 导入数据
+     *
+     * @param file          导入文件
+     * @param updateSupport 是否更新已存在数据
+     */
+    @SaCheckPermission("score:score:add")
+    @PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
+    public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
+        ExcelResult<ScoreDataVo> result = ExcelUtil.importExcel(file.getInputStream(), ScoreDataVo.class, new ScoreDataListener(updateSupport));
+        return R.ok(result.getAnalysis());
+    }
+
     /**
      * 获取成绩详细信息
      *

+ 18 - 18
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/notice/bo/XiaoyuanNoticeBo.java

@@ -23,109 +23,109 @@ public class XiaoyuanNoticeBo extends BaseEntity {
     /**
      * 新闻ID
      */
-    @NotNull(message = "新闻ID不能为空", groups = { EditGroup.class })
+    //@NotNull(message = "新闻ID不能为空", groups = { EditGroup.class })
     private Long noticeId;
 
     /**
      * 新闻缩略图
      */
-    @NotBlank(message = "新闻缩略图不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "新闻缩略图不能为空", groups = { AddGroup.class, EditGroup.class })
     private String image;
 
     /**
      * 新闻标题
      */
-    @NotBlank(message = "新闻标题不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "新闻标题不能为空", groups = { AddGroup.class, EditGroup.class })
     private String noticeTitle;
 
     /**
      * 新闻类型(1系统通知 2代办通知)
      */
-    @NotBlank(message = "新闻类型(1系统通知 2代办通知)不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "新闻类型(1系统通知 2代办通知)不能为空", groups = { AddGroup.class, EditGroup.class })
     private String noticeType;
 
     /**
      * 新闻内容
      */
-    @NotBlank(message = "新闻内容不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "新闻内容不能为空", groups = { AddGroup.class, EditGroup.class })
     private String noticeContent;
 
     /**
      * 新闻状态(0未读 1已读)
      */
-    @NotBlank(message = "新闻状态(0未读 1已读)不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "新闻状态(0未读 1已读)不能为空", groups = { AddGroup.class, EditGroup.class })
     private String status;
 
     /**
      * 隐私种类 0:全部 1:仅可见 2:仅不可见 3:仅自己
      */
-    @NotBlank(message = "隐私种类 0:全部 1:仅可见 2:仅不可见 3:仅自己不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "隐私种类 0:全部 1:仅可见 2:仅不可见 3:仅自己不能为空", groups = { AddGroup.class, EditGroup.class })
     private String type;
 
     /**
      * 可见班级id
      */
-    @NotBlank(message = "可见班级id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "可见班级id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String classIdKejian;
 
     /**
      * 不可见班级id
      */
-    @NotBlank(message = "不可见班级id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "不可见班级id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String classIdBukejian;
 
     /**
      * 发件人id
      */
-    @NotBlank(message = "发件人id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "发件人id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String senderId;
 
     /**
      * 发件人姓名
      */
-    @NotBlank(message = "发件人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "发件人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
     private String senderName;
 
     /**
      * 发件人班级id
      */
-    @NotBlank(message = "发件人班级id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "发件人班级id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String senderDept;
 
     /**
      * 备注
      */
-    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
     /**
      * 学校名称
      */
-    @NotBlank(message = "学校名称不能为空", groups = { AddGroup.class, EditGroup.class })
+   // @NotBlank(message = "学校名称不能为空", groups = { AddGroup.class, EditGroup.class })
     private String schoolName;
 
     /**
      * 头像地址
      */
-    @NotBlank(message = "头像地址不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "头像地址不能为空", groups = { AddGroup.class, EditGroup.class })
     private String avatar;
 
     /**
      * 评论
      */
-    @NotBlank(message = "评论不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "评论不能为空", groups = { AddGroup.class, EditGroup.class })
     private String comment;
 
     /**
      * 点赞
      */
-    @NotBlank(message = "点赞不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "点赞不能为空", groups = { AddGroup.class, EditGroup.class })
     private String prised;
 
     /**
      * 收藏
      */
-    @NotBlank(message = "收藏不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "收藏不能为空", groups = { AddGroup.class, EditGroup.class })
     private String collect;
 
 

+ 16 - 16
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/record/bo/RecordLeaveBo.java

@@ -26,97 +26,97 @@ public class RecordLeaveBo extends BaseEntity {
     /**
      *
      */
-    @NotNull(message = "不能为空", groups = { EditGroup.class })
+    //@NotNull(message = "不能为空", groups = { EditGroup.class })
     private Long id;
 
     /**
      * 类型 1:临时请假 2:事假
      */
-    @NotBlank(message = "类型 1:临时请假 2:事假不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "类型 1:临时请假 2:事假不能为空", groups = { AddGroup.class, EditGroup.class })
     private String type;
 
     /**
      * 请假开始时间
      */
-    @NotNull(message = "请假开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "请假开始时间不能为空", groups = { AddGroup.class, EditGroup.class })
     private Date startTime;
 
     /**
      * 请假结束时间
      */
-    @NotNull(message = "请假结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "请假结束时间不能为空", groups = { AddGroup.class, EditGroup.class })
     private Date endTime;
 
     /**
      * 请假理由
      */
-    @NotBlank(message = "请假理由不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "请假理由不能为空", groups = { AddGroup.class, EditGroup.class })
     private String reason;
 
     /**
      * 班级id
      */
-    @NotNull(message = "班级id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "班级id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String classId;
 
     /**
      * 班级名称
      */
-    @NotBlank(message = "班级名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "班级名称不能为空", groups = { AddGroup.class, EditGroup.class })
     private String className;
 
     /**
      * 请假人id
      */
-    @NotBlank(message = "请假人id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "请假人id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String absenteeId;
 
     /**
      * 请假人姓名
      */
-    @NotBlank(message = "请假人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "请假人姓名不能为空", groups = { AddGroup.class, EditGroup.class })
     private String absenteeName;
 
     /**
      * 审批人员id
      */
-    @NotNull(message = "审批人员id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "审批人员id不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long examinersId;
 
     /**
      * 审批人员姓名
      */
-    @NotBlank(message = "审批人员姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "审批人员姓名不能为空", groups = { AddGroup.class, EditGroup.class })
     private String examinersName;
 
     /**
      * 请假类别 1:病假,2:产假,3:陪产假,4:婚假,5:丧假,6:其他
      */
-    @NotBlank(message = "请假类别 1:病假,2:产假,3:陪产假,4:婚假,5:丧假,6:其他不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "请假类别 1:病假,2:产假,3:陪产假,4:婚假,5:丧假,6:其他不能为空", groups = { AddGroup.class, EditGroup.class })
     private String category;
 
     /**
      * 是否通过 0:未处理,1:不通过,2:通过
      */
-    @NotBlank(message = "是否通过 0:未处理,1:不通过,2:通过不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "是否通过 0:未处理,1:不通过,2:通过不能为空", groups = { AddGroup.class, EditGroup.class })
     private String isPass;
 
     /**
      * 图片地址
      */
-    @NotBlank(message = "图片地址不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "图片地址不能为空", groups = { AddGroup.class, EditGroup.class })
     private String photo;
 
     /**
      * 提交时间
      */
-    @NotNull(message = "提交时间不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "提交时间不能为空", groups = { AddGroup.class, EditGroup.class })
     private Date submitTime;
 
     /**
      * 备注
      */
-    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
 

+ 11 - 8
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/score/bo/ScoreDataBo.java

@@ -8,6 +8,8 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
 import java.util.Date;
+import java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import org.dromara.system.domain.score.ScoreData;
 
@@ -25,50 +27,51 @@ public class ScoreDataBo extends BaseEntity {
     /**
      * 考试id
      */
-    @NotNull(message = "考试id不能为空", groups = { EditGroup.class })
+    //@NotNull(message = "考试id不能为空", groups = { EditGroup.class })
     private Long scoreId;
 
     /**
      * 考试名称
      */
-    @NotBlank(message = "考试名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "考试名称不能为空", groups = { AddGroup.class, EditGroup.class })
     private String scoreTitle;
 
     /**
      * 考试时间
      */
-    @NotNull(message = "考试时间不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "考试时间不能为空", groups = { AddGroup.class, EditGroup.class })
     private Date scoreTime;
 
     /**
      * 接收班级id
      */
-    @NotBlank(message = "接收班级id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "接收班级id不能为空", groups = { AddGroup.class, EditGroup.class })
     private String scoreClassId;
 
     /**
      * 接收班级名称
      */
-    @NotBlank(message = "接收班级名称不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "接收班级名称不能为空", groups = { AddGroup.class, EditGroup.class })
     private String scoreClassName;
 
     /**
      * 隐私设置 1:仅自己 2:仅本班 3:全部
      */
-    @NotBlank(message = "隐私设置 1:仅自己 2:仅本班 3:全部不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "隐私设置 1:仅自己 2:仅本班 3:全部不能为空", groups = { AddGroup.class, EditGroup.class })
     private String privacyType;
 
     /**
      * 备注
      */
-    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
     /**
      * 班级平均分
      */
-    @NotBlank(message = "班级平均分不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "班级平均分不能为空", groups = { AddGroup.class, EditGroup.class })
     private String avg;
 
+    private List<ScoreDataStudentBo> scoreDataStudentBoList;
 
 }

+ 15 - 13
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/score/bo/ScoreDataDetailBo.java

@@ -1,6 +1,5 @@
 package org.dromara.system.domain.score.bo;
 
-import org.dromara.system.domain.ScoreDataDetail;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
@@ -8,6 +7,9 @@ import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
+import org.dromara.system.domain.score.ScoreDataDetail;
+
+import java.util.List;
 
 /**
  * 成绩_成绩详情id业务对象 score_data_detail
@@ -23,56 +25,56 @@ public class ScoreDataDetailBo extends BaseEntity {
     /**
      * 成绩表_成绩详情id
      */
-    @NotNull(message = "成绩表_成绩详情id不能为空", groups = { EditGroup.class })
+
     private Long scoreDetailId;
 
     /**
      * 成绩表id
      */
-    @NotNull(message = "成绩表id不能为空", groups = { AddGroup.class, EditGroup.class })
+
     private Long scoreId;
 
     /**
      * 排序
      */
-    @NotBlank(message = "排序不能为空", groups = { AddGroup.class, EditGroup.class })
+
     private String scoreSort;
 
     /**
      * 姓名
      */
-    @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+
     private String scoreDataName;
 
     /**
      * 学生姓名id
      */
-    @NotNull(message = "学生姓名id不能为空", groups = { AddGroup.class, EditGroup.class })
+
     private Long scoreDataNameId;
 
     /**
      * 学科
      */
-    @NotBlank(message = "学科不能为空", groups = { AddGroup.class, EditGroup.class })
+
     private String xueke;
 
     /**
      * 成绩
      */
-    @NotBlank(message = "成绩不能为空", groups = { AddGroup.class, EditGroup.class })
-    private String score;
+    //@NotBlank(message = "成绩不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long score;
 
     /**
      * 满分
      */
-    @NotBlank(message = "满分不能为空", groups = { AddGroup.class, EditGroup.class })
-    private String manfen;
+    //@NotBlank(message = "满分不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long manfen;
 
     /**
      * 备注
      */
-    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
-
+    private List<ScoreDataStudentBo> scoreDataStudentBoList;
 }

+ 14 - 12
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/score/bo/ScoreDataStudentBo.java

@@ -1,6 +1,5 @@
 package org.dromara.system.domain.score.bo;
 
-import org.dromara.system.domain.ScoreDataStudent;
 import org.dromara.common.mybatis.core.domain.BaseEntity;
 import org.dromara.common.core.validate.AddGroup;
 import org.dromara.common.core.validate.EditGroup;
@@ -8,6 +7,9 @@ import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import jakarta.validation.constraints.*;
+import org.dromara.system.domain.score.ScoreDataStudent;
+
+import java.util.List;
 
 /**
  * 成绩_子学生id业务对象 score_data_student
@@ -23,56 +25,56 @@ public class ScoreDataStudentBo extends BaseEntity {
     /**
      * 成绩表_子表学生id
      */
-    @NotNull(message = "成绩表_子表学生id不能为空", groups = { EditGroup.class })
+    //@NotNull(message = "成绩表_子表学生id不能为空", groups = { EditGroup.class })
     private Long scoreStudentId;
 
     /**
      * 成绩表id
      */
-    @NotNull(message = "成绩表id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "成绩表id不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long scoreId;
 
     /**
      * 排序
      */
-    @NotBlank(message = "排序不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "排序不能为空", groups = { AddGroup.class, EditGroup.class })
     private String scoreSort;
 
     /**
      * 姓名
      */
-    @NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "姓名不能为空", groups = { AddGroup.class, EditGroup.class })
     private String scoreDataName;
 
     /**
      * 学生姓名id
      */
-    @NotNull(message = "学生姓名id不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotNull(message = "学生姓名id不能为空", groups = { AddGroup.class, EditGroup.class })
     private Long scoreDataNameId;
 
     /**
      * 总分
      */
-    @NotBlank(message = "总分不能为空", groups = { AddGroup.class, EditGroup.class })
-    private String zongfen;
+    //@NotBlank(message = "总分不能为空", groups = { AddGroup.class, EditGroup.class })
+    private Long zongfen;
 
     /**
      * 平均分
      */
-    @NotBlank(message = "平均分不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "平均分不能为空", groups = { AddGroup.class, EditGroup.class })
     private String avg;
 
     /**
      * 是否查看 N:否 Y:是
      */
-    @NotBlank(message = "是否查看 N:否 Y:是不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "是否查看 N:否 Y:是不能为空", groups = { AddGroup.class, EditGroup.class })
     private String detailsType;
 
     /**
      * 备注
      */
-    @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
+    //@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
     private String remark;
 
-
+    private List<ScoreDataDetailBo> scoreDataDetailBoList;
 }

+ 4 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/score/vo/ScoreDataStudentVo.java

@@ -6,8 +6,11 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import org.dromara.system.domain.score.ScoreDataStudent;
+import org.dromara.system.domain.score.bo.ScoreDataDetailBo;
+
 import java.io.Serial;
 import java.io.Serializable;
+import java.util.List;
 
 
 /**
@@ -78,5 +81,5 @@ public class ScoreDataStudentVo implements Serializable {
     @ExcelProperty(value = "备注")
     private String remark;
 
-
+    private List<ScoreDataDetailVo> scoreDataDetailVoList;
 }

+ 4 - 2
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/score/vo/ScoreDataVo.java

@@ -6,9 +6,11 @@ import com.alibaba.excel.annotation.ExcelProperty;
 import io.github.linpeilie.annotations.AutoMapper;
 import lombok.Data;
 import org.dromara.system.domain.score.ScoreData;
+import org.dromara.system.domain.score.bo.ScoreDataStudentBo;
+
 import java.io.Serial;
 import java.io.Serializable;
-
+import java.util.List;
 
 
 /**
@@ -73,5 +75,5 @@ public class ScoreDataVo implements Serializable {
     @ExcelProperty(value = "班级平均分")
     private String avg;
 
-
+    private List<ScoreDataStudentVo> scoreDataStudentVoList;
 }

+ 88 - 0
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/listener/ScoreDataListener.java

@@ -0,0 +1,88 @@
+package org.dromara.system.listener;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.crypto.digest.BCrypt;
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.exception.ServiceException;
+import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.common.core.utils.ValidatorUtils;
+import org.dromara.common.excel.core.ExcelListener;
+import org.dromara.common.excel.core.ExcelResult;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.system.domain.bo.SysUserBo;
+import org.dromara.system.domain.score.bo.ScoreDataBo;
+import org.dromara.system.domain.score.vo.ScoreDataVo;
+import org.dromara.system.domain.vo.SysUserImportVo;
+import org.dromara.system.domain.vo.SysUserVo;
+import org.dromara.system.service.ISysConfigService;
+import org.dromara.system.service.ISysUserService;
+import org.dromara.system.service.score.IScoreDataService;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.List;
+
+/**
+ * 学生成绩自定义导入
+ *
+ * @author Lion Li
+ */
+@Slf4j
+public class ScoreDataListener extends AnalysisEventListener<ScoreDataVo> implements ExcelListener<ScoreDataVo> {
+
+    private IScoreDataService scoreDataService;
+
+
+    private int successNum = 0;
+    private int failureNum = 0;
+    private final StringBuilder successMsg = new StringBuilder();
+    private final StringBuilder failureMsg = new StringBuilder();
+
+    /**
+     * 是否更新已存在的数据
+     * @param isUpdateSupport
+     */
+    public ScoreDataListener(Boolean isUpdateSupport) {
+
+    }
+
+    @Override
+    public void invoke(ScoreDataVo scoreDataVo, AnalysisContext context) {
+        ScoreDataBo scoreData = BeanUtil.toBean(scoreDataVo, ScoreDataBo.class);
+        scoreDataService.insertByBo(scoreData);
+    }
+
+    @Override
+    public void doAfterAllAnalysed(AnalysisContext context) {
+
+    }
+
+    @Override
+    public ExcelResult<ScoreDataVo> getExcelResult() {
+        return new ExcelResult<>() {
+
+            @Override
+            public String getAnalysis() {
+                if (failureNum > 0) {
+                    failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
+                    throw new ServiceException(failureMsg.toString());
+                } else {
+                    successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条");
+                }
+                return successMsg.toString();
+            }
+
+            @Override
+            public List<ScoreDataVo> getList() {
+                return null;
+            }
+
+            @Override
+            public List<String> getErrorList() {
+                return null;
+            }
+        };
+    }
+}

+ 31 - 1
ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/score/ScoreDataServiceImpl.java

@@ -9,9 +9,15 @@ import org.dromara.common.mybatis.core.page.PageQuery;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import lombok.RequiredArgsConstructor;
 import org.dromara.system.domain.score.ScoreData;
+import org.dromara.system.domain.score.ScoreDataDetail;
+import org.dromara.system.domain.score.ScoreDataStudent;
 import org.dromara.system.domain.score.bo.ScoreDataBo;
+import org.dromara.system.domain.score.bo.ScoreDataDetailBo;
+import org.dromara.system.domain.score.bo.ScoreDataStudentBo;
 import org.dromara.system.domain.score.vo.ScoreDataVo;
+import org.dromara.system.mapper.score.ScoreDataDetailMapper;
 import org.dromara.system.mapper.score.ScoreDataMapper;
+import org.dromara.system.mapper.score.ScoreDataStudentMapper;
 import org.dromara.system.service.score.IScoreDataService;
 import org.springframework.stereotype.Service;
 
@@ -30,6 +36,8 @@ import java.util.Collection;
 public class ScoreDataServiceImpl implements IScoreDataService {
 
     private final ScoreDataMapper baseMapper;
+    private final ScoreDataStudentMapper scoreDataStudentMapper;
+    private final ScoreDataDetailMapper scoreDataDetailMapper;
 
     /**
      * 查询成绩
@@ -75,8 +83,30 @@ public class ScoreDataServiceImpl implements IScoreDataService {
      */
     @Override
     public Boolean insertByBo(ScoreDataBo bo) {
+        //从考试信息中获取所有学生信息,在获取该学生所有考试成绩
+        List<ScoreDataStudentBo> scoreDataStudentBoList = bo.getScoreDataStudentBoList();
+        if (scoreDataStudentBoList != null && scoreDataStudentBoList.size() > 0){
+            for (ScoreDataStudentBo scoreDataStudentBo : scoreDataStudentBoList) {
+                List<ScoreDataDetailBo> scoreDataDetailBoList = scoreDataStudentBo.getScoreDataDetailBoList();
+                if (scoreDataDetailBoList != null && scoreDataDetailBoList.size() > 0){
+                    Long zf = 0L;
+                    //计算总分
+                    for (ScoreDataDetailBo scoreDataDetailBo : scoreDataDetailBoList) {
+                        //总分 = 总分 + 单科成绩
+                        zf = zf + scoreDataDetailBo.getScore();
+                        ScoreDataDetail scoreDataDetail = MapstructUtils.convert(scoreDataDetailBo, ScoreDataDetail.class);
+                        scoreDataDetailMapper.insert(scoreDataDetail);
+                    }
+                    scoreDataStudentBo.setZongfen(zf);
+                    //计算平均分 = 总分/学科数
+                    scoreDataStudentBo.setAvg(String.valueOf(zf/scoreDataDetailBoList.size()));
+                    ScoreDataStudent scoreDataStudent = MapstructUtils.convert(scoreDataStudentBo, org.dromara.system.domain.score.ScoreDataStudent.class);
+                    scoreDataStudentMapper.insert(scoreDataStudent);
+                }
+            }
+        }
         ScoreData add = MapstructUtils.convert(bo, ScoreData.class);
-        validEntityBeforeSave(add);
+        //validEntityBeforeSave(add);
         boolean flag = baseMapper.insert(add) > 0;
         if (flag) {
             bo.setScoreId(add.getScoreId());