diff --git a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeMapper.java b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeMapper.java
index dced65e0c6c417c0dc102853f0c06ea24b5b655f..2a4b37cd2fe046449db18ad29d0dab40e518f04b 100644
--- a/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeMapper.java
+++ b/wisenergy-mapper/src/main/java/cn/wisenergy/mapper/SchemeMapper.java
@@ -2,6 +2,7 @@ package cn.wisenergy.mapper;
 
 import cn.wisenergy.model.app.SchemeInfo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
@@ -21,5 +22,16 @@ public interface SchemeMapper extends BaseMapper<SchemeInfo> {
      */
     int edit(SchemeInfo schemeInfo);
 
+    /**
+     * 统计
+     * @return 数量
+     */
     int count();
+
+    /**
+     * 获取方案信息
+     * @param id 方案id
+     * @return 方案信息
+     */
+    SchemeInfo getById(@Param("id") Integer id);
 }
diff --git a/wisenergy-mapper/src/main/resources/mapper/SchemeMapper.xml b/wisenergy-mapper/src/main/resources/mapper/SchemeMapper.xml
index 61b07394d9ab55ced4760bd49d003ae3210f2b4a..23bba6f27794b7521e84451d9de6adcdaa57b4ea 100644
--- a/wisenergy-mapper/src/main/resources/mapper/SchemeMapper.xml
+++ b/wisenergy-mapper/src/main/resources/mapper/SchemeMapper.xml
@@ -6,6 +6,7 @@
         <id column="id" property="id"/>
         <result column="scheme_name" property="schemeName"/>
         <result column="upload_time" property="uploadTime"/>
+        <result column="file_url" property="fileUrl"/>
         <result column="type" property="type"/>
         <result column="is_delete" property="isDelete"/>
         <result column="create_time" property="createTime"/>
@@ -22,16 +23,17 @@
     </sql>
 
     <sql id="cols_exclude_id">
-        scheme_name,upload_time, type,is_delete,create_time,update_time
+        scheme_name,upload_time,file_url, type,is_delete,create_time,update_time
     </sql>
 
     <sql id="vals">
-        #{schemeName},#{uploadTime},#{type},#{isDelete},now(),now()
+        #{schemeName},#{uploadTime},#{fileUrl},#{type},#{isDelete},now(),now()
     </sql>
 
     <sql id="updateCondition">
         <if test="schemeName != null">scheme_name = #{schemeName},</if>
         <if test="uploadTime != null">upload_time =#{uploadTime},</if>
+        <if test="fileUrl != null">file_url =#{fileUrl},</if>
         <if test="type != null">type =#{type},</if>
         <if test="isDelete != null">is_delete =#{isDelete},</if>
         update_time =now()
@@ -41,6 +43,7 @@
         <if test="id != null">id = #{id}</if>
         <if test="schemeName != null">and scheme_name = #{schemeName}</if>
         <if test="uploadTime != null">and upload_time =#{uploadTime}</if>
+        <if test="fileUrl != null">and file_url =#{fileUrl}</if>
         <if test="type != null">and type =#{type}</if>
         <if test="isDelete != null">and is_delete =#{isDelete}</if>
         <if test="createTime != null">and create_time &gt;= #{createTime}</if>
@@ -90,4 +93,14 @@
         </where>
     </select>
 
+    <select id="getById" resultType="cn.wisenergy.model.app.SchemeInfo">
+        select
+        <include refid="cols_all"/>
+        from
+        <include refid="table"/>
+        <where>
+            id=#{id}
+        </where>
+    </select>
+
 </mapper>
diff --git a/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeInfo.java b/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeInfo.java
index aa41a668517e0de2fb2dc6a0dac567582fe743d7..4d71a8a7d5913b2469d19239335e2e3fdd85b6f2 100644
--- a/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeInfo.java
+++ b/wisenergy-model/src/main/java/cn/wisenergy/model/app/SchemeInfo.java
@@ -34,6 +34,12 @@ public class SchemeInfo implements Serializable {
     @ApiModelProperty(value = "上传时间", name = "uploadTime")
     private Date uploadTime;
 
+    /**
+     * 上传url
+     */
+    @ApiModelProperty(value = "上传时间", name = "uploadTime")
+    private String fileUrl;
+
     /**
      * 1:本科文化一批 2:本科美术一批 3:艺术本科批文学编导
      * 4:本科体育  5:专科专业分类6:专科美术一批 7:专科文学编导一批 8:专科体育一批
diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeService.java
index 561b177fe48a6efb626872bf82e8bee98d88ace7..9930cc26bcefc9f867c1262389263a1ac0c471b3 100644
--- a/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeService.java
+++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/SchemeService.java
@@ -9,21 +9,23 @@ import com.github.pagehelper.PageInfo;
 
 
 /**
-*@ Description: 方案接口定义
-*@ Author     : 86187
-*@ Date       : 2021/1/13 14:50
-*/
+ * @ Description: 方案接口定义
+ * @ Author     : 86187
+ * @ Date       : 2021/1/13 14:50
+ */
 public interface SchemeService {
 
     /**
      * 方案查询
+     *
      * @param schemeVo 查询参数
-     * @return  方案查询结果列表
+     * @return 方案查询结果列表
      */
     R<VolunteerVo> getList(SchemeVo schemeVo);
 
     /**
      * 根据方案id,删除方案
+     *
      * @param schemeId 方案id
      * @return
      */
@@ -31,8 +33,17 @@ public interface SchemeService {
 
     /**
      * 方案列表查询
+     *
      * @param schemeVo 查询参数
-     * @return  方案查询结果列表
+     * @return 方案查询结果列表
      */
     R<PageInfo<SchemeInfo>> getSchemeList(SchemeQueryVo schemeVo);
+
+    /**
+     * 获取方案下载路径
+     *
+     * @param schemeId 方案id
+     * @return 方案下载路径
+     */
+    R<String> download(Integer schemeId);
 }
diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/VolunteerService.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/VolunteerService.java
index e472cec952be860309bdb1c22ed17c5253e05e87..4e87e001da62ce780b790e1a441f2990c3e52053 100644
--- a/wisenergy-service/src/main/java/cn/wisenergy/service/app/VolunteerService.java
+++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/VolunteerService.java
@@ -24,11 +24,13 @@ public interface VolunteerService extends IService<Volunteer> {
 
     /**
      * Excel批量添加方案志愿
-     * @param file 志愿文件
-     * @param type 方案类型
+     *
+     * @param file       志愿文件
+     * @param type       方案类型
      * @param schemeName 方案名称
-     * @param response 相应数据
+     * @param fileUrl    方案url
+     * @param response   相应数据
      * @throws IOException 异常
      */
-    void excelAdd(MultipartFile file, Integer type, String schemeName, HttpServletResponse response) throws IOException;
+    void excelAdd(MultipartFile file, Integer type, String schemeName, String fileUrl, HttpServletResponse response) throws IOException;
 }
diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeServiceImpl.java
index 4d4b7331a471fa9a327a9dc06d44ace891ef909f..fcf7443446b7fc45745ef01a901a35615cc0dd0f 100644
--- a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeServiceImpl.java
+++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/SchemeServiceImpl.java
@@ -303,6 +303,22 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
         return R.ok(info);
     }
 
+    @Override
+    public R<String> download(Integer schemeId) {
+        log.info("volunteer-service[]SchemeServiceImpl[]download[]input.param.schemeId:" + schemeId);
+        if (null == schemeId) {
+            return R.error("入参为空!");
+        }
+
+        //获取方案信息
+        SchemeInfo schemeInfo = schemeMapper.getById(schemeId);
+        if (null == schemeInfo || StringUtils.isBlank(schemeInfo.getFileUrl())) {
+            return R.error("未上传方案,无法下载!");
+        }
+
+        return R.ok(schemeInfo.getFileUrl());
+    }
+
 
     /**
      * 获取文化生志愿列表
@@ -600,27 +616,27 @@ public class SchemeServiceImpl extends ServiceImpl<SchemeMapper, SchemeInfo> imp
     private List<String> getClassName(ScoreInfo scoreInfo) {
         List<String> name = new ArrayList<>();
         name.add(StudentClassEnum.UNLIMITED.getDesc());
-        if (scoreInfo.getPhysicsGrade() > 0) {
+        if (scoreInfo.getPhysicsGrade() >= 0) {
             name.add(StudentClassEnum.PHYSICS_GRADE.getDesc());
         }
 
-        if (scoreInfo.getChemistryGrade() > 0) {
+        if (scoreInfo.getChemistryGrade() >= 0) {
             name.add(StudentClassEnum.CHEMISTRY_GRADE.getDesc());
         }
 
-        if (scoreInfo.getBiologyGrade() > 0) {
+        if (scoreInfo.getBiologyGrade() >= 0) {
             name.add(StudentClassEnum.BIOLOGY_GRADE.getDesc());
         }
 
-        if (scoreInfo.getHistoryGrade() > 0) {
+        if (scoreInfo.getHistoryGrade() >= 0) {
             name.add(StudentClassEnum.HISTORY_GRADE.getDesc());
         }
 
-        if (scoreInfo.getGeographyGrade() > 0) {
+        if (scoreInfo.getGeographyGrade() >= 0) {
             name.add(StudentClassEnum.GEOGRAPHY_GRADE.getDesc());
         }
 
-        if (scoreInfo.getPoliticsGrade() > 0) {
+        if (scoreInfo.getPoliticsGrade() >= 0) {
             name.add(StudentClassEnum.POLITICS_GRADE.getDesc());
         }
 
diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserServiceImpl.java
index 5fa8a23b291e6ec97e0560ed33a6552530c18f76..6b7157e0e070ba3d9f2ddfde7b192f1ead31fcb8 100644
--- a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserServiceImpl.java
+++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/UserServiceImpl.java
@@ -70,7 +70,7 @@ public class UserServiceImpl extends ServiceImpl<UsersMapper, User> implements U
         Map<String, Object> map = new HashMap<>(8);
 
         //将参数放入容器中
-        map.put("pageNo", (pageNum-1)*pageSize);
+        map.put("pageNo", (pageNum - 1) * pageSize);
         map.put("pageSize", pageSize);
         map.put("startTime", queryVo.getStartTime());
         map.put("endTime", queryVo.getEndTime());
@@ -91,44 +91,44 @@ public class UserServiceImpl extends ServiceImpl<UsersMapper, User> implements U
                 userInfoDto.setCultureGrade(scoreInfo.getCultureGrade().toString());
                 userInfoDto.setMajorGrade(scoreInfo.getMajorGrade().toString());
             }
-                LoginRecord loginRecord = loginRecordMapper.getById(user.getId());
-                if (null != loginRecord) {
-                    userInfoDto.setLastLoginTime(loginRecord.getUpdateTime());
-                    userInfoDto.setIp(loginRecord.getIp());
-                }
-                UserLimit userLimit = userLimitMapper.getByUserId(user.getId());
-
-                if (null != userLimit) {
-                    userInfoDto.setQueryLimit(userLimit.getUsableLimit());
-                }
-                List<PayRecord> byId = payRecordMapper.getById(user.getId());
+            LoginRecord loginRecord = loginRecordMapper.getById(user.getId());
+            if (null != loginRecord) {
+                userInfoDto.setLastLoginTime(loginRecord.getUpdateTime());
+                userInfoDto.setIp(loginRecord.getIp());
+            }
+            UserLimit userLimit = userLimitMapper.getByUserId(user.getId());
 
-                if (!CollectionUtils.isEmpty(byId)) {
-                    //计算累计充值金额
-                    Integer sumMoney = 0;
-                    for (PayRecord payRecord : byId) {
-                        sumMoney += payRecord.getMoney();
-                    }
+            if (null != userLimit) {
+                userInfoDto.setQueryLimit(userLimit.getUsableLimit());
+            }
+            List<PayRecord> byId = payRecordMapper.getById(user.getId());
 
-                    userInfoDto.setMoneyAmount(sumMoney.toString());
+            if (!CollectionUtils.isEmpty(byId)) {
+                //计算累计充值金额
+                Integer sumMoney = 0;
+                for (PayRecord payRecord : byId) {
+                    sumMoney += payRecord.getMoney();
                 }
 
-                //将消息进行同步
-                BeanUtils.copyProperties(user, userInfoDto);
-                userInfoDto.setUserId(user.getId());
-                userInfoDto.setRegisterTime(user.getCreateTime());
-                list.add(userInfoDto);
+                userInfoDto.setMoneyAmount(sumMoney.toString());
             }
 
-            PageInfo<UserInfoDto> info = new PageInfo<>();
-            info.setPageSize(pageSize);
-            info.setPageNum(pageNum);
-            info.setTotal(usersMapper.getUserNumbers(map));
-            info.setList(list);
-
-            return R.ok(info);
+            //将消息进行同步
+            BeanUtils.copyProperties(user, userInfoDto);
+            userInfoDto.setUserId(user.getId());
+            userInfoDto.setRegisterTime(user.getCreateTime());
+            list.add(userInfoDto);
         }
 
+        PageInfo<UserInfoDto> info = new PageInfo<>();
+        info.setPageSize(pageSize);
+        info.setPageNum(pageNum);
+        info.setTotal(usersMapper.getUserNumbers(map));
+        info.setList(list);
+
+        return R.ok(info);
+    }
+
 
     @Override
     public R<UserInfoVo> commitUserInfo(UserCommitDto userInfo) {
@@ -143,6 +143,12 @@ public class UserServiceImpl extends ServiceImpl<UsersMapper, User> implements U
             return R.error("用户信息不存在!");
         }
 
+        //检查成绩信息
+        R<Boolean> booleanR = volunteerManager.checkScore(userInfo.getScoreInfo());
+        if (null != booleanR && booleanR.getCode() == 1) {
+            return R.error(booleanR.getMessage());
+        }
+
         //2、要提交的用户信息
         user.setSchool(userInfo.getSchool());
         user.setSex(userInfo.getSex());
@@ -189,6 +195,11 @@ public class UserServiceImpl extends ServiceImpl<UsersMapper, User> implements U
         user.setExamType(userDto.getStudentType());
         user.setUserName(userDto.getUserName());
 
+        //检查成绩信息
+        R<Boolean> booleanR = volunteerManager.checkScore(userDto.getScoreInfo());
+        if (null != booleanR && booleanR.getCode() == 1) {
+            return R.error(booleanR.getMessage());
+        }
 
         //3、要提交的用户的成绩信息
         ScoreInfo scoreInfo = scoreInfoMapper.getById(userDto.getUserId());
@@ -248,11 +259,11 @@ public class UserServiceImpl extends ServiceImpl<UsersMapper, User> implements U
 
     @Override
     public R<List<User>> test() {
-        List<String> names=new ArrayList<>();
+        List<String> names = new ArrayList<>();
         names.add("黎楚川");
         names.add("陈成");
         names.add("雷青松");
-        List<User> list=usersMapper.test(names);
+        List<User> list = usersMapper.test(names);
         return R.ok(list);
     }
 
@@ -277,4 +288,5 @@ public class UserServiceImpl extends ServiceImpl<UsersMapper, User> implements U
         orderQueryVo.setPageNo(pageNum);
         orderQueryVo.setPageSize(pageSize);
     }
+
 }
diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/VolunteerServiceImpl.java b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/VolunteerServiceImpl.java
index 450c6279e087cbd69b4ebca37d5eeb3c8e5f92a3..32b439ba9e317a7b3d5f73edf9dc32aa9583d9ab 100644
--- a/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/VolunteerServiceImpl.java
+++ b/wisenergy-service/src/main/java/cn/wisenergy/service/app/impl/VolunteerServiceImpl.java
@@ -50,8 +50,9 @@ public class VolunteerServiceImpl extends ServiceImpl<VolunteerMapper, Volunteer
     }
 
     @Override
-    public void excelAdd(MultipartFile file, Integer type, String schemeName, HttpServletResponse response) throws IOException {
-        if (file == null || file.isEmpty() || null == type || StringUtils.isBlank(schemeName)) {
+    public void excelAdd(MultipartFile file, Integer type, String schemeName,String fileUrl, HttpServletResponse response) throws IOException {
+        if (file == null || file.isEmpty() || null == type || StringUtils.isBlank(schemeName) ||
+                StringUtils.isBlank(fileUrl)) {
             throw new BaseException("操作错误");
         }
 
@@ -70,6 +71,7 @@ public class VolunteerServiceImpl extends ServiceImpl<VolunteerMapper, Volunteer
         SchemeInfo schemeInfo = new SchemeInfo();
         schemeInfo.setSchemeName(schemeName);
         schemeInfo.setType(type);
+        schemeInfo.setFileUrl(fileUrl);
         schemeInfo.setUploadTime(new Date());
         schemeInfo.setIsDelete(0);
 
diff --git a/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerManager.java b/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerManager.java
index eea9ecce4333bb7e5cdbe6fc0e708340aec76914..9cb04c97d170d5ae1ea49bfae34908dac9222429 100644
--- a/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerManager.java
+++ b/wisenergy-service/src/main/java/cn/wisenergy/service/common/VolunteerManager.java
@@ -66,8 +66,16 @@ public class VolunteerManager {
     @Autowired
     private UserLimitService userLimitService;
 
+    /**
+     * 错误码
+     */
     private static final int ERROR_CODE = 1;
 
+    /**
+     * 副科是六选三科
+     */
+    private static final int CLASS_COUNT = 3;
+
     /**
      * 更新用户查询信息并保存扣减记录
      *
@@ -221,24 +229,7 @@ public class VolunteerManager {
         if (null == scoreInfo.getMajorGrade()) {
             scoreInfo.setMajorGrade(0.00);
         }
-        if (null == scoreInfo.getPoliticsGrade()) {
-            scoreInfo.setPoliticsGrade(0.00);
-        }
-        if (null == scoreInfo.getHistoryGrade()) {
-            scoreInfo.setHistoryGrade(0.00);
-        }
-        if (null == scoreInfo.getBiologyGrade()) {
-            scoreInfo.setBiologyGrade(0.00);
-        }
-        if (null == scoreInfo.getChemistryGrade()) {
-            scoreInfo.setChemistryGrade(0.00);
-        }
-        if (null == scoreInfo.getPhysicsGrade()) {
-            scoreInfo.setPhysicsGrade(0.00);
-        }
-        if (null == scoreInfo.getGeographyGrade()) {
-            scoreInfo.setGeographyGrade(0.00);
-        }
+
         int save = scoreInfoMapper.add(scoreInfo);
         if (save == 0) {
             return false;
@@ -321,4 +312,37 @@ public class VolunteerManager {
 
         return true;
     }
+
+    /**
+     * 检查成绩信息
+     *
+     * @param scoreInfo 成绩
+     * @return true or false
+     */
+    public R<Boolean> checkScore(ScoreInfo scoreInfo) {
+        int count = 0;
+        if (null != scoreInfo.getPoliticsGrade()) {
+            count = count + 1;
+        }
+        if (null != scoreInfo.getHistoryGrade()) {
+            count = count + 1;
+        }
+        if (null != scoreInfo.getBiologyGrade()) {
+            count = count + 1;
+        }
+        if (null != scoreInfo.getChemistryGrade()) {
+            count = count + 1;
+        }
+        if (null != scoreInfo.getPhysicsGrade()) {
+            count = count + 1;
+        }
+        if (null != scoreInfo.getGeographyGrade()) {
+            count = count + 1;
+        }
+
+        if (count > CLASS_COUNT) {
+            return R.error(1, "只能填三科副科成绩", false);
+        }
+        return R.ok(0, true);
+    }
 }
diff --git a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeController.java b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeController.java
index e4d4304b7367a104204cd9835313bacff039a34d..dd5775e3c8f08e7d508f0390116352118f40ede3 100644
--- a/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeController.java
+++ b/wisenergy-web-admin/src/main/java/cn/wisenergy/web/admin/controller/app/SchemeController.java
@@ -54,12 +54,14 @@ public class SchemeController {
     @ApiOperation(value = "Excel批量添加方案志愿", notes = "Excel批量添加方案志愿")
     @PostMapping("/excel/add")
     public R excelAdd(@RequestParam("file") MultipartFile file, @RequestParam("type") Integer type,
-                      @RequestParam("schemeName") String schemeName, HttpServletResponse response) throws IOException {
-        if (file == null || file.isEmpty() || null == type || StringUtils.isBlank(schemeName)) {
+                      @RequestParam("schemeName") String schemeName,
+                      @RequestParam("fileUrl") String fileUrl, HttpServletResponse response) throws IOException {
+        if (file == null || file.isEmpty() || null == type || StringUtils.isBlank(schemeName) ||
+                StringUtils.isBlank(fileUrl)) {
             throw new BaseException("操作错误");
         }
 
-        volunteerService.excelAdd(file, type, schemeName, response);
+        volunteerService.excelAdd(file, type, schemeName, fileUrl, response);
         return R.ok("添加成功");
     }
 
@@ -87,4 +89,16 @@ public class SchemeController {
         return schemeService.deleteById(schemeId);
     }
 
+    @ApiOperation(value = "获取方案下载路径", notes = "获取方案下载路径", httpMethod = "GET")
+    @ApiImplicitParam(name = "schemeId", value = "方案id", dataType = "int")
+    @GetMapping("/download")
+    public R<String> download(Integer schemeId) {
+        log.info("volunteer-service[]SchemeController[]download[]input.param.schemeId:" + schemeId);
+        if (null == schemeId) {
+            return R.error("入参为空!");
+        }
+
+        return schemeService.download(schemeId);
+    }
+
 }
diff --git a/wisenergy-web-admin/src/main/resources/application-dev.yml b/wisenergy-web-admin/src/main/resources/application-dev.yml
index b56ab8a23d76fb916d531aeba5e47d8ae5baaaa7..1c86162db82bbae6d1ef057add79cc07f7bcf56a 100644
--- a/wisenergy-web-admin/src/main/resources/application-dev.yml
+++ b/wisenergy-web-admin/src/main/resources/application-dev.yml
@@ -40,9 +40,9 @@ spring:
       # 启用
       enabled: true
       # 上传文件单个限制
-      max-file-size: 5MB
+      max-file-size: 10MB
       # 总限制
-      max-request-size: 10MB
+      max-request-size: 20MB
 
   redis:
     database: 0