排行榜功能
parent
4989914ab4
commit
d108e7325e
@ -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("获取数据失败");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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;
|
||||||
|
}
|
@ -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);
|
||||||
|
}
|
Loading…
Reference in New Issue