排行榜功能

sale
tianea 3 years ago
parent 4989914ab4
commit d108e7325e

@ -253,6 +253,13 @@ public class DateUtil {
return calendar.getTime(); return calendar.getTime();
} }
public static Date addHours(Date date,int hours){
Calendar calendar = Calendar.getInstance();
long millis = getMillis(date) + ((long) hours) * 1 * 3600 * 1000;
calendar.setTimeInMillis(millis);
return calendar.getTime();
}
/** /**
* *
* *

@ -1,7 +1,13 @@
package com.tz.platform.competitiion.api; package com.tz.platform.competitiion.api;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.tz.platform.common.core.base.BaseController; import com.tz.platform.common.core.base.BaseController;
import com.tz.platform.common.core.base.Result;
import com.tz.platform.competitiion.api.biz.CompetitionExamBiz; import com.tz.platform.competitiion.api.biz.CompetitionExamBiz;
import com.tz.platform.competitiion.api.dto.ExamDTO;
import com.tz.platform.competitiion.api.dto.SubmitResultDTO;
import com.tz.platform.competitiion.api.vo.SubmitQuestionVO;
import com.tz.platform.competitiion.api.vo.SubmitVo; import com.tz.platform.competitiion.api.vo.SubmitVo;
import com.tz.platform.feign.exam.vo.QuestionVo; import com.tz.platform.feign.exam.vo.QuestionVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -22,8 +28,14 @@ public class CompetitionExamController extends BaseController {
} }
@PostMapping(value = "submit") @PostMapping(value = "submit")
public String submit(@RequestBody SubmitVo vo){ public Result<SubmitResultDTO> submit(@RequestBody String vo){
System.out.println(vo.getCompId()+" "+vo.getStageId()+ " "+ vo.getQList().size()); SubmitVo questionVO = JSONUtil.toBean(vo, SubmitVo.class);
return "success"; return examBiz.submit(questionVO);
} }
@GetMapping(value = "start")
public Result<ExamDTO> startExam(@RequestParam("compId") Long compId, @RequestParam("stageId") Integer stageId){
return examBiz.startExam(compId,stageId,getUserNo());
}
} }

@ -1,14 +1,17 @@
package com.tz.platform.competitiion.api; package com.tz.platform.competitiion.api;
import cn.hutool.json.JSONArray;
import com.tz.platform.common.core.base.BaseController;
import com.tz.platform.common.core.base.Result; import com.tz.platform.common.core.base.Result;
import com.tz.platform.competitiion.api.biz.CompetitionIndexBiz; import com.tz.platform.competitiion.api.biz.CompetitionIndexBiz;
import com.tz.platform.competitiion.api.dto.CompetitionDTO;
import com.tz.platform.competitiion.api.dto.IndexListCompetitionDTO; import com.tz.platform.competitiion.api.dto.IndexListCompetitionDTO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@RestController @RestController
@RequestMapping(value = "/api/competition") @RequestMapping(value = "/api/competition")
public class CompetitionIndexControll { public class CompetitionIndexControll extends BaseController {
@Autowired @Autowired
private CompetitionIndexBiz competitionIndexBiz; private CompetitionIndexBiz competitionIndexBiz;
@ -17,4 +20,20 @@ public class CompetitionIndexControll {
public Result<IndexListCompetitionDTO> list(@PathVariable("type") Integer type,@PathVariable("pageNo") Integer pageNo){ public Result<IndexListCompetitionDTO> list(@PathVariable("type") Integer type,@PathVariable("pageNo") Integer pageNo){
return competitionIndexBiz.list(pageNo,type); return competitionIndexBiz.list(pageNo,type);
} }
@GetMapping(value = "get")
public Result<CompetitionDTO> get(@RequestParam("compId") Long compId){
return competitionIndexBiz.get(compId);
}
@GetMapping(value = "position")
public Result<JSONArray> getTenPosition(@RequestParam("compId") Long cmpId, @RequestParam("stageId") Integer stageId){
return competitionIndexBiz.position(getUserNo(),cmpId,stageId);
}
@GetMapping(value = "system")
public Result<String> getSystemInfo(){
return Result.error("failed");
}
} }

@ -1,36 +1,125 @@
package com.tz.platform.competitiion.api.biz; package com.tz.platform.competitiion.api.biz;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.tz.platform.common.core.base.Result; import com.tz.platform.common.core.base.Result;
import com.tz.platform.common.core.tools.BeanUtils; import com.tz.platform.common.core.tools.BeanUtils;
import com.tz.platform.competitiion.api.dto.CompetitionDTO;
import com.tz.platform.competitiion.api.dto.IndexCompetitionDTO; import com.tz.platform.competitiion.api.dto.IndexCompetitionDTO;
import com.tz.platform.competitiion.api.dto.IndexListCompetitionDTO; import com.tz.platform.competitiion.api.dto.IndexListCompetitionDTO;
import com.tz.platform.entity.Competition; import com.tz.platform.entity.Competition;
import com.tz.platform.entity.CompetitionMember;
import com.tz.platform.entity.JueJinToken;
import com.tz.platform.feign.user.IFeignUser;
import com.tz.platform.juejin.JueJinApi;
import com.tz.platform.repository.CompetitionDao; import com.tz.platform.repository.CompetitionDao;
import com.tz.platform.repository.CompetitionMemberDao;
import com.tz.platform.repository.CompetitionTaskDao;
import com.tz.platform.repository.JueJinTokenDao;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@Component @Component
@Slf4j
public class CompetitionIndexBiz { public class CompetitionIndexBiz {
@Autowired @Autowired
private CompetitionDao competitionDao; private CompetitionDao competitionDao;
@Autowired
private JueJinTokenDao jueJinTokenDao;
@Autowired
private CompetitionMemberDao competitionMemberDao;
@Autowired
private CompetitionTaskDao competitionTaskDao;
@Autowired
private IFeignUser feignUser;
public Result<IndexListCompetitionDTO> list(int pageNo,int type){ public Result<IndexListCompetitionDTO> list(int pageNo,int type){
int pageSize = 20; int pageSize = 20;
pageNo = pageNo - 1;
if(pageNo<0){ if(pageNo<0){
pageNo = 0; pageNo = 0;
} }
pageNo =pageNo* pageSize; pageNo =pageNo* pageSize;
Pageable pageable = PageRequest.of(pageNo,pageSize); Pageable pageable = PageRequest.of(pageNo,pageSize);
Page<Competition> competitionList = competitionDao.findAllByStatus(type,pageable); Page<Competition> competitionList = competitionDao.findAllByStatus(type,pageable);
System.out.println(competitionList.getContent());
IndexListCompetitionDTO dto = new IndexListCompetitionDTO(); IndexListCompetitionDTO dto = new IndexListCompetitionDTO();
List<IndexCompetitionDTO> competitionDTOList = BeanUtils.copyProperties(competitionList.getContent(),IndexCompetitionDTO.class); List<IndexCompetitionDTO> competitionDTOList = BeanUtils.copyProperties(competitionList.getContent(),IndexCompetitionDTO.class);
dto.setList(competitionDTOList); dto.setList(competitionDTOList);
return Result.success(dto); return Result.success(dto);
} }
public Result<CompetitionDTO> get(Long compId){
Competition competition = competitionDao.getById(compId);
CompetitionDTO dto = BeanUtils.copyProperties(competition,CompetitionDTO.class);
return Result.success(dto);
}
public Result<JSONArray> position(Long userNo,Long compId,Integer stageId){
// UserVo userVo = feignUser.getByUserNo(userNo);
JueJinToken jueJinToken = jueJinTokenDao.getById(1);
JueJinApi jueJinApi = new JueJinApi(jueJinToken.getToken());
CompetitionMember member = competitionMemberDao.getByCompetitionIdAndStageIdAndUserId(compId,stageId,userNo);
if(member == null ){
return Result.error("未报名参赛");
}
if(StringUtils.isEmpty(member.getAccountId())){
return Result.error("无交易系统权限");
// CompetitionTask task = competitionTaskDao.getByCompetitionIdAndStageId(compId,stageId);
// int type = task.getTradeType();
// if(type != 1){
// type = 4;
// }
// AccountInfo accountInfo = jueJinApi.createAccount(userVo.getName(),task.getInitCapital(),type);
}
try {
String jsonStr = jueJinApi.getTenPosition(member.getAccountId());
JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
JSONArray resultArray = new JSONArray();
if (jsonObject.containsKey("data")) {
JSONArray dataArray = jsonObject.getJSONArray("data");
List<String> symbols = new ArrayList<>();
dataArray.forEach(jo ->{
JSONObject positionObj = (JSONObject) jo;
if(positionObj.containsKey("available")){
String symbol = positionObj.getStr("symbol");
symbols.add(symbol);
resultArray.put(positionObj);
}
});
String stockStr = jueJinApi.getStockInfo(String.join(",",symbols));
JSONObject stockObj = JSONUtil.parseObj(stockStr);
if(stockObj.containsKey("data")){
JSONArray jsonArray = stockObj.getJSONArray("data");
jsonArray.forEach(stock->{
JSONObject s = (JSONObject) stock;
JSONObject tmp =(JSONObject) resultArray.stream().filter(object -> {
JSONObject t = (JSONObject)object;
return t.getStr("symbol").equals(s.getStr("symbol"));
}).findFirst().orElse(null);
tmp.set("sec_name",s.getStr("sec_name"));
});
}
return Result.success(resultArray);
}
}catch (Exception ex){
log.error("用户:{} 竞赛:{} 阶段:{} 持仓数据获取失败:{}",userNo,compId,stageId,ex.getMessage());
}
return Result.error("获取数据失败");
}
} }

@ -3,20 +3,24 @@ package com.tz.platform.competitiion.api.dto;
import com.tz.platform.common.core.bo.Stage; import com.tz.platform.common.core.bo.Stage;
import lombok.Data; import lombok.Data;
import java.io.Serializable;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@Data @Data
public class CompetitionDTO { public class CompetitionDTO implements Serializable {
private Integer id; private Long id;
private String name; private String name;
private String sponsor; private String sponsor;
private String supporter;
private String thumbnail;
private Date startTime; private Date startTime;
private Date endTime; private Date endTime;
private Date sinUpStartTime; private Date signupStartTime;
private Date sinUpEndTime; private Date signupEndTime;
private Boolean enableSignup;
private Integer type;
private Integer peopleCount; private Integer peopleCount;
private Integer teamCount; private Integer teamCount;
private Integer type;
private List<Stage> stageList; private List<Stage> stageList;
} }

@ -0,0 +1,15 @@
package com.tz.platform.competitiion.api.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class ExamDTO implements Serializable {
@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date startTime;
@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date endTime;
}

@ -11,14 +11,17 @@ import java.util.Date;
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class IndexCompetitionDTO implements Serializable { public class IndexCompetitionDTO implements Serializable {
private Integer id; private Long id;
private String name; private String name;
private String sponsor; private String sponsor;
private String supporter; private String supporter;
private String thumbnail; private String thumbnail;
private Date startTime; private Date startTime;
private Date endTime; private Date endTime;
private Date sinUpStartTime; private Date signupStartTime;
private Date sinUpEndTime; private Date signupEndTime;
private Boolean enableSignup; private Boolean enableSignup;
private Integer type;
private Integer peopleCount;
private Integer teamCount;
} }

@ -0,0 +1,10 @@
package com.tz.platform.competitiion.api.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class SubmitResultDTO implements Serializable {
private Long score;
}

@ -0,0 +1,8 @@
package com.tz.platform.competitiion.api.dto;
import lombok.Data;
@Data
public class TaskDTO {
}

@ -0,0 +1,8 @@
package com.tz.platform.competitiion.api.dto;
import lombok.Data;
@Data
public class TaskListDto {
}

@ -0,0 +1,11 @@
package com.tz.platform.competitiion.api.vo;
import lombok.Data;
import java.util.List;
@Data
public class SubmitQuestionVO {
private Long id;
private Integer subId;
private List<Integer> ids;
}

@ -1,13 +1,13 @@
package com.tz.platform.competitiion.api.vo; package com.tz.platform.competitiion.api.vo;
import com.tz.platform.feign.exam.vo.QuestionVo;
import lombok.Data; import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class SubmitVo { public class SubmitVo {
private Long userNo;
private Long compId; private Long compId;
private Integer stageId; private Integer stageId;
private List<QuestionVo> qList; private List<SubmitQuestionVO> qList;
} }

@ -1,7 +1,12 @@
package com.tz.platform.competitiion.job; package com.tz.platform.competitiion.job;
import com.tz.platform.competitiion.job.biz.CompetitionJobBiz; import com.tz.platform.competitiion.job.biz.CompetitionJobBiz;
import com.tz.platform.competitiion.job.biz.RankingBiz;
import com.tz.platform.entity.JueJinToken;
import com.tz.platform.juejin.JueJinApi;
import com.tz.platform.repository.JueJinTokenDao;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.checkerframework.checker.units.qual.A;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisCallback; import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
@ -22,6 +27,10 @@ public class CompetitionJob {
@Autowired @Autowired
private CompetitionJobBiz jobBiz; private CompetitionJobBiz jobBiz;
@Autowired
private RankingBiz rankingBiz;
/** /**
* *
*/ */
@ -45,6 +54,30 @@ public class CompetitionJob {
} }
} }
// @Scheduled(cron = "*/5 * * * * ?")
public void fetchRanking(){
String jobName = "rankingJob";
boolean lock = lock(jobName,ms);
if(lock){
try {
rankingBiz.fetchRanking();
}catch (Exception ex){
}finally {
unLock(jobName);
}
}
}
@Scheduled(cron = "*/5 * * * * ?")
public void fetchPic(){
String jobName = "picJob";
boolean lock = lock(jobName,ms);
if(lock){
}
}
/** /**
* *
*/ */

@ -5,7 +5,7 @@ import com.tz.platform.entity.Competition;
import com.tz.platform.entity.CompetitionMember; import com.tz.platform.entity.CompetitionMember;
import com.tz.platform.entity.CompetitionTask; import com.tz.platform.entity.CompetitionTask;
import com.tz.platform.feign.exam.IFeignExam; import com.tz.platform.feign.exam.IFeignExam;
import com.tz.platform.feign.exam.qo.CacheQuetionQO; import com.tz.platform.feign.exam.qo.CacheQuestionQO;
import com.tz.platform.feign.user.IFeignUser; import com.tz.platform.feign.user.IFeignUser;
import com.tz.platform.repository.CompetitionDao; import com.tz.platform.repository.CompetitionDao;
import com.tz.platform.repository.CompetitionMemberDao; import com.tz.platform.repository.CompetitionMemberDao;
@ -85,7 +85,7 @@ public class CompetitionJobBiz {
ids.addAll(taskQuestion.getQuestionIds()); ids.addAll(taskQuestion.getQuestionIds());
}); });
long ms = (task.getExamEndTime().getTime() - now)+24*3600*1000; long ms = (task.getExamEndTime().getTime() - now)+24*3600*1000;
CacheQuetionQO qo = new CacheQuetionQO(); CacheQuestionQO qo = new CacheQuestionQO();
qo.setIds(ids); qo.setIds(ids);
qo.setKey("exam_"+competition.getId()+"_"+current.getId()); qo.setKey("exam_"+competition.getId()+"_"+current.getId());
qo.setMs(ms); qo.setMs(ms);

@ -0,0 +1,79 @@
package com.tz.platform.competitiion.job.biz;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.tz.platform.common.core.tools.DateUtil;
import com.tz.platform.entity.*;
import com.tz.platform.juejin.JueJinApi;
import com.tz.platform.repository.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.List;
@Component
@Slf4j
public class RankingBiz {
@Autowired
private JueJinTokenDao jueJinTokenDao;
@Autowired
private CompetitionDao competitionDao;
@Autowired
private CompetitionTaskDao taskDao;
@Autowired
private CompetitionMemberDao memberDao;
@Autowired
private RankingDao rankingDao;
public void fetchRanking(){
JueJinToken jueJinToken = jueJinTokenDao.getById(1);
if(jueJinToken == null) {return;}
JueJinApi jueJinApi = new JueJinApi(jueJinToken.getToken());
List<Competition> competitionList = competitionDao.findAllByStatus(1);
String endTime = DateUtil.format(new Date());
competitionList.forEach(competition -> {
try {
CompetitionTask currentTask = taskDao.getByCompetitionIdAndStageId(competition.getId(), competition.getCurrentStage());
String startTime = DateUtil.format(currentTask.getOperationStartTime());
String baseRatio = jueJinApi.getBaseRatio(startTime, endTime);
List<CompetitionMember> memberList = memberDao.findAllByCompetitionIdAndStageId(competition.getId(), competition.getCurrentStage());
memberList.forEach(member -> {
if (StringUtils.hasText(member.getAccountId())) {
String jsonStr = jueJinApi.createReport(member.getAccountId(), endTime);
if(StringUtils.isEmpty(jsonStr)){
return;
}
JSONObject jsonObject = JSONUtil.parseObj(jsonStr);
if(jsonObject.containsKey("report_id")){
Integer reportId =jsonObject.getInt("report_id");
// JSONArray jsonArray = jsonObject.getJSONArray("indicator_durations");
String contentStr = jueJinApi.getReport(reportId.toString());
Ranking ranking = new Ranking();
ranking.setAccountId(member.getAccountId());
// ranking.setTotalRatio(baseRatio);
rankingDao.save(ranking);
}
}
});
}catch (Exception ex){
log.error("排行榜数据获取失败:{}",competition.getId(),ex);
}
});
}
private Long computeCombineScore(CompetitionTask task){
return 0L;
}
}

@ -17,6 +17,9 @@ public class CompetitionGroup {
private Long competitionId; private Long competitionId;
private Long userNo; private Long userNo;
private String name; private String name;
/**
* 1 2
*/
private Integer limitType; private Integer limitType;
@Type(type = "json") @Type(type = "json")
@Column(columnDefinition = "json") @Column(columnDefinition = "json")

@ -7,7 +7,7 @@ import java.util.Date;
@Entity @Entity
@Data @Data
@Table(indexes={@Index(columnList = "competitionId,stageId,teamId"),@Index(columnList = "studentNo"),@Index(columnList = "name"),@Index(columnList = "school")}) @Table(indexes={@Index(columnList = "competitionId,stageId,teamId"),@Index(columnList = "userId"),@Index(columnList = "studentNo"),@Index(columnList = "name"),@Index(columnList = "school")})
public class CompetitionMember { public class CompetitionMember {
@Id @Id
@ -27,8 +27,28 @@ public class CompetitionMember {
private Long examScore; private Long examScore;
private Long financeScore; private Long financeScore;
private Long combineScore; private Long combineScore;
private Integer personalRank;
private Integer teamRank;
private Date examStartTime; private Date examStartTime;
private Date examEndTime; private Date examEndTime;
private Long examCostTime; private Long examCostTime;
private Integer levelId; private Integer levelId;
private Long initFounds;
private Long totalFounds;
private Long availableFounds;
private Long marketValue;
private Long currentRatio;
private Long highestRatio;
private Long overRatio;
private Long commission;
private Long totalRatio;
private Long baseRatio;
private Long yearRatio;
private Long maxDrawDown;
private String kammaRatio;
private String sharpRatio;
private Integer openCount;
private Integer closeCount;
private Long winRatio;
private Integer reportId;
} }

@ -0,0 +1,27 @@
package com.tz.platform.entity;
import com.tz.platform.competitiion.api.vo.SubmitQuestionVO;
import com.vladmihalcea.hibernate.type.json.JsonStringType;
import lombok.Data;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.util.List;
@Data
@Entity
@TypeDef(name = "json", typeClass = JsonStringType.class)
public class ExamPaper {
@Id
private String id;
private Long userNo;
private Long compId;
private Integer stageId;
@Type(type = "json")
@Column(columnDefinition = "json")
private List<SubmitQuestionVO> qList;
}

@ -0,0 +1,14 @@
package com.tz.platform.entity;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
@Data
@Entity
public class JueJinToken {
@Id
private Integer id;
private String token;
}

@ -12,8 +12,8 @@ import java.util.Date;
@Entity @Entity
public class Ranking { public class Ranking {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) private String id;
private Integer id;
private String accountId; private String accountId;
/** /**
@ -34,7 +34,7 @@ public class Ranking {
/** /**
* *
*/ */
private Long accumulativeTotalProfitLoss; private Long totalRatio;
/** /**
* *
@ -51,6 +51,27 @@ public class Ranking {
*/ */
private Long pnlRation; private Long pnlRation;
/**
*
*/
private Long baseRatio;
/**
*
*/
private Long teamRatio;
/**
*
*/
private Integer personalRank;
/**
*
*/
private Integer teamRank;
/** /**
* *
*/ */
@ -89,6 +110,6 @@ public class Ranking {
/** /**
* *
*/ */
private Date updateTime; private String updateTime;
} }

@ -0,0 +1,14 @@
package com.tz.platform.entity;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
@Data
@Entity
public class Stock {
@Id
private String symbol;
private String name;
}

@ -0,0 +1,28 @@
package com.tz.platform.entity;
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Index;
import javax.persistence.Table;
@Data
@Entity
@Table(indexes = {@Index(columnList = "accountId")})
public class TenPosition {
@Id
private String id;
private String accountId;
private String symbol;
private String name;
private Long volume;
private String available;
private String lastPrice;
private String price;
private String amount;
private String ratio;
private String profit;
private Long createTime;
private Long updateTime;
}

@ -1,5 +1,8 @@
package com.tz.platform.juejin; package com.tz.platform.juejin;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.tz.platform.common.core.base.BaseException; import com.tz.platform.common.core.base.BaseException;
import com.tz.platform.common.core.tools.HttpUtil; import com.tz.platform.common.core.tools.HttpUtil;
@ -20,6 +23,12 @@ public class JueJinApi {
headers.put("Authorization","bearer "+token); headers.put("Authorization","bearer "+token);
} }
public JueJinApi(String token){
this.token = token;
headers.put("Authorization","bearer "+token);
}
/** /**
* *
* @param accountName * @param accountName
@ -73,7 +82,7 @@ public class JueJinApi {
String url = baseUrl+ "/perfweb-rpcgw/api/v1/sim/detail/"+accountId+"?title="+title; String url = baseUrl+ "/perfweb-rpcgw/api/v1/sim/detail/"+accountId+"?title="+title;
String content = HttpUtil.get(url,headers); String content = HttpUtil.get(url,headers);
logger.info("报告生成请求: {}",content); logger.info("报告生成请求: {}",content);
return ""; return content;
} }
/** /**
@ -92,11 +101,19 @@ public class JueJinApi {
* *
* @return * @return
*/ */
public String getBaseRatio(){ public String getBaseRatio(String start,String end){
String url = baseUrl +"/ds-history-rpcgw/v3/data-history/benchmark-return?symbol=SHSE.000300&frequency=1d&start_time=2022-03-07&end_time=2022-03-09&adjust=0"; String url = baseUrl +"/ds-history-rpcgw/v3/data-history/benchmark-return?symbol=SHSE.000300&frequency=1d&start_time="+start+"&end_time="+end+"&adjust=0";
String content = HttpUtil.get(url,headers); String content = HttpUtil.get(url,headers);
logger.info("基准收益率:{}",content);
return content; JSONObject jsonObject = JSONUtil.parseObj(content);
if(jsonObject.containsKey("data")){
JSONArray jsonArray = jsonObject.getJSONArray("data");
JSONObject ratioObj = (JSONObject) jsonArray.get(jsonArray.size()-1);
logger.info("基准收益率:{}",ratioObj.get("ratio").toString());
return ratioObj.get("ratio").toString();
}
return "";
} }
/** /**
@ -107,7 +124,14 @@ public class JueJinApi {
public String getTenPosition(String accountId){ public String getTenPosition(String accountId){
String url = baseUrl + "/broker-rpcgw/v3/account-trade/positions/"+accountId; String url = baseUrl + "/broker-rpcgw/v3/account-trade/positions/"+accountId;
String content = HttpUtil.get(url,headers); String content = HttpUtil.get(url,headers);
logger.info("10大持仓{}",content); logger.info("持仓数据:{}",content);
return content;
}
public String getStockInfo(String symbols){
String url =baseUrl+"/ds-core-rpcgw/v3/data-fundamental/instrument-infos?symbols="+symbols;
String content = HttpUtil.get(url,headers);
logger.info("股票信息:{}",content);
return content; return content;
} }
@ -156,8 +180,8 @@ public class JueJinApi {
String zhangSan1Qihuo = "0cfc7894-9f4e-11ec-bf20-00163e0e6ad0"; String zhangSan1Qihuo = "0cfc7894-9f4e-11ec-bf20-00163e0e6ad0";
String zhangSan1GuPiao = ""; String zhangSan1GuPiao = "";
String start = "1970-01-01"; String start = "2022-03-07";
String end = "2022-03-15"; String end = "2022-03-21";
// AccountInfo info = api.createAccount("张三1",1000000L,4); // AccountInfo info = api.createAccount("张三1",1000000L,4);
// System.out.println(info.getAccount_id()); // System.out.println(info.getAccount_id());
@ -165,11 +189,12 @@ public class JueJinApi {
// api.getCashInfo("2e41a913-9dc1-11ec-89b3-00163e0e6ad0"); // api.getCashInfo("2e41a913-9dc1-11ec-89b3-00163e0e6ad0");
// api.test(); // api.test();
// api.createReport(accountId,"report"+ System.currentTimeMillis()); // api.createReport(accountId,"report"+ System.currentTimeMillis());
// api.getReport("10"); // api.getCashInfo(accountId);
// api.getTenPosition(accountId); api.getReport("489327");
// api.getStockInfo("SHSE.600547,SHSE.603160");
// api.getProfit("2022-03-11","2022-03-15"); // api.getProfit("2022-03-11","2022-03-15");
api.getHeavy(accountId,start,end); // api.getHeavy(accountId,start,end);
// api.getBaseRatio(); // api.getBaseRatio(start,end);
} }
} }

@ -30,11 +30,11 @@ public interface CompetitionDao extends JpaRepository<Competition,Long> {
@Transactional @Transactional
@Modifying @Modifying
@Query(value = "upate cometition set status=:status where id=:compId",nativeQuery = true) @Query(value = "update competition set status=:status where id=:compId",nativeQuery = true)
int updateStatus(@Param("compId") Long compId,@Param("status") Integer status); int updateStatus(@Param("compId") Long compId,@Param("status") Integer status);
@Transactional @Transactional
@Modifying @Modifying
@Query(value = "upate cometition set status=:status,stage_name=:stageName,stage_id=:stageId where id=:compId",nativeQuery = true) @Query(value = "update competition set status=:status,current_stage_name=:stageName,current_stage=:stageId where id=:compId",nativeQuery = true)
int updateStatus(@Param("compId") Long compId,@Param("status") Integer status,@Param("stageName") String stageName,@Param("stageId") Integer stageId); int updateStatus(@Param("compId") Long compId,@Param("status") Integer status,@Param("stageName") String stageName,@Param("stageId") Integer stageId);
} }

@ -5,8 +5,12 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
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.stereotype.Repository;
import java.util.Date;
import java.util.List; import java.util.List;
@Repository @Repository
@ -25,4 +29,21 @@ public interface CompetitionMemberDao extends JpaRepository<CompetitionMember,In
int countByCompetitionId(Long competitionId); int countByCompetitionId(Long competitionId);
CompetitionMember getById(Integer id); CompetitionMember getById(Integer id);
CompetitionMember getByUserId(Long userId);
CompetitionMember getByCompetitionIdAndStageIdAndUserId(Long compId,Integer stageId,Long userId);
@Modifying
@Query(value = "update competition_member set exam_score=:score where user_id=:userNo and stage_id=:stageId and competition_id=:compId",nativeQuery = true)
int updateScore(@Param("userNo") Long userNo,@Param("stageId") Integer stageId,@Param("compId") Long comId, @Param("score") Long score);
@Modifying
@Query(value = "update competition_member set exam_start_time=:startTime where user_id=:userNo and stage_id=:stageId and competition_id=:compId",nativeQuery = true)
int updateExamStartTime(@Param("userNo") Long userNo,@Param("stageId") Integer stageId,@Param("compId") Long comId, @Param("startTime") Date startTime);
@Modifying
@Query(value = "update competition_member set exam_end_time=:endTime,exam_cost_time=:costTime where user_id=:userNo and stage_id=:stageId and competition_id=:compId",nativeQuery = true)
int updateExamEndTimeAndCostTime(@Param("userNo") Long userNo,@Param("stageId") Integer stageId,@Param("compId") Long comId, @Param("endTime") Date endTime, @Param("costTime") Long costTime);
} }

@ -0,0 +1,10 @@
package com.tz.platform.repository;
import com.tz.platform.entity.JueJinToken;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface JueJinTokenDao extends JpaRepository<JueJinToken,Integer> {
JueJinToken getById(Integer id);
}

@ -0,0 +1,9 @@
package com.tz.platform.repository;
import com.tz.platform.entity.Ranking;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface RankingDao extends JpaRepository<Ranking,String> {
}

@ -0,0 +1,10 @@
package com.tz.platform.repository;
import com.tz.platform.entity.Stock;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface StockDao extends JpaRepository<Stock,String> {
Stock getBySymbol(String symbol);
}

@ -0,0 +1,12 @@
package com.tz.platform.repository;
import com.tz.platform.entity.TenPosition;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface TenPositionDao extends JpaRepository<TenPosition,String> {
List<TenPosition> findByAccountId(String accountId);
}

@ -1,5 +1,8 @@
server: server:
port: 50012 port: 50012
error:
whitelabel:
enabled: false
spring: spring:
application: application:
name: tz-competition-service name: tz-competition-service

@ -1,10 +1,8 @@
package com.tz.platform.feign.exam; package com.tz.platform.feign.exam;
import com.tz.platform.feign.exam.qo.CacheQuetionQO; import com.tz.platform.feign.exam.qo.CacheQuestionQO;
import com.tz.platform.feign.exam.vo.QuestionVo; import com.tz.platform.feign.exam.vo.QuestionVo;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -14,8 +12,8 @@ import java.util.List;
public interface IFeignExam { public interface IFeignExam {
@PostMapping(value = "/feign/exam/question/putToCache") @PostMapping(value = "/feign/exam/question/putToCache")
boolean putToCache(@RequestBody CacheQuetionQO qo); boolean putToCache(@RequestBody CacheQuestionQO qo);
@PostMapping(value = "/feign/exam/question/list") @PostMapping(value = "/feign/exam/question/list")
List<QuestionVo> listQusetion(@RequestBody CacheQuetionQO qo); List<QuestionVo> listQusetion(@RequestBody CacheQuestionQO qo);
} }

@ -5,7 +5,7 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class CacheQuetionQO { public class CacheQuestionQO {
private List<Long> ids; private List<Long> ids;
private String key; private String key;
private Long ms; private Long ms;

@ -1,5 +1,7 @@
package com.tz.platform.feign.exam.vo; package com.tz.platform.feign.exam.vo;
import com.tz.platform.common.core.bo.Answer;
import com.tz.platform.common.core.bo.SubQuestionVO;
import lombok.Data; import lombok.Data;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@ -8,6 +10,20 @@ import java.util.List;
@Accessors(chain = true) @Accessors(chain = true)
public class QuestionVo { public class QuestionVo {
private Long id; private Long id;
private Long subId; private Long courseId;
private String courseName;
private Integer levelId;
private String levelName;
private Integer questionType;
private String title;
private Long score;
private Integer type;
private String content;
private String stem;
private String stemImg;
private Long creatorId;
List<Answer> answerList;
private String analysis;
private List<Integer> answerId; private List<Integer> answerId;
private List<SubQuestionVO> children;
} }

@ -3,7 +3,7 @@ package com.tz.platform.exam.feign;
import com.tz.platform.common.core.base.BaseController; import com.tz.platform.common.core.base.BaseController;
import com.tz.platform.exam.feign.biz.FeignExamBiz; import com.tz.platform.exam.feign.biz.FeignExamBiz;
import com.tz.platform.feign.exam.IFeignExam; import com.tz.platform.feign.exam.IFeignExam;
import com.tz.platform.feign.exam.qo.CacheQuetionQO; import com.tz.platform.feign.exam.qo.CacheQuestionQO;
import com.tz.platform.feign.exam.vo.QuestionVo; import com.tz.platform.feign.exam.vo.QuestionVo;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -17,12 +17,12 @@ public class FeignExamController extends BaseController implements IFeignExam {
@Override @Override
public boolean putToCache(CacheQuetionQO qo) { public boolean putToCache(CacheQuestionQO qo) {
return feignExamBiz.putToCache(qo.getIds(),qo.getKey(),qo.getMs()); return feignExamBiz.putToCache(qo.getIds(),qo.getKey(),qo.getMs());
} }
@Override @Override
public List<QuestionVo> listQusetion(CacheQuetionQO qo) { public List<QuestionVo> listQusetion(CacheQuestionQO qo) {
return feignExamBiz.list(qo.getIds()); return feignExamBiz.list(qo.getIds());
} }

@ -9,6 +9,7 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.error.ErrorAttributeOptions; import org.springframework.boot.web.error.ErrorAttributeOptions;
import org.springframework.boot.web.reactive.error.DefaultErrorAttributes; import org.springframework.boot.web.reactive.error.DefaultErrorAttributes;
import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler; import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
import org.springframework.core.annotation.Order;
import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferFactory;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
@ -24,6 +25,7 @@ import java.util.Map;
@Component @Component
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@Order(-1)
public class GlobalErrorAttributes extends DefaultErrorAttributes implements ErrorWebExceptionHandler { public class GlobalErrorAttributes extends DefaultErrorAttributes implements ErrorWebExceptionHandler {
private final ObjectMapper objectMapper; private final ObjectMapper objectMapper;
@Override @Override

Loading…
Cancel
Save