瀏覽代碼

央美附中

haogh 7 月之前
父節點
當前提交
5340b314fd

二進制
WebRoot/template/模版-附中成绩导入.xls


+ 36 - 0
sql/fz-update.sql

@@ -37,5 +37,41 @@ ALTER TABLE `std_reg`
 update cf_enrol_param set param_value='InActive' where param_name='EnrolVerifyNoCrownWithPayed';
 
 
+-- 2024-10-29
+DELETE FROM frame_report WHERE report_name='ScoreOriginalSubject';
+INSERT INTO  `frame_report`(`REPORT_NAME`, `REPORT_ALIAS`, `RES_ID`, `REPORT_SQL`, `REPORT_PARAM`, `REPORT_PARAM_FLAG`, `REPORT_SUFFIX`, `INDEX_FLAG`, `UPDATE_TIME`, `MAX_SIZE`, `CURRENT_SIZE`)
+VALUES ('ScoreOriginalSubject', '原始分汇总表', NULL, 'SELECT r.std_name, t.ticket_no, t.subject_name, t.real_exam_seq, t.max_score, t.min_score, t.total_score, t.subject_score, t.jn01, t.jn02, t.jn03, t.jn04, t.jn05, t.jn06, t.jn07, t.js01, t.js02, t.js03, t.js04, t.js05, t.js06, t.js07 FROM sc_std_subject t, std_reg r WHERE t.std_id = r.std_id AND (t.subject_id = ? OR 1 = ?) ORDER BY t.std_id, t.subject_id, t.room_id', 'subject_id?', NULL, 'LocalDate', 'Active', NULL, NULL, NULL);
 
+DROP TABLE IF EXISTS `fz_score`;
+CREATE TABLE `fz_score`
+(
+    `id`          int(0)                                                       NOT NULL AUTO_INCREMENT COMMENT '主键',
+    `std_name`    varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
+    `cert_id`     varchar(18) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
+    `ticket_no`   varchar(16) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
+    `aspect_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
+    `std_id`      int(0)                                                       NOT NULL,
+    `subj_zxjc`   varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '造型基础',
+    `subj_mtcz`   varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命题创作',
+    `subj_zhsy`   varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '综合素养考核',
+    `face_score`  varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '现场考核',
+    `total_score` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '总分',
+    `qualified`   varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci  NULL DEFAULT NULL COMMENT '是否合格',
+    PRIMARY KEY (`id`) USING BTREE,
+    UNIQUE INDEX `IDX_01` (`aspect_name`, `std_id`) USING BTREE
+) ENGINE = InnoDB
+  CHARACTER SET = utf8mb4
+  COLLATE = utf8mb4_general_ci
+  ROW_FORMAT = Dynamic;
 
+INSERT INTO `frame_report`(`REPORT_NAME`, `REPORT_ALIAS`, `RES_ID`, `REPORT_SQL`, `REPORT_PARAM`, `REPORT_PARAM_FLAG`, `REPORT_SUFFIX`, `INDEX_FLAG`, `UPDATE_TIME`, `MAX_SIZE`, `CURRENT_SIZE`) VALUES ('YmfzScoreExport', '附中成绩导出', NULL, 'select * from fz_score order by ticket_no', NULL, NULL, 'LocalDateTime', 'Active', NULL, NULL, NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 1, 'std_name', 20, '考生姓名', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 2, 'cert_id', 20, '证件号码', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 3, 'ticket_no', 20, '准考证号', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 4, 'aspect_name', 20, '报考专业', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 5, 'subj_zxjc', 20, '造型基础', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 6, 'subj_mtcz', 20, '命题创作', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 7, 'subj_zhsy', 20, '综合素养考核', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 8, 'face_score', 20, '现场考核', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 9, 'total_score', 20, '总分', 'java.lang.String', 'Active', NULL);
+INSERT INTO `frame_report_detail`(`REPORT_NAME`, `FIELD_ORDER`, `FIELD_NAME`, `FIELD_LENGTH`, `FIELD_TEXT`, `FIELD_DATE_TYPE`, `FIELD_STATUS`, `DICT_NAME`) VALUES ('YmfzScoreExport', 10, 'qualified', 20, '是否合格', 'java.lang.String', 'Active', NULL);

+ 3 - 1
src/cn/hmsoft/art/constants/ArtOptrLogType.java

@@ -117,7 +117,9 @@ public enum ArtOptrLogType {
 	EXSUBJECTSCORE_DELETE("删除科目评分区间"),
 	
 	WISHPLAN_IMPORT("导入录取计划"),
-	CLEAN_DATA("清空测试数据");
+	CLEAN_DATA("清空测试数据"),
+
+	IMPORT_SCORE("成绩导入");
 	
 	private String value;
 

+ 50 - 0
src/cn/hmsoft/art/control/score/FzScoreControl.java

@@ -0,0 +1,50 @@
+package cn.hmsoft.art.control.score;
+
+import cn.hmsoft.application.web.Ajax;
+import cn.hmsoft.art.control.ArtControl;
+import cn.hmsoft.art.service.score.FzScoreService;
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.helper.excel.ExcelReaderHelper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * @Description 管理端 附中成绩查询
+ */
+@RestController
+public class FzScoreControl extends ArtControl {
+
+    @Autowired
+    private FzScoreService fzScoreService;
+
+    @RequestMapping("fz/score/page")
+    public Ajax page(String query, Integer limit, Integer start, String order, String type) {
+        if (StringHelper.isEmpty(order))
+            order = "ticket_no";
+        return new Ajax(fzScoreService.pageScore(start, limit, query, getQueryOrder(order, type)));
+    }
+
+    /***
+     *  附中成绩导入
+     * @param file excel文件
+     * @return 成功、失败
+     * @throws Exception 异常
+     */
+    @CrossOrigin
+    @RequestMapping("fz/score/upload")
+    public Ajax upload(MultipartFile file) throws Exception {
+        List<List<String>> values = ExcelReaderHelper.readSheet(Objects.requireNonNull(file.getOriginalFilename()), file.getInputStream(), 1,
+                9);
+        FrameOptr frameOptr = this.getFrameOptr();
+        fzScoreService.upload(frameOptr, values);
+        return new Ajax();
+    }
+
+}

+ 33 - 0
src/cn/hmsoft/art/data/dao/score/FzScoreDao.java

@@ -0,0 +1,33 @@
+package cn.hmsoft.art.data.dao.score;
+
+import cn.hmsoft.art.data.model.score.FzScore;
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.core.PlatformDaoSupport;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public class FzScoreDao extends PlatformDaoSupport<FzScore> {
+
+    public Pager pageScore(Integer start, Integer limit, String query, QueryOrder queryOrder) {
+        StringBuilder sql = new StringBuilder();
+        sql.append("select * from fz_score where 1=1 ");
+        if (StringHelper.isEmpty(query)) {
+            return this.pageMapBySql(queryOrder, start, limit, sql.toString());
+        }
+        String likeParameter = this.generateLikeParamter(query);
+        sql.append(" and (std_name like ? or cert_id = ? or ticket_no = ? )");
+        return this.pageMapBySql(queryOrder, start, limit, sql.toString(), likeParameter, query, query);
+    }
+
+    public FzScore findScore(Integer stdId, String aspectName) {
+        String sql = "select * from fz_score where std_id=? and aspect_name=? ";
+        return this.findBySql(sql, stdId, aspectName);
+    }
+
+    public void updateTotalScore() {
+        String sql = "update fz_score set total_score=ROUND(subj_zxjc+subj_mtcz+subj_zhsy+face_score,2) ";
+        this.updateBySql(sql);
+    }
+}

+ 5 - 0
src/cn/hmsoft/art/data/dao/std/StdRegDao.java

@@ -358,5 +358,10 @@ public class StdRegDao extends PlatformDaoSupport<StdReg> {
 		String sql = "select std_id,cert_id,std_name from std_reg where cert_id=? and std_name=? ";
 		return this.findBySql(sql, cert_id, std_name);
 	}
+
+	public StdReg findStdRegByCertAndTicketNo(String cert_id, String std_name, String ticket_no) {
+		String sql = "select r.std_id,r.cert_id,r.std_name from std_reg r,ly_std_ticket t where r.std_id=t.std_id and r.cert_id=? and r.std_name=? and t.ticket_no=? ";
+		return this.findBySql(sql, cert_id, std_name, ticket_no);
+	}
 	
 }

+ 146 - 0
src/cn/hmsoft/art/data/model/score/FzScore.java

@@ -0,0 +1,146 @@
+package cn.hmsoft.art.data.model.score;
+
+import cn.hmsoft.jdbc.entity.Table;
+
+import java.io.Serializable;
+
+/**
+ * @Description 附中成绩表
+ */
+@Table(tableName = "FZ_SCORE", keyColumn = "ID", sequenceName = "")
+public class FzScore implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    // ID
+    private String id;
+
+    // 考生姓名
+    private String std_name;
+
+    // 证件号码
+    private String cert_id;
+
+    // 准考证号
+    private String ticket_no;
+
+    // 专业
+    private String aspect_name;
+
+    // 考生ID
+    private Integer std_id;
+
+    // 造型基础
+    private String subj_zxjc;
+
+    // 命题创作
+    private String subj_mtcz;
+
+    // 综合素养考核
+    private String subj_zhsy;
+
+    // 现场考核
+    private String face_score;
+
+    // 总分
+    private String total_score;
+
+    //是否合格
+    private String qualified;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getStd_name() {
+        return std_name;
+    }
+
+    public void setStd_name(String std_name) {
+        this.std_name = std_name;
+    }
+
+    public String getCert_id() {
+        return cert_id;
+    }
+
+    public void setCert_id(String cert_id) {
+        this.cert_id = cert_id;
+    }
+
+    public String getTicket_no() {
+        return ticket_no;
+    }
+
+    public void setTicket_no(String ticket_no) {
+        this.ticket_no = ticket_no;
+    }
+
+    public String getAspect_name() {
+        return aspect_name;
+    }
+
+    public void setAspect_name(String aspect_name) {
+        this.aspect_name = aspect_name;
+    }
+
+    public Integer getStd_id() {
+        return std_id;
+    }
+
+    public void setStd_id(Integer std_id) {
+        this.std_id = std_id;
+    }
+
+    public String getSubj_zxjc() {
+        return subj_zxjc;
+    }
+
+    public void setSubj_zxjc(String subj_zxjc) {
+        this.subj_zxjc = subj_zxjc;
+    }
+
+    public String getSubj_mtcz() {
+        return subj_mtcz;
+    }
+
+    public void setSubj_mtcz(String subj_mtcz) {
+        this.subj_mtcz = subj_mtcz;
+    }
+
+    public String getSubj_zhsy() {
+        return subj_zhsy;
+    }
+
+    public void setSubj_zhsy(String subj_zhsy) {
+        this.subj_zhsy = subj_zhsy;
+    }
+
+    public String getFace_score() {
+        return face_score;
+    }
+
+    public void setFace_score(String face_score) {
+        this.face_score = face_score;
+    }
+
+    public String getTotal_score() {
+        return total_score;
+    }
+
+    public void setTotal_score(String total_score) {
+        this.total_score = total_score;
+    }
+
+    public String getQualified() {
+        return qualified;
+    }
+
+    public void setQualified(String qualified) {
+        this.qualified = qualified;
+    }
+}

+ 184 - 0
src/cn/hmsoft/art/service/score/FzScoreService.java

@@ -0,0 +1,184 @@
+package cn.hmsoft.art.service.score;
+
+import cn.hmsoft.art.constants.ArtOptrLogType;
+import cn.hmsoft.art.data.dao.score.FzScoreDao;
+import cn.hmsoft.art.data.dao.std.StdEnrolDao;
+import cn.hmsoft.art.data.dao.std.StdRegDao;
+import cn.hmsoft.art.data.model.score.FzScore;
+import cn.hmsoft.art.data.model.std.StdEnrol;
+import cn.hmsoft.art.data.model.std.StdReg;
+import cn.hmsoft.art.service.ArtService;
+import cn.hmsoft.frame.data.dao.FrameOptrLogDao;
+import cn.hmsoft.frame.data.model.FrameOptr;
+import cn.hmsoft.frame.data.model.FrameOptrLog;
+import cn.hmsoft.frame.exception.BusinessException;
+import cn.hmsoft.helper.CollectionHelper;
+import cn.hmsoft.helper.StringHelper;
+import cn.hmsoft.jdbc.entity.Pager;
+import cn.hmsoft.jdbc.entity.QueryOrder;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class FzScoreService extends ArtService {
+
+    @Autowired
+    private FzScoreDao fzScoreDao;
+
+    @Autowired
+    private StdRegDao stdRegDao;
+
+    @Autowired
+    private StdEnrolDao stdEnrolDao;
+
+    @Autowired
+    private FrameOptrLogDao LogDao;
+
+    public Pager pageScore(Integer start, Integer limit, String query, QueryOrder queryOrder) {
+        return fzScoreDao.pageScore(start, limit, query, queryOrder);
+    }
+
+    @Transactional
+    public void upload(FrameOptr frameOptr, List<List<String>> values) {
+        List<FzScore> scoreList = new ArrayList<>(values.size());
+        int row = 2;
+        for (List<String> list : values) {
+            String ticket_no = list.get(0) == null ? null : list.get(0).trim();
+            String std_name = list.get(1) == null ? null : list.get(1).trim();
+            String cert_id = list.get(2) == null ? null : list.get(2).trim();
+            String aspect_name = list.get(3) == null ? null : list.get(3).trim();
+            //造型艺术
+            String subj_zxjc = list.get(4) == null ? null : list.get(4).trim();
+            // 命题创作
+            String subj_mtcz = list.get(5) == null ? null : list.get(5).trim();
+            // 在校一贯表现
+            String subj_zhsy = list.get(6) == null ? null : list.get(6).trim();
+            // 现场考核成绩
+            String face_score = list.get(7) == null ? null : list.get(7).trim();
+            // 是否合格
+            String qualified = list.get(8) == null ? null : list.get(8).trim();
+
+            FzScore fzScore = new FzScore();
+
+            if (StringHelper.isEmpty(ticket_no)) {
+                throw new BusinessException("第【" + row + "】行,准考证号不能为空");
+            }
+
+            if (StringHelper.isEmpty(std_name)) {
+                throw new BusinessException("第【" + row + "】行,考生姓名不能为空");
+            }
+
+            if (StringHelper.isEmpty(cert_id)) {
+                throw new BusinessException("第【" + row + "】行,证件号码不能为空");
+            }
+            //考生是否存在
+            StdReg reg = stdRegDao.findStdRegByCertAndTicketNo(cert_id, std_name, ticket_no);
+            if (reg == null) {
+                throw new BusinessException("第【" + row + "】行,考生信息错误");
+            }
+
+            if (StringHelper.isEmpty(aspect_name)) {
+                throw new BusinessException("第【" + row + "】行,专业名称不能为空");
+            }
+
+            //考生是否存在报考专业
+            List<StdEnrol> stdEnrolList = stdEnrolDao.list("std_id", reg.getStd_id());
+            if (CollectionHelper.isEmpty(stdEnrolList)) {
+                throw new BusinessException("第【" + row + "】行,考生未报考任何专业");
+            }
+
+            //考生是否报考该专业
+            boolean flag = stdEnrolList.stream().anyMatch(item -> aspect_name.equals(item.getAspect_name()));
+            if (!flag) {
+                throw new BusinessException("第【" + row + "】行,考生未报考该专业");
+            }
+
+            // 造型基础成绩
+            if (StringHelper.isEmpty(subj_zxjc)) {
+                subj_zxjc = "0";
+            }
+            try {
+                double zxjcScore = Double.parseDouble(subj_zxjc);
+                fzScore.setSubj_zxjc(Double.toString(zxjcScore));
+            } catch (Exception e) {
+                throw new BusinessException("第【" + row + "】行,成绩格式错误");
+            }
+
+            // 命题创作成绩
+            if (StringHelper.isEmpty(subj_mtcz)) {
+                subj_mtcz = "0";
+            }
+            try {
+                double mtczScore = Double.parseDouble(subj_mtcz);
+                fzScore.setSubj_mtcz(Double.toString(mtczScore));
+            } catch (Exception e) {
+                throw new BusinessException("第【" + row + "】行,成绩格式错误");
+            }
+
+            // 在校一贯表现
+            if (StringHelper.isEmpty(subj_zhsy)) {
+                subj_zhsy = "0";
+            }
+            try {
+                int zhsyScore = Integer.parseInt(subj_zhsy);
+                fzScore.setSubj_zhsy(Integer.toString(zhsyScore));
+            } catch (Exception e) {
+                throw new BusinessException("第【" + row + "】行,成绩格式错误");
+            }
+
+            // 现场考核成绩
+            if (StringHelper.isEmpty(face_score)) {
+                face_score = "0";
+            }
+            try {
+                double faceScore = Double.parseDouble(face_score);
+                fzScore.setFace_score(Double.toString(faceScore));
+            } catch (Exception e) {
+                throw new BusinessException("第【" + row + "】行,成绩格式错误");
+            }
+
+            fzScore.setStd_name(std_name);
+            fzScore.setCert_id(cert_id);
+            fzScore.setTicket_no(ticket_no);
+            fzScore.setAspect_name(aspect_name);
+            fzScore.setStd_id(reg.getStd_id());
+            fzScore.setQualified(qualified);
+
+            scoreList.add(fzScore);
+
+            row++;
+        }
+
+        //保存成绩
+        for (FzScore score : scoreList) {
+            FzScore existScore = fzScoreDao.findScore(score.getStd_id(), score.getAspect_name());
+            if (existScore != null) {
+                existScore.setSubj_zxjc(score.getSubj_zxjc());
+                existScore.setSubj_mtcz(score.getSubj_mtcz());
+                existScore.setSubj_zhsy(score.getSubj_zhsy());
+                existScore.setFace_score(score.getFace_score());
+                existScore.setQualified(score.getQualified());
+                fzScoreDao.update(existScore);
+            } else {
+                fzScoreDao.insert(score);
+            }
+        }
+
+        //更新总分
+        fzScoreDao.updateTotalScore();
+
+        //保存日志
+        FrameOptrLog log = new FrameOptrLog();
+        log.setOptr_id(frameOptr.getOptr_id());
+        log.setLog_type(ArtOptrLogType.IMPORT_SCORE.toString());
+        log.setLog_time(LocalDateTime.now());
+        LogDao.insert(log);
+    }
+
+
+}