From 068c615addd4bbd34e8009c0643cb6e62fcaed93 Mon Sep 17 00:00:00 2001 From: tianea Date: Mon, 7 Mar 2022 16:14:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=8E=A5=E5=8F=A3=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=20=E6=96=B0=E5=BB=BA=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../platform/common/core/bo/MemberImport.java | 2 + .../platform/common/core/tools/ExcelUtil.java | 34 +++- .../platform/common/core/tools/HttpUtil.java | 62 +++++++ .../src/main/resources/system.properties | 2 +- .../tz/platform/CompetitionApplication.java | 2 + .../api/CompetitionIndexControll.java | 19 ++ .../api/biz/CompetitionIndexBiz.java | 17 ++ .../api/dto/IndexCompetitionDTO.java | 17 ++ .../api/dto/IndexListCompetitionDTO.java | 12 ++ .../competitiion/job/CompetitionJob.java | 39 ++++ .../job/biz/CompetitionJobBiz.java | 44 +++++ .../pc/CompetitionMemberController.java | 10 +- .../pc/PCCompetitionMemberContoller.java | 23 +++ .../competitiion/pc/biz/MemberInfoBiz.java | 71 ++++++++ .../competitiion/pc/biz/PCCompetitionBiz.java | 32 +++- .../platform/competitiion/pc/biz/TeamBiz.java | 51 +++++- .../pc/biz/TeamTemplateImportBiz.java | 92 +++++++++- .../competitiion/pc/vo/AddMemberVO.java | 13 ++ .../competitiion/pc/vo/MemberInfoVO.java | 9 + .../competitiion/pc/vo/PageTeamMemberVO.java | 1 + .../com/tz/platform/entity/Competition.java | 6 + .../tz/platform/entity/CompetitionMember.java | 4 +- .../tz/platform/juejing/bo/AccountInfo.java | 23 +++ .../com/tz/platform/juejing/bo/CashInfo.java | 39 ++++ .../java/com/tz/platform/juejing/bo/Info.java | 13 ++ .../tz/platform/juejing/bo/ListCashInfo.java | 10 + .../platform/repository/CompetitionDao.java | 13 ++ .../repository/CompetitionMemberDao.java | 9 +- tz/exam/exam-service/pom.xml | 4 + .../java/com/tz/platform/entity/Question.java | 3 +- .../pc/PCQuestionImportController.java | 24 +++ .../tz/platform/pc/biz/QuestionImportBiz.java | 172 ++++++++++++++++++ .../pc/dto/ListQuestionImportDTO.java | 11 ++ .../com/tz/platform/pc/dto/QuestionDTO.java | 4 +- .../tz/platform/pc/dto/QuestionImportDTO.java | 12 ++ .../tz/platform/repository/QuestionDao.java | 2 + .../feign/biz/FeignStudentLevelBiz.java | 6 +- .../com/tz/platform/feign/user/vo/UserVo.java | 2 + .../platform/user/feign/biz/FeignUserBiz.java | 1 + .../platform/user/pc/biz/PcUserInfoBiz.java | 3 + .../tz/platform/user/pc/bo/UserPageBO.java | 1 + 41 files changed, 888 insertions(+), 26 deletions(-) create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionIndexControll.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionIndexBiz.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/IndexCompetitionDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/IndexListCompetitionDTO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/CompetitionJobBiz.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/PCCompetitionMemberContoller.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/MemberInfoBiz.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/AddMemberVO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/MemberInfoVO.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/AccountInfo.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/CashInfo.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Info.java create mode 100644 tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ListCashInfo.java create mode 100644 tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionImportController.java create mode 100644 tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/QuestionImportBiz.java create mode 100644 tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/ListQuestionImportDTO.java create mode 100644 tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/QuestionImportDTO.java diff --git a/tz/common/common-core/src/main/java/com/tz/platform/common/core/bo/MemberImport.java b/tz/common/common-core/src/main/java/com/tz/platform/common/core/bo/MemberImport.java index 1477dc5..700fbd4 100644 --- a/tz/common/common-core/src/main/java/com/tz/platform/common/core/bo/MemberImport.java +++ b/tz/common/common-core/src/main/java/com/tz/platform/common/core/bo/MemberImport.java @@ -10,4 +10,6 @@ public class MemberImport { private String school; private String province; private String level; + private String teacher; + private Long userNo; } diff --git a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/ExcelUtil.java b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/ExcelUtil.java index 40e628b..38e1d40 100644 --- a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/ExcelUtil.java +++ b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/ExcelUtil.java @@ -25,7 +25,7 @@ public class ExcelUtil { private String outPath; Pattern pattern = Pattern.compile("([A-Z]+)(\\d+)"); - private FileInputStream is; + private InputStream is; private XSSFWorkbook excel; //获取第一个sheet private XSSFSheet sheet0 ; @@ -57,10 +57,19 @@ public class ExcelUtil { } public ExcelUtil(InputStream fileInputStream) throws Exception{ + is = fileInputStream; excel = new XSSFWorkbook(fileInputStream); sheet0 = excel.getSheetAt(0); } + public void close(){ + try { + excel.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + public int getLastRowNum(){ return this.sheet0.getLastRowNum(); } @@ -306,10 +315,29 @@ public class ExcelUtil { } } } - return null ; } + public int getMergedRegionLineCount(int row,int column){ + int sheetMergeCount = sheet0.getNumMergedRegions(); + + for(int i = 0 ; i < sheetMergeCount ; i++){ + CellRangeAddress ca = sheet0.getMergedRegion(i); + int firstColumn = ca.getFirstColumn(); + int lastColumn = ca.getLastColumn(); + int firstRow = ca.getFirstRow(); + int lastRow = ca.getLastRow(); + + if(row >= firstRow && row <= lastRow){ + + if(column >= firstColumn && column <= lastColumn){ + return lastRow - firstRow +1; + } + } + } + return 0; + } + /** * 获取单元格的值 @@ -344,7 +372,7 @@ public class ExcelUtil { String result = ""; //1、判断是否是数值格式 - if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){ + if(cell.getCellTypeEnum() == CellType.NUMERIC){ short format = cell.getCellStyle().getDataFormat(); SimpleDateFormat sdf = null; if(format == 14 || format == 31 || format == 57 || format == 58){ diff --git a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/HttpUtil.java b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/HttpUtil.java index fa6da71..c263505 100644 --- a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/HttpUtil.java +++ b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/HttpUtil.java @@ -5,7 +5,10 @@ import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; +import org.apache.http.client.methods.HttpDelete; +import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; +import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicHeader; @@ -17,6 +20,8 @@ import org.slf4j.LoggerFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; +import java.io.IOException; +import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -97,4 +102,61 @@ public class HttpUtil { } return ""; } + /** + * @param url + * @param param + * @return + */ + public static String postWithHeader(String url, String param,Map headers) { + logger.info("POST 请求, url={},map={}", url, param); + try { + HttpPost httpPost = new HttpPost(url.trim()); + setHeaders(httpPost,headers); + StringEntity se = new StringEntity(param, CHARSET_UTF_8); + se.setContentType(CONTENT_TYPE_TEXT_JSON); + se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, APPLICATION_JSON)); + httpPost.setEntity(se); + HttpResponse httpResponse = HttpClientBuilder.create().build().execute(httpPost); + return EntityUtils.toString(httpResponse.getEntity(), CHARSET_UTF_8); + } catch (Exception e) { + logger.info("HTTP请求出错", e); + e.printStackTrace(); + } + return ""; + } + + private static String getContent(HttpRequestBase http){ + try { + HttpResponse httpResponse = HttpClientBuilder.create().build().execute(http); + + return EntityUtils.toString(httpResponse.getEntity(), CHARSET_UTF_8); + } catch (IOException e) { + e.printStackTrace(); + } + return ""; + } + + private static void setHeaders(HttpRequestBase http,Map headers){ + RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(TIMEOUT).setConnectionRequestTimeout(TIMEOUT).setSocketTimeout(TIMEOUT).build(); + http.setConfig(requestConfig); + if(headers!=null &&headers.size()>0){ + headers.keySet().forEach(key->{ + http.addHeader(key,headers.get(key)); + }); + } + } + + public static String delete(String url,Map headers){ + HttpDelete httpDelete = new HttpDelete(url.trim()); + setHeaders(httpDelete,headers); + return getContent(httpDelete); + } + + + + public static String get(String url,Map headers){ + HttpGet httpGet = new HttpGet(url.trim()); + setHeaders(httpGet,headers); + return getContent(httpGet); + } } diff --git a/tz/common/common-core/src/main/resources/system.properties b/tz/common/common-core/src/main/resources/system.properties index 820ec0d..0739e26 100644 --- a/tz/common/common-core/src/main/resources/system.properties +++ b/tz/common/common-core/src/main/resources/system.properties @@ -1,3 +1,3 @@ pic_path=/Volumes/Lexar/www/pic/ -pic_recourse_url=http://localhost:8899/pic/ +pic_recourse_url=/pic/ initPwd=tz2022 \ No newline at end of file diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/CompetitionApplication.java b/tz/competition/competition-service/src/main/java/com/tz/platform/CompetitionApplication.java index c6b49a7..c7f356b 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/CompetitionApplication.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/CompetitionApplication.java @@ -4,10 +4,12 @@ import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients(basePackages = "com.tz.platform.feign") +@EnableScheduling public class CompetitionApplication { public static void main(String[] args) { SpringApplication.run(CompetitionApplication.class,args); diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionIndexControll.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionIndexControll.java new file mode 100644 index 0000000..5035f4a --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/CompetitionIndexControll.java @@ -0,0 +1,19 @@ +package com.tz.platform.competitiion.api; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.competitiion.api.biz.CompetitionIndexBiz; +import com.tz.platform.competitiion.api.dto.IndexListCompetitionDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping(value = "/api/competition") +public class CompetitionIndexControll { + + @Autowired + private CompetitionIndexBiz competitionIndexBiz; + @GetMapping(value = "list/{pageNo}") + public Result list(@PathVariable("pageNo") Integer pageNo){ + return competitionIndexBiz.list(pageNo); + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionIndexBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionIndexBiz.java new file mode 100644 index 0000000..3f5551f --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/biz/CompetitionIndexBiz.java @@ -0,0 +1,17 @@ +package com.tz.platform.competitiion.api.biz; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.competitiion.api.dto.IndexListCompetitionDTO; +import com.tz.platform.repository.CompetitionDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component +public class CompetitionIndexBiz { + @Autowired + private CompetitionDao competitionDao; + + public Result list(int pageNo){ + return Result.error(""); + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/IndexCompetitionDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/IndexCompetitionDTO.java new file mode 100644 index 0000000..2818247 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/IndexCompetitionDTO.java @@ -0,0 +1,17 @@ +package com.tz.platform.competitiion.api.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +@Data +public class IndexCompetitionDTO implements Serializable { + private Integer id; + private String name; + private String sponsor; + private Date startTime; + private Date endTime; + private Date sinUpStartTime; + private Date sinUpEndTime; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/IndexListCompetitionDTO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/IndexListCompetitionDTO.java new file mode 100644 index 0000000..c33e356 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/api/dto/IndexListCompetitionDTO.java @@ -0,0 +1,12 @@ +package com.tz.platform.competitiion.api.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class IndexListCompetitionDTO implements Serializable { + private List list; + private Integer total; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java new file mode 100644 index 0000000..500484b --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/CompetitionJob.java @@ -0,0 +1,39 @@ +package com.tz.platform.competitiion.job; + +import com.tz.platform.competitiion.job.biz.CompetitionJobBiz; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import java.util.concurrent.TimeUnit; + +@Component +@Slf4j +public class CompetitionJob { + + +// @Autowired +// private RedisTemplate redisTemplate; + + @Autowired + private CompetitionJobBiz jobBiz; + + @Scheduled(cron = "*/60 * * * * ?") + public void processCompetition(){ +// String jobName = "competitionJob"; +// Boolean isWorking = redisTemplate.opsForValue().get(jobName); +// if(isWorking == null ||isWorking == false){ +// redisTemplate.opsForValue().set(jobName,true,10*60, TimeUnit.SECONDS); +// System.out.println("competition Job"); +// try { +// jobBiz.updateCompetitionStatus(); +// }catch (Exception ex) { +// log.error(jobName,ex.getMessage()); +// }finally { +// redisTemplate.opsForValue().set(jobName,false,10*60, TimeUnit.SECONDS); +// } +// } + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/CompetitionJobBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/CompetitionJobBiz.java new file mode 100644 index 0000000..454d12f --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/job/biz/CompetitionJobBiz.java @@ -0,0 +1,44 @@ +package com.tz.platform.competitiion.job.biz; + +import com.tz.platform.entity.Competition; +import com.tz.platform.repository.CompetitionDao; +import com.tz.platform.repository.CompetitionMemberDao; +import com.tz.platform.repository.CompetitionTaskDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class CompetitionJobBiz { + + @Autowired + private CompetitionDao competitionDao; + + @Autowired + private CompetitionTaskDao taskDao; + + @Autowired + private CompetitionMemberDao memberDao; + + /** + * 大赛开始状态检测 + */ + public void updateCompetitionStatus(){ + List competitionList = competitionDao.findAllByStatus(0); + } + + /** + * 大赛数据预热 + */ + public void preHeat(){ + + } + + /** + * 大赛结束处理 + */ + public void overCompetition(){ + + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionMemberController.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionMemberController.java index 227d4f2..1e326f7 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionMemberController.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionMemberController.java @@ -16,11 +16,17 @@ public class CompetitionMemberController extends BaseController { @Autowired private TeamTemplateImportBiz biz; + + @PostMapping("excel") public Result uploadExcel(MultipartFile file,Long competitionId,Integer stageId){ long userNo = getUserNo(); - System.out.println(userNo); - System.out.println(file.getOriginalFilename()); return biz.excelImport(file,userNo,competitionId,stageId); } + + @PostMapping("importMember") + public Result importMember(MultipartFile file,Long competitionId,Integer stageId){ + return biz.importMember(file,getUserNo(),competitionId,stageId); + } + } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/PCCompetitionMemberContoller.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/PCCompetitionMemberContoller.java new file mode 100644 index 0000000..e90405f --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/PCCompetitionMemberContoller.java @@ -0,0 +1,23 @@ +package com.tz.platform.competitiion.pc; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.competitiion.pc.biz.MemberInfoBiz; +import com.tz.platform.competitiion.pc.vo.AddMemberVO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping(value = "/pc/competition/member") +public class PCCompetitionMemberContoller { + + @Autowired + private MemberInfoBiz memberInfoBiz; + + @PostMapping(value = "add") + public Result addMember(@RequestBody AddMemberVO vo){ + return memberInfoBiz.addMember(vo); + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/MemberInfoBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/MemberInfoBiz.java new file mode 100644 index 0000000..1e47a01 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/MemberInfoBiz.java @@ -0,0 +1,71 @@ +package com.tz.platform.competitiion.pc.biz; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.bo.MemberInfo; +import com.tz.platform.competitiion.pc.vo.AddMemberVO; +import com.tz.platform.competitiion.pc.vo.MemberInfoVO; +import com.tz.platform.entity.CompetitionMember; +import com.tz.platform.entity.CompetitionTeam; +import com.tz.platform.feign.user.IFeignUser; +import com.tz.platform.repository.CompetitionMemberDao; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +@Component +public class MemberInfoBiz { + + @Autowired + private CompetitionMemberDao memberDao; + + + @Autowired + private IFeignUser feignUser; + + public Result delete(MemberInfoVO vo){ + memberDao.deleteById(vo.getId()); + return Result.success("success"); + } + + public Result addMember(AddMemberVO vo){ + + if(vo.getIds() == null||vo.getIds().size() == 0){ + return Result.error("请选择团队成员"); + } + if(vo.getCompetitionId() == null ||vo.getCompetitionId()<=0){ + return Result.error("大赛信息不能为空"); + } + if(vo.getStageId() == null||vo.getStageId()<=0){ + return Result.error("阶段信息不能为空"); + } + CompetitionTeam team = new CompetitionTeam(); + team.setTeamName("无"); + team.setTeacherName(vo.getTeacher()); + team.setCompetitionId(vo.getCompetitionId()); + team.setStageId(vo.getStageId()); + + List memberInfoList = feignUser.listByIds(vo.getIds()); + + List memberList = new ArrayList<>(); + + memberInfoList.forEach(m->{ + CompetitionMember member = new CompetitionMember(); + member.setCompetitionId(vo.getCompetitionId()); + member.setName(m.getName()); + member.setSchool(m.getSchool()); + team.setSchool(m.getSchool()); + member.setStudentNo(m.getStudentNo()); + member.setUserId(m.getId()); + member.setStageId(vo.getStageId()); + member.setTeacher(vo.getTeacher()); + member.setTeamId(0); + member.setTeamName("个人赛"); + memberList.add(member); + }); + + memberDao.saveAll(memberList); + return Result.success("success"); + } +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java index b368919..8a8af45 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java @@ -1,6 +1,7 @@ package com.tz.platform.competitiion.pc.biz; import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.bo.Stage; import com.tz.platform.competitiion.pc.dto.CompetitionDTO; import com.tz.platform.competitiion.pc.dto.PageCompetitionDTO; import com.tz.platform.competitiion.pc.vo.CompetitionVO; @@ -34,7 +35,36 @@ public class PCCompetitionBiz { } Competition competition = new Competition(); BeanUtils.copyProperties(vo,competition); - competition.setStartTime(new Date()); + Date startTime=competition.getStageList().get(0).getStartTime(); + Date endTime =competition.getStageList().get(competition.getStageList().size()-1).getEndTime(); + Stage signupStage = competition.getStageList().stream().filter(stage -> stage.isEnableSignUp()).findFirst().orElse(null); + Date signUpStartTime = null; + Date signupEndTime = null; + + if(endTime.getTime()<=startTime.getTime()){ + return Result.error("结束时间必须大于开始时间"); + } + + if(signupStage !=null){ + signUpStartTime = signupStage.getSignUpStartTime(); + signupEndTime = signupStage.getSingUpEndTime(); + if(signupEndTime.getTime()<=signUpStartTime.getTime()){ + return Result.error("报名截止时间必须大于报名开始时间"); + } + if(signupEndTime.getTime()>startTime.getTime()){ + return Result.error("报名截止时间必须早于大赛开始时间"); + } + competition.setEnableSignup(true); + }else{ + competition.setEnableSignup(false); + } + + + competition.setStartTime(startTime); + competition.setEndTime(endTime); + competition.setSignupStartTime(signUpStartTime); + competition.setSignupEndTime(signupEndTime); + competition.setStatus(-1); if(competition.getId() == null){ competition.setCreateTime(new Date()); diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamBiz.java index 9990474..c40c095 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamBiz.java @@ -8,6 +8,7 @@ import com.tz.platform.competitiion.pc.vo.*; import com.tz.platform.entity.CompetitionMember; import com.tz.platform.entity.CompetitionTeam; import com.tz.platform.feign.user.IFeignUser; +import com.tz.platform.repository.CompetitionDao; import com.tz.platform.repository.CompetitionMemberDao; import com.tz.platform.repository.CompetitionTeamDao; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +17,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import javax.persistence.criteria.Predicate; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -28,6 +30,9 @@ public class TeamBiz { @Autowired private CompetitionMemberDao memberDao; + @Autowired + private CompetitionDao competitionDao; + @Autowired private IFeignUser feignUser; @@ -65,7 +70,14 @@ public class TeamBiz { } public Result deleteMember(TeamMemberVO vo){ - memberDao.deleteById(vo.getId()); + CompetitionMember member = memberDao.getById(vo.getId()); + if(member!=null){ + memberDao.deleteById(vo.getId()); + updatePeopleCount(member.getCompetitionId()); + }else { + return Result.error("成员不存在"); + } + return Result.success("success"); } @@ -98,15 +110,24 @@ public class TeamBiz { member.setUserId(m.getId()); member.setStageId(team.getStageId()); member.setTeamId(team.getId()); + member.setTeacher(team.getTeacherName()); member.setTeamName(team.getTeamName()); + member.setLevelId(m.getLevelId()); memberList.add(member); }); memberDao.saveAll(memberList); + updatePeopleCount(team.getCompetitionId()); + return Result.success("success"); } + private void updatePeopleCount(Long competitionId){ + int peopleCount = memberDao.countByCompetitionId(competitionId); + competitionDao.updatePeopleCount(peopleCount,competitionId); + } + public Result updateTeamInfo(TeamInfoVO vo){ if(vo.getId() == null){ return Result.error("团队id不能这空"); @@ -181,10 +202,32 @@ public class TeamBiz { if(vo.getPageSize()<= 0){ vo.setPageSize(20); } - Pageable pageable = PageRequest.of(vo.getPageNo(),vo.getPageSize()); - Page onePage = memberDao.findAllByCompetitionIdAndStageId(vo.getCompetitionId(),vo.getStageId(),pageable); + PageTeamMemberDTO dto = new PageTeamMemberDTO(); - dto.setPage(onePage); + Pageable pageable = PageRequest.of(vo.getPageNo(),vo.getPageSize()); + if(StringUtils.isEmpty(vo.getName())){ + Page onePage = memberDao.findAllByCompetitionIdAndStageId(vo.getCompetitionId(),vo.getStageId(),pageable); + dto.setPage(onePage); + }else{ + Page onePage = memberDao.findAll((root, criteriaQuery, criteriaBuilder) -> { + List predicateList = new ArrayList<>(); + predicateList.add(criteriaBuilder.equal(root.get("competitionId"),vo.getCompetitionId())); + predicateList.add(criteriaBuilder.equal(root.get("stageId"),vo.getStageId())); + Predicate[] andPre = new Predicate[predicateList.size()]; + Predicate cidAndSidPredicate = criteriaBuilder.and(predicateList.toArray(andPre)); + + List predicateList1 = new ArrayList<>(); + predicateList1.add(criteriaBuilder.equal(root.get("studentNo"),vo.getName())); + predicateList1.add(criteriaBuilder.equal(root.get("name"),vo.getName())); + Predicate[] orPre = new Predicate[predicateList1.size()]; + Predicate studentNoOrNamePre = criteriaBuilder.or(predicateList1.toArray(orPre)); + + return criteriaQuery.where(cidAndSidPredicate,studentNoOrNamePre).getRestriction(); + },pageable); + dto.setPage(onePage); + } + + return Result.success(dto); } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamTemplateImportBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamTemplateImportBiz.java index 4b78e0f..f3dfbb6 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamTemplateImportBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamTemplateImportBiz.java @@ -37,8 +37,15 @@ public class TeamTemplateImportBiz { if(competitionId==null||stageId == null){ return Result.error("大赛或赛段不能为空"); } + ExcelUtil util = null; try { - ExcelUtil util = new ExcelUtil(file.getInputStream()); + util = new ExcelUtil(file.getInputStream()); + } catch (Exception e) { + e.printStackTrace(); + return Result.error("上传失败"); + } + try { + List teamInfoList = new ArrayList<>(); List neesSave = new ArrayList<>(); for(int rowNo = 2;rowNo 0){ @@ -76,9 +84,9 @@ public class TeamTemplateImportBiz { teamInfo.setMemberList(memberInfoList); teamInfoList.add(teamInfo); } - teamInfoList.forEach(info -> { - System.out.println(info.getTeamName()+" "+info.getSchool()+" "+info.getLevel()+ " "+info.getTeacher()+" memberCount:"+info.getMemberList().size()); - }); +// teamInfoList.forEach(info -> { +// System.out.println(info.getTeamName()+" "+info.getSchool()+" "+info.getLevel()+ " "+info.getTeacher()+" memberCount:"+info.getMemberList().size()); +// }); List mList = user.batchInsert(neesSave); @@ -103,6 +111,8 @@ public class TeamTemplateImportBiz { member.setStageId(stageId); member.setTeamId(teamInfo.getId()); member.setTeamName(teamInfo.getTeamName()); + member.setLevelId(info.getLevelId()); + member.setTeacher(team.getTeacher()); memberList.add(member); } }); @@ -110,12 +120,84 @@ public class TeamTemplateImportBiz { }); - System.out.println(mList.size()); + } catch (Exception e) { e.printStackTrace(); return Result.error("上传失败"); + }finally { + util.close(); } return Result.success("success"); } + + + public Result importMember(MultipartFile file,Long userNo,Long competitionId,Integer stageId){ + if(competitionId==null||stageId == null){ + return Result.error("大赛或赛段不能为空"); + } + + ExcelUtil util = null; + try { + util = new ExcelUtil(file.getInputStream()); + } catch (Exception e) { + e.printStackTrace(); + } + + try { + int lastRowNo = util.getLastRowNum(); + List memberInfoList = new ArrayList<>(); + for(int rowNo = 1;rowNo<=lastRowNo;rowNo++){ + Row row = util.getRow(rowNo); + String name = util.getCellValue(row.getCell(0)); + String studentNo = util.getCellValue(row.getCell(1)); + String level = util.getCellValue(row.getCell(2)); + String province = util.getCellValue(row.getCell(3)); + String school = util.getCellValue(row.getCell(4)); + String teacher = util.getMergedRegionValue(rowNo,5); + MemberImport memberInfo = new MemberImport(); + if(StringUtils.isEmpty(studentNo)){ + continue; + } + memberInfo.setName(name); + memberInfo.setStudentNo(studentNo); + memberInfo.setSchool(school); + memberInfo.setLevel(level); + memberInfo.setProvince(province); + memberInfo.setTeacher(teacher); + memberInfo.setUserNo(userNo); + memberInfoList.add(memberInfo); + + } + List mList = user.batchInsert(memberInfoList); + + List memberList = new ArrayList<>(); + mList.forEach(info -> { + MemberImport m = memberInfoList.stream().filter(mi -> mi.getStudentNo().equals(info.getStudentNo())).findFirst().orElse(null); + + CompetitionMember member = new CompetitionMember(); + member.setCompetitionId(competitionId); + member.setName(info.getName()); + member.setSchool(info.getSchool()); + member.setStudentNo(info.getStudentNo()); + member.setUserId(info.getId()); + member.setStageId(stageId); + member.setTeamId(0); + member.setTeamName("个人赛"); + member.setLevelId(info.getLevelId()); + member.setTeacher(m.getTeacher()); + memberList.add(member); + }); + memberDao.saveAll(memberList); + return Result.success("导入成功"); + + } catch (Exception e) { + e.printStackTrace(); + }finally { + if(util!=null){ + util.close(); + } + } + return Result.error("导入失败"); + } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/AddMemberVO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/AddMemberVO.java new file mode 100644 index 0000000..de5c040 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/AddMemberVO.java @@ -0,0 +1,13 @@ +package com.tz.platform.competitiion.pc.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class AddMemberVO { + private Long competitionId; + private Integer stageId; + private List ids; + private String teacher; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/MemberInfoVO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/MemberInfoVO.java new file mode 100644 index 0000000..e45625c --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/MemberInfoVO.java @@ -0,0 +1,9 @@ +package com.tz.platform.competitiion.pc.vo; + +import lombok.Data; + +@Data +public class MemberInfoVO { + private Integer id; + +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/PageTeamMemberVO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/PageTeamMemberVO.java index 127da65..f905f56 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/PageTeamMemberVO.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/PageTeamMemberVO.java @@ -8,5 +8,6 @@ public class PageTeamMemberVO { private Integer pageNo; private Long competitionId; private Integer stageId; + private String name; } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java index a3cc498..a6db125 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java @@ -28,10 +28,16 @@ public class Competition { private Integer teamMaxCount; private Integer status; private Integer peopleCount; + private boolean enableSignup; @Column(columnDefinition = "TIMESTAMP") private Date startTime; @Column(columnDefinition = "TIMESTAMP") private Date endTime; + @Column(columnDefinition = "TIMESTAMP") + private Date signupStartTime; + @Column(columnDefinition = "TIMESTAMP") + private Date signupEndTime; + @Type(type = "json") @Column(columnDefinition = "json") private List stageList; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionMember.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionMember.java index 64f1c43..1e05cd2 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionMember.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/CompetitionMember.java @@ -6,7 +6,7 @@ import javax.persistence.*; @Entity @Data -@Table(indexes={@Index(columnList = "competitionId,stageId,teamId")}) +@Table(indexes={@Index(columnList = "competitionId,stageId,teamId"),@Index(columnList = "studentNo"),@Index(columnList = "name")}) public class CompetitionMember { @Id @@ -22,7 +22,9 @@ public class CompetitionMember { private String teamName; private String accountId; private String accountPwd; + private String teacher; private Long examSore; private Long financeSore; private Long examCostTime; + private Integer levelId; } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/AccountInfo.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/AccountInfo.java new file mode 100644 index 0000000..de925ba --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/AccountInfo.java @@ -0,0 +1,23 @@ +package com.tz.platform.juejing.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class AccountInfo { + private String account_id; + private String account_name; + /** + * 账号名称 + */ + private String title; + + /** + * 账户类型, 1 = 股票, 4 = 期货 + */ + private List sec_types; + + private Info info; + +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/CashInfo.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/CashInfo.java new file mode 100644 index 0000000..2df4516 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/CashInfo.java @@ -0,0 +1,39 @@ +package com.tz.platform.juejing.bo; + +import lombok.Data; + +import java.util.Date; + +@Data +public class CashInfo { + private String account_id; + private String account_name; + /** + * 净值/总资产 + */ + private Long nav; + /** + * 可用资产 + */ + private Long available; + + /** + * 浮动盈亏 + */ + private Long fpnl; + + /** + * 累计手续费 + */ + private Long cum_commission; + + private Long cum_inout; + private Long last_inout; + /** + * 0未知; 1交易 ; 2出入金/出入持仓 + */ + private Integer change_reason; + private Date create_at; + private Date updated_at; + +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Info.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Info.java new file mode 100644 index 0000000..2c9c399 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/Info.java @@ -0,0 +1,13 @@ +package com.tz.platform.juejing.bo; + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class Info { + private List appid; + private Date create_at; + private Date updated_at; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ListCashInfo.java b/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ListCashInfo.java new file mode 100644 index 0000000..d16a90e --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/juejing/bo/ListCashInfo.java @@ -0,0 +1,10 @@ +package com.tz.platform.juejing.bo; + +import lombok.Data; + +import java.util.List; + +@Data +public class ListCashInfo { + private List data; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionDao.java index 936bbec..fb62cbd 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionDao.java @@ -2,9 +2,22 @@ package com.tz.platform.repository; import com.tz.platform.entity.Competition; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; @Repository public interface CompetitionDao extends JpaRepository { Competition getById(Long id); + + List findAllByStatus(Integer status); + + @Transactional + @Modifying + @Query(value = "update competition set people_count =:pcount where id=:id",nativeQuery = true) + int updatePeopleCount( @Param("pcount") Integer pcount ,@Param("id") Long id); } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java index 7a7a902..3ef1fe9 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java @@ -4,16 +4,23 @@ import com.tz.platform.entity.CompetitionMember; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.stereotype.Repository; import java.util.List; @Repository -public interface CompetitionMemberDao extends JpaRepository { +public interface CompetitionMemberDao extends JpaRepository, JpaSpecificationExecutor { List findAllByCompetitionIdAndStageIdAndTeamIdIn(Long cmpId,Integer stageId,List teamIds); List findAllByCompetitionIdAndStageIdAndUserIdIn(Long cmpId,Integer stageId,List ids); Page findAllByCompetitionIdAndStageId(Long cmpid, Integer stageId , Pageable pageable); + + Page findAllByStudentNoOrName(String studentNo,String name,Pageable pageable); + + int countByCompetitionId(Long competitionId); + + CompetitionMember getById(Integer id); } diff --git a/tz/exam/exam-service/pom.xml b/tz/exam/exam-service/pom.xml index 3890a37..138d2cc 100644 --- a/tz/exam/exam-service/pom.xml +++ b/tz/exam/exam-service/pom.xml @@ -28,6 +28,10 @@ com.tz user-feign + + com.tz + system-feign + org.springframework.boot diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/entity/Question.java b/tz/exam/exam-service/src/main/java/com/tz/platform/entity/Question.java index 9bcd987..70ce31b 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/entity/Question.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/entity/Question.java @@ -13,7 +13,7 @@ import java.util.Date; import java.util.List; @Entity -@Table(name = "question",indexes = {@Index(columnList = "type"),@Index(columnList = "courseId,questionType,levelId"),@Index(columnList = "userNo")}) +@Table(name = "question",indexes = {@Index(columnList = "stem"),@Index(columnList = "type"),@Index(columnList = "courseId,questionType,levelId"),@Index(columnList = "userNo")}) @Data @TypeDef(name = "json", typeClass = JsonStringType.class) public class Question { @@ -28,7 +28,6 @@ public class Question { private String title; private Long score; private Integer type; - @Column(columnDefinition = "text") private String stem; @Column(columnDefinition = "text") private String content; diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionImportController.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionImportController.java new file mode 100644 index 0000000..066df6c --- /dev/null +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/PCQuestionImportController.java @@ -0,0 +1,24 @@ +package com.tz.platform.pc; + +import com.tz.platform.common.core.base.BaseController; +import com.tz.platform.common.core.base.Result; +import com.tz.platform.pc.biz.QuestionImportBiz; +import com.tz.platform.pc.dto.ListQuestionImportDTO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +@RestController +@RequestMapping(value = "/api/question/") +public class PCQuestionImportController extends BaseController { + + @Autowired + private QuestionImportBiz importBiz; + + @PostMapping(value = "importExcel") + public Result importExcell(MultipartFile file){ + return importBiz.importExcel(file,getUserNo()); + } +} diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/QuestionImportBiz.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/QuestionImportBiz.java new file mode 100644 index 0000000..222e8f4 --- /dev/null +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/biz/QuestionImportBiz.java @@ -0,0 +1,172 @@ +package com.tz.platform.pc.biz; + +import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.bo.Answer; +import com.tz.platform.common.core.enmus.QuestionTypeEnum; +import com.tz.platform.common.core.enmus.UserTypeEnum; +import com.tz.platform.common.core.tools.ExcelUtil; +import com.tz.platform.entity.Course; +import com.tz.platform.entity.Question; +import com.tz.platform.feign.IFeignStudentLevel; +import com.tz.platform.feign.user.IFeignUser; +import com.tz.platform.feign.user.vo.UserVo; +import com.tz.platform.feign.vo.StudentLevelVo; +import com.tz.platform.pc.dto.ListQuestionImportDTO; +import com.tz.platform.pc.dto.QuestionImportDTO; +import com.tz.platform.repository.CourseDao; +import com.tz.platform.repository.QuestionDao; +import org.apache.catalina.User; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +@Component +public class QuestionImportBiz { + @Autowired + private QuestionDao questionDao; + + @Autowired + private CourseDao courseDao; + + @Autowired + private IFeignUser feignUser; + + @Autowired + private IFeignStudentLevel feignStudentLevel; + + public Result importExcel(MultipartFile file,Long userNo){ + if(userNo == null ||userNo<=0){ + return Result.error("无权操作"); + } + UserVo user = feignUser.getByUserNo(userNo); + if(user==null||user.getUserType()< UserTypeEnum.TEACHER.getCode()){ + return Result.error("无权操作"); + } + ListQuestionImportDTO dto = new ListQuestionImportDTO(); + List courseList = courseDao.findAll(); + List studentLevelList = feignStudentLevel.list(); + try { + ExcelUtil util = new ExcelUtil(file.getInputStream()); + int lastRowNum = util.getLastRowNum(); + List list = new ArrayList<>(); + for(int rowNo = 1;rowNo<=lastRowNum;){ + int lineCount = util.getMergedRegionLineCount(rowNo,1); + if(lineCount <=0){ + return Result.error("格式错误"); + } + QuestionImportDTO subDto = new QuestionImportDTO(); + String stem = util.getMergedRegionValue(rowNo,0); + String questType = util.getMergedRegionValue(rowNo,1); + String levelNamme = util.getMergedRegionValue(rowNo,2); + String courseName = util.getMergedRegionValue(rowNo,3); + String score = util.getMergedRegionValue(rowNo,4); + String analysis = util.getMergedRegionValue(rowNo,5); + + subDto.setStem(stem); + subDto.setQuestionType(questType); + subDto.setCourseName(courseName); + try { + Course course = courseList.stream().filter(c -> c.getName().contains(courseName)).findFirst().orElse(null); + if (course == null) { + subDto.setStatus("课程不存在"); + } + subDto.setCourseName(courseName); + + if (StringUtils.isEmpty(stem)) { + subDto.setStatus("题干为空"); + }else{ + Question temp = questionDao.getByStem(stem); + if (temp != null) { + subDto.setStatus("题干已存在"); + } + if (course != null && temp == null && StringUtils.hasText(stem)) { + Question question = new Question(); + StudentLevelVo levelVo = studentLevelList.stream().filter(l -> l.getName().contains(levelNamme)).findFirst().orElse(null); + + if (levelVo == null) { + question.setLevelId(0); + question.setLevelName("通用"); + } else { + question.setLevelId(levelVo.getId()); + question.setLevelName(levelNamme); + } + + question.setStem(stem); + question.setUserNo(userNo); + question.setCreateTime(new Date()); + question.setStatus(0); + question.setScore(Long.parseLong(score)); + question.setCreatorId(userNo); + question.setCreator(user.getName()); + question.setLevelName(levelNamme); + question.setType(0); + question.setAnalysis(analysis); + question.setCourseId(course.getId()); + QuestionTypeEnum qt = null; + if(questType.equals(QuestionTypeEnum.SINGLE.getDesc())){ + qt = QuestionTypeEnum.SINGLE; + }else if(questType.equals(QuestionTypeEnum.MULTY.getDesc())){ + qt = QuestionTypeEnum.MULTY; + }else if(questType.equals(QuestionTypeEnum.JUDGE.getDesc())) { + qt= QuestionTypeEnum.JUDGE; + } + if(qt == null){ + subDto.setStatus("题型未匹配"); + }else{ + List answerList = new ArrayList<>(); + List answerIds = new ArrayList<>(); + for(int i = 0 ;i0&&answerList.size()>0&&qt!=null){ + question.setQuestionType(qt.getCode()); + question.setAnswerList(answerList); + question.setAnswerId(answerIds); + question = questionDao.save(question); + subDto.setId(question.getId()); + subDto.setStatus("成功"); + } + } + } + } + }catch (Exception ex){ + subDto.setStatus("数据异常"); + } + list.add(subDto); + rowNo+=lineCount; + } + dto.setList(list); + } catch (Exception e) { + return Result.error("解析失败"); + } + + return Result.success(dto); + } +} diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/ListQuestionImportDTO.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/ListQuestionImportDTO.java new file mode 100644 index 0000000..9c36b44 --- /dev/null +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/ListQuestionImportDTO.java @@ -0,0 +1,11 @@ +package com.tz.platform.pc.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class ListQuestionImportDTO implements Serializable { + List list; +} diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/QuestionDTO.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/QuestionDTO.java index 6cc80a4..2e733bb 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/QuestionDTO.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/QuestionDTO.java @@ -12,9 +12,9 @@ public class QuestionDTO implements Serializable { private Long id; private Long courseId; private String courseName; - private Long levelId; + private Integer levelId; private String levelName; - private Long questionType; + private Integer questionType; private String title; private Long score; private Integer type; diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/QuestionImportDTO.java b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/QuestionImportDTO.java new file mode 100644 index 0000000..39e2551 --- /dev/null +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/pc/dto/QuestionImportDTO.java @@ -0,0 +1,12 @@ +package com.tz.platform.pc.dto; + +import lombok.Data; + +@Data +public class QuestionImportDTO { + private String stem; + private String questionType; + private Long id; + private String courseName; + private String status; +} diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java b/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java index cd4e9ac..c7de81f 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/repository/QuestionDao.java @@ -35,6 +35,8 @@ public interface QuestionDao extends JpaRepository { int countByQuestionTypeAndType(Integer qtype,Integer type); + Question getByStem(String stem); + @Transactional @Modifying @Query(value = "update question set status=:status where id in (:ids)",nativeQuery = true) diff --git a/tz/system/system-service/src/main/java/com/tz/platform/system/feign/biz/FeignStudentLevelBiz.java b/tz/system/system-service/src/main/java/com/tz/platform/system/feign/biz/FeignStudentLevelBiz.java index 8b724bd..b2ed4a4 100644 --- a/tz/system/system-service/src/main/java/com/tz/platform/system/feign/biz/FeignStudentLevelBiz.java +++ b/tz/system/system-service/src/main/java/com/tz/platform/system/feign/biz/FeignStudentLevelBiz.java @@ -1,13 +1,12 @@ package com.tz.platform.system.feign.biz; +import com.tz.platform.common.core.tools.BeanUtils; import com.tz.platform.entity.StudentLevel; import com.tz.platform.feign.vo.StudentLevelVo; import com.tz.platform.repository.StudentLevelDao; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.ArrayList; import java.util.List; @Component @@ -16,9 +15,8 @@ public class FeignStudentLevelBiz { private StudentLevelDao studentLevelDao; public List list(){ - List rs= new ArrayList<>(); List studentLevels = studentLevelDao.findAll(); - BeanUtils.copyProperties(studentLevels,rs); + List rs = BeanUtils.copyProperties(studentLevels,StudentLevelVo.class); return rs; } } diff --git a/tz/user/user-feign/src/main/java/com/tz/platform/feign/user/vo/UserVo.java b/tz/user/user-feign/src/main/java/com/tz/platform/feign/user/vo/UserVo.java index 7f60900..a121767 100644 --- a/tz/user/user-feign/src/main/java/com/tz/platform/feign/user/vo/UserVo.java +++ b/tz/user/user-feign/src/main/java/com/tz/platform/feign/user/vo/UserVo.java @@ -26,6 +26,8 @@ public class UserVo { * 状态(1:正常,0:禁用) */ private Integer statusId; + + private Integer userType; /** * 用户编号 */ diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/feign/biz/FeignUserBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/feign/biz/FeignUserBiz.java index 3018971..771c14a 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/feign/biz/FeignUserBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/feign/biz/FeignUserBiz.java @@ -76,6 +76,7 @@ public class FeignUserBiz { user.setMobileSalt(StrUtil.get32UUID()); user.setMobilePsw(DigestUtil.sha1Hex(user.getMobileSalt() + "tz2022")); user.setUserType(UserTypeEnum.USER.getCode()); + user.setUserNo(m.getUserNo()); ProvinceVO provinceVO = provinceVOList.stream().filter(p -> p.getName().contains(m.getProvince())).findFirst().orElse(null); StudentLevelVo levelVo = levelList.stream().filter(l -> l.getName().contains(m.getLevel())).findFirst().orElse(null); if(provinceVO!=null){ diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/biz/PcUserInfoBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/biz/PcUserInfoBiz.java index 05a35cb..5fa9cc5 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/biz/PcUserInfoBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/biz/PcUserInfoBiz.java @@ -49,6 +49,9 @@ public class PcUserInfoBiz { Pageable pageable = PageRequest.of(bo.getPageNo(),bo.getPageSize()); User user = new User(); user.setUserType(bo.getUserType()); + if(bo.getLevelId()>0){ + user.setLevelId(bo.getLevelId()); + } if(StringUtils.hasText(bo.getName())){ if(bo.getName().matches("\\d+")){ user.setStudentNo(bo.getName()); diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/bo/UserPageBO.java b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/bo/UserPageBO.java index d37d33f..8eae831 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/bo/UserPageBO.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/bo/UserPageBO.java @@ -9,5 +9,6 @@ public class UserPageBO implements Serializable { private int pageNo; private int pageSize; private int userType; + private int levelId; private String name; }