caozixuan 3 жил өмнө
parent
commit
2358b95485

+ 13 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/BasicStudentService.java

@@ -7,8 +7,11 @@ import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
 import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.BasicStudentResult;
 import com.qmth.distributed.print.business.entity.BasicStudent;
+import com.qmth.teachcloud.common.entity.SysUser;
+import org.springframework.util.LinkedMultiValueMap;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -37,7 +40,7 @@ public interface BasicStudentService extends IService<BasicStudent> {
      * @param basicStudentParams 基础学生信息参数
      * @return 新增或编辑的校区id
      */
-    Long saveBasicStudent(BasicStudentParams basicStudentParams);
+    Long saveBasicStudent(BasicStudentParams basicStudentParams, SysUser sysUser);
 
     /**
      * 批量删除学生基本信息(逻辑)
@@ -45,4 +48,13 @@ public interface BasicStudentService extends IService<BasicStudent> {
      * @return 是否删除成功
      */
     Boolean removeBasicStudentBatch(List<Long> idList);
+
+    /**
+     * 执行批量导入学生逻辑
+     *
+     * @param finalList 基础学生数据集合
+     * @param map       参数
+     * @return 结果
+     */
+    Map<String, Object> executeBasicStudentImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map);
 }

+ 148 - 55
distributed-print-business/src/main/java/com/qmth/distributed/print/business/service/impl/BasicStudentServiceImpl.java

@@ -5,9 +5,12 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.qmth.distributed.print.business.bean.dto.excel.BasicStudentImportDto;
+import com.qmth.distributed.print.business.bean.params.BasicCampusParams;
 import com.qmth.distributed.print.business.bean.dto.TaskPrintClassDto;
 import com.qmth.distributed.print.business.bean.params.BasicStudentParams;
 import com.qmth.distributed.print.business.bean.result.BasicStudentResult;
+import com.qmth.distributed.print.business.entity.BasicCampus;
 import com.qmth.distributed.print.business.entity.BasicStudent;
 import com.qmth.distributed.print.business.mapper.BasicStudentMapper;
 import com.qmth.distributed.print.business.service.BasicCampusService;
@@ -17,14 +20,14 @@ import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
 import com.qmth.teachcloud.common.service.TeachcloudCommonService;
 import com.qmth.teachcloud.common.util.ServletUtil;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.LinkedMultiValueMap;
 
 import javax.annotation.Resource;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -66,57 +69,12 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public Long saveBasicStudent(BasicStudentParams basicStudentParams) {
-        // 权限参数
-        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
-        Long schoolId = sysUser.getSchoolId();
-        Long id = basicStudentParams.getId();
-        // 普通参数
-        String studentName = basicStudentParams.getStudentName();
-        String studentCode = basicStudentParams.getStudentCode();
-        String phoneNumber = basicStudentParams.getPhoneNumber();
-        Long campusId = basicStudentParams.getCampusId();
-        if (Objects.isNull(basicCampusService.getById(campusId))){
-            throw ExceptionResultEnum.ERROR.exception("所选校区不存在");
-        }
-        String clazz = basicStudentParams.getClazz();
-
-        // 检验学号在学校的唯一性
-        BasicStudent check = this.getOne(new QueryWrapper<BasicStudent>().lambda()
-                .eq(BasicStudent::getSchoolId,schoolId)
-                .eq(BasicStudent::getStudentCode,studentCode)
-                .eq(BasicStudent::getEnable,true));
-        if (Objects.nonNull(check)){
-            if (!check.getId().equals(id)){
-                throw ExceptionResultEnum.ERROR.exception("学生编号【" + studentCode + "】重复");
-            }
-        }
-
-        // 组装基础参数
-        BasicStudent basicStudent = new BasicStudent();
-        basicStudent.setStudentCode(studentCode);
-        basicStudent.setStudentName(studentName);
-        basicStudent.setPhoneNumber(phoneNumber);
-        basicStudent.setCampusId(campusId);
-        basicStudent.setClazz(clazz);
-        basicStudent.setOrgId(sysUser.getOrgId());
-        basicStudent.setSchoolId(schoolId);
-
-        // 保存
-        if (Objects.isNull(id)){
-            // id为空 -> 新增
-            // 获取分布式id
-            id = SystemConstant.getDbUuid();
-            basicStudent.setId(id);
-            basicStudent.setCreateId(sysUser.getId());
-            this.save(basicStudent);
-        }else {
-            // id不为空 -> 更新
-            basicStudent.setId(id);
-            basicStudent.setUpdateId(sysUser.getId());
-            this.updateById(basicStudent);
-        }
-        return id;
+    public Long saveBasicStudent(BasicStudentParams basicStudentParams,SysUser sysUser) {
+        List<BasicStudentParams> basicStudentParamsList = new ArrayList<>();
+        basicStudentParamsList.add(basicStudentParams);
+        BasicStudent basicStudent = this.editEntityHelp(basicStudentParamsList,sysUser).get(0);
+        this.updateById(basicStudent);
+        return basicStudent.getId();
     }
 
     @Transactional(rollbackFor = Exception.class)
@@ -134,4 +92,139 @@ public class BasicStudentServiceImpl extends ServiceImpl<BasicStudentMapper, Bas
                 .in(BasicStudent::getId,idList);
         return this.update(updateWrapper);
     }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public Map<String, Object> executeBasicStudentImportLogic(List<LinkedMultiValueMap<Integer, Object>> finalList, Map<String, Object> map) {
+        SysUser sysUser = (SysUser) map.get(SystemConstant.SYS_USER);
+        Long schoolId = sysUser.getSchoolId();
+
+        List<BasicStudentParams> addBasicStudentParamsList = new ArrayList<>();
+        for (int i = 0; i < finalList.size(); i++) {
+            LinkedMultiValueMap<Integer, Object> excelMap = finalList.get(i);
+            List<Object> basicStudentImportDtoList = excelMap.get(i);
+            List<BasicStudentImportDto> datasource = Collections.singletonList((BasicStudentImportDto) excelMap.get(i));
+            // TODO: 2021/7/16 校验datasource集合的正确性
+            System.out.println("datasource:\n" + datasource);
+
+            // 新校区名称集合
+            Set<String> newCampusNameSet = datasource.stream().map(BasicStudentImportDto::getCampusName).collect(Collectors.toSet());
+            // 旧校区集合
+            List<BasicCampus> basicCampusList = basicCampusService.list(new QueryWrapper<BasicCampus>().lambda().eq(BasicCampus::getEnable,true).eq(BasicCampus::getSchoolId,schoolId));
+            Set<String> oldCampusNameSet = basicCampusList.stream().map(BasicCampus::getCampusName).collect(Collectors.toSet());
+
+            // 需要新增的校区集合
+            Set<String> addCampusNameSet =  newCampusNameSet.stream().filter(e -> !oldCampusNameSet.contains(e)).collect(Collectors.toSet());
+            List<BasicCampus> addBasicCampusList = new ArrayList<>();
+            for (String campusName : addCampusNameSet) {
+                BasicCampus basicCampus = new BasicCampus();
+                Long id = SystemConstant.getDbUuid();
+                basicCampus.setSchoolId(schoolId);
+                basicCampus.setCampusName(campusName);
+                basicCampus.setId(id);
+                basicCampus.setCampusCode(String.valueOf(id));
+                basicCampus.setEnable(true);
+                basicCampus.setCreateId(sysUser.getId());
+                addBasicCampusList.add(basicCampus);
+            }
+            // 批量新增校区
+            basicCampusService.saveBatch(addBasicCampusList);
+
+            for (int y = 0; y < Objects.requireNonNull(basicStudentImportDtoList).size(); y++) {
+                BasicStudentImportDto basicStudentImportDto = (BasicStudentImportDto) basicStudentImportDtoList.get(y);
+
+                // 取值
+                String studentName = basicStudentImportDto.getStudentName();
+                String studentCode = basicStudentImportDto.getStudentCode();
+                String phoneNumber = basicStudentImportDto.getPhoneNumber();
+                String campusName = basicStudentImportDto.getCampusName();
+                String clazz = basicStudentImportDto.getClazz();
+
+
+                BasicStudentParams basicStudentParams = new BasicStudentParams();
+                basicStudentParams.setCampusId(basicCampusService.getOne(new QueryWrapper<BasicCampus>().lambda()
+                        .eq(BasicCampus::getSchoolId,schoolId)
+                        .eq(BasicCampus::getCampusName,campusName)
+                        .eq(BasicCampus::getEnable,true))
+                        .getId());
+                basicStudentParams.setStudentName(studentName);
+                basicStudentParams.setStudentCode(studentCode);
+                basicStudentParams.setPhoneNumber(phoneNumber);
+                basicStudentParams.setClazz(clazz);
+
+                BasicStudent tmp = this.getOne(new QueryWrapper<BasicStudent>().lambda()
+                        .eq(BasicStudent::getSchoolId,sysUser.getSchoolId())
+                        .eq(BasicStudent::getEnable,true)
+                        .eq(BasicStudent::getStudentCode,studentCode));
+                if (Objects.nonNull(tmp)){
+                    basicStudentParams.setId(tmp.getId());
+                }
+                addBasicStudentParamsList.add(basicStudentParams);
+            }
+
+            List<BasicStudent> basicStudentList = this.editEntityHelp(addBasicStudentParamsList,sysUser);
+            this.updateBatchById(basicStudentList);
+        }
+
+        return map;
+    }
+
+    /**
+     * 学生保存助手方法(应对学生保存和导入批量保存)
+     * @param basicStudentParamsList 学生参数
+     * @param sysUser 操作人
+     * @return 结果
+     */
+    private List<BasicStudent> editEntityHelp(List<BasicStudentParams> basicStudentParamsList,SysUser sysUser){
+        Long schoolId = sysUser.getSchoolId();
+        List<BasicStudent> editEntityList = new ArrayList<>();
+        for (BasicStudentParams basicStudentParams : basicStudentParamsList) {
+            // 普通参数
+            String studentName = basicStudentParams.getStudentName();
+            String studentCode = basicStudentParams.getStudentCode();
+            String phoneNumber = basicStudentParams.getPhoneNumber();
+            Long campusId = basicStudentParams.getCampusId();
+            if (Objects.isNull(basicCampusService.getById(campusId))){
+                throw ExceptionResultEnum.ERROR.exception("所选校区不存在");
+            }
+            String clazz = basicStudentParams.getClazz();
+            Long id = basicStudentParams.getId();
+
+            // 检验学号在学校的唯一性
+            BasicStudent check = this.getOne(new QueryWrapper<BasicStudent>().lambda()
+                    .eq(BasicStudent::getSchoolId,schoolId)
+                    .eq(BasicStudent::getStudentCode,studentCode)
+                    .eq(BasicStudent::getEnable,true));
+            if (Objects.nonNull(check)){
+                if (!check.getId().equals(id)){
+                    throw ExceptionResultEnum.ERROR.exception("学生编号【" + studentCode + "】重复");
+                }
+            }
+
+            // 组装基础参数
+            BasicStudent basicStudent = new BasicStudent();
+            basicStudent.setStudentCode(studentCode);
+            basicStudent.setStudentName(studentName);
+            basicStudent.setPhoneNumber(phoneNumber);
+            basicStudent.setCampusId(campusId);
+            basicStudent.setClazz(clazz);
+            basicStudent.setOrgId(sysUser.getOrgId());
+            basicStudent.setSchoolId(schoolId);
+
+            // 保存
+            if (Objects.isNull(id)){
+                // id为空 -> 新增
+                // 获取分布式id
+                id = SystemConstant.getDbUuid();
+                basicStudent.setId(id);
+                basicStudent.setCreateId(sysUser.getId());
+            }else {
+                // id不为空 -> 更新
+                basicStudent.setId(id);
+                basicStudent.setUpdateId(sysUser.getId());
+            }
+            editEntityList.add(basicStudent);
+        }
+        return editEntityList;
+    }
 }

+ 14 - 2
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/execute/AsyncStudentDataImportService.java

@@ -1,6 +1,7 @@
 package com.qmth.distributed.print.business.templete.execute;
 
 import cn.hutool.core.date.DateUtil;
+import com.qmth.boot.api.exception.ApiException;
 import com.qmth.distributed.print.business.templete.importData.AsyncImportTaskTemplete;
 import com.qmth.distributed.print.business.templete.service.TaskLogicService;
 import com.qmth.teachcloud.common.contant.SpringContextHolder;
@@ -12,6 +13,7 @@ import com.qmth.teachcloud.common.enums.TaskResultEnum;
 import com.qmth.teachcloud.common.enums.TaskStatusEnum;
 import com.qmth.teachcloud.common.service.TBTaskService;
 import com.qmth.teachcloud.common.util.Result;
+import com.qmth.teachcloud.common.util.ResultUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -53,8 +55,18 @@ public class AsyncStudentDataImportService extends AsyncImportTaskTemplete {
             stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), FINISH_TITLE, Long.valueOf(String.valueOf(result.get("dataCount"))), FINISH_SIZE));
             tbTask.setResult(TaskResultEnum.SUCCESS);
         }catch (Exception e){
-
+            log.error("请求出错", e);
+            stringJoinerSummary.add(MessageFormat.format("{0}{1}{2}{3}", DateUtil.format(new Date(), SystemConstant.DEFAULT_DATE_PATTERN), EXCEPTION_TITLE, EXCEPTION_DATA, e.getMessage()));
+            tbTask.setResult(TaskResultEnum.ERROR);
+            if (e instanceof ApiException) {
+                ResultUtil.error((ApiException) e, e.getMessage());
+            } else {
+                ResultUtil.error(e.getMessage());
+            }
+        } finally {//生成txt文件
+            tbTask.setSummary(stringJoinerSummary.toString());
+            super.createTxt(tbTask);
         }
-        return null;
+        return ResultUtil.ok(map);
     }
 }

+ 2 - 1
distributed-print-business/src/main/java/com/qmth/distributed/print/business/templete/service/impl/TaskLogicServiceImpl.java

@@ -146,6 +146,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
     @Autowired
     ExamTaskPrintService examTaskPrintService;
 
+
     /**
      * 创建pdf前置条件
      *
@@ -1215,7 +1216,7 @@ public class TaskLogicServiceImpl implements TaskLogicService {
             }
             return finalExcelList;
         });
-        return null;
+        return basicStudentService.executeBasicStudentImportLogic(finalList,map);
     }
 
     public String createTempNumber(SerialNumberParams serialNumberParams){

+ 6 - 1
distributed-print/src/main/java/com/qmth/distributed/print/api/BasicStudentController.java

@@ -10,6 +10,7 @@ import com.qmth.distributed.print.business.service.BasicStudentService;
 import com.qmth.distributed.print.business.service.PrintCommonService;
 import com.qmth.distributed.print.business.templete.execute.AsyncStudentDataImportService;
 import com.qmth.teachcloud.common.contant.SystemConstant;
+import com.qmth.teachcloud.common.entity.SysUser;
 import com.qmth.teachcloud.common.entity.TBTask;
 import com.qmth.teachcloud.common.enums.TaskTypeEnum;
 import com.qmth.teachcloud.common.util.Result;
@@ -62,7 +63,8 @@ public class BasicStudentController {
         if (bindingResult.hasErrors()) {
             return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage());
         }
-        return ResultUtil.ok(basicStudentService.saveBasicStudent(basicStudentParams));
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
+        return ResultUtil.ok(basicStudentService.saveBasicStudent(basicStudentParams,sysUser));
     }
 
     @ApiOperation(value = "学生基本信息管理-批量删除(逻辑)")
@@ -76,7 +78,10 @@ public class BasicStudentController {
     @RequestMapping(value = "/data_import", method = RequestMethod.POST)
     @ApiResponses({@ApiResponse(code = 200, message = "返回信息", response = EditResult.class)})
     public Result examinationImportAysnc(@ApiParam(value = "上传文件", required = true) @RequestParam MultipartFile file) throws Exception {
+        SysUser sysUser = (SysUser) ServletUtil.getRequestUser();
         Map<String, Object> map = printCommonService.saveTask(file, TaskTypeEnum.STUDENT_IMPORT);
+        map.put(SystemConstant.SYS_USER,sysUser);
+
         asyncStudentDataImportService.importTask(map);
         TBTask tbTask = Objects.nonNull(map.get(SystemConstant.TASK)) ? (TBTask) map.get(SystemConstant.TASK) : null;
         return Objects.nonNull(tbTask) ? ResultUtil.ok(tbTask.getId()) : ResultUtil.error("创建任务失败");

+ 2 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/contant/SystemConstant.java

@@ -75,7 +75,9 @@ public class SystemConstant {
     public static final String ADMIN_CODE = "admin";
     public static final String AUTH = "auth";//命题老师id
 //    public static final int MAX_RETRY_CREATE_PDF_COUNT = 5;
+    //英文字母、数字、中文括号、英文括号、下划线(_)、减号(-)、中文横线(—)
     public static final String REGULAR_EXPRESSION_OF_CODE = "[a-zA-Z0-9](\\w+)?-?(\\w+)?—?(\\w+)?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\((\\w+)?-?(\\w+)?—?(\\w+)?\\))?(\\w+)?";
+    public static final String SYS_USER = "sysUser";
 
     /**
      * oss url过期时间