排行榜功能
parent
4989914ab4
commit
d108e7325e
@ -1,36 +1,125 @@
|
||||
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.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.IndexListCompetitionDTO;
|
||||
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.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.data.domain.Page;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class CompetitionIndexBiz {
|
||||
@Autowired
|
||||
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){
|
||||
int pageSize = 20;
|
||||
pageNo = pageNo - 1;
|
||||
if(pageNo<0){
|
||||
pageNo = 0;
|
||||
}
|
||||
pageNo =pageNo* pageSize;
|
||||
Pageable pageable = PageRequest.of(pageNo,pageSize);
|
||||
Page<Competition> competitionList = competitionDao.findAllByStatus(type,pageable);
|
||||
System.out.println(competitionList.getContent());
|
||||
IndexListCompetitionDTO dto = new IndexListCompetitionDTO();
|
||||
List<IndexCompetitionDTO> competitionDTOList = BeanUtils.copyProperties(competitionList.getContent(),IndexCompetitionDTO.class);
|
||||
dto.setList(competitionDTOList);
|
||||
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;
|
||||
|
||||
import com.tz.platform.feign.exam.vo.QuestionVo;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class SubmitVo {
|
||||
private Long userNo;
|
||||
private Long compId;
|
||||
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