Merge remote-tracking branch 'origin/EP-Indicator' into EP-Indicator

# Conflicts:
#	blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/UserTimeMoneyDto.java
pull/1/head
unclekh 5 years ago
commit 1151a126b6
  1. 7
      blockchain-server/blockchain-server-yyyf/pom.xml
  2. 2
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/dto/UserTimeMoneyDto.java
  3. 70
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/indicators/DefaultIndicatorsManager.java
  4. 26
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/indicators/IndicatorsManager.java
  5. 31
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/indicators/dto/AssetsReporter.java
  6. 2
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/indicators/dto/IndicatorsDetail.java
  7. 46
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/indicators/dto/IndicatorsTypeEnum.java
  8. 48
      blockchain-server/blockchain-server-yyyf/src/main/java/com/blockchain/server/yyyf/task/ExamProcessTask.java

@ -68,6 +68,11 @@
<artifactId>poi-ooxml-schemas</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.3.6</version>
</dependency>
</dependencies>
@ -87,4 +92,4 @@
</plugins>
</build>
</project>
</project>

@ -4,6 +4,7 @@ import com.blockchain.server.yyyf.entity.YyyfMoney;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.math.BigDecimal;
@ -18,6 +19,7 @@ import java.util.Date;
*/
@ApiModel("用户余额Dto")
@Data
@EqualsAndHashCode(callSuper = true)
public class UserTimeMoneyDto extends YyyfMoney implements Serializable {
private static final long serialVersionUID = 5093452353347277920L;

@ -0,0 +1,70 @@
package com.blockchain.server.yyyf.indicators;
import cn.hutool.core.map.MapUtil;
import com.blockchain.server.yyyf.entity.AssessUserTarget;
import com.blockchain.server.yyyf.indicators.dto.AssetsReporter;
import com.blockchain.server.yyyf.indicators.dto.IndicatorsTypeEnum;
import com.blockchain.server.yyyf.mapper.AssessUserTargetMapper;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* @author fengyu
*/
@Service
@AllArgsConstructor
public class DefaultIndicatorsManager implements IndicatorsManager {
private final AssessUserTargetMapper assessUserTargetMapper;
@Override
public void saveAssetsReporter(List<AssetsReporter> assetsReporterList) {
//TODO save to db
}
@Override
public List<AssetsReporter> getAssetsReporterListByAssessUserId(String assessUserId) {
//TODO select from db
return null;
}
@Override
public Map<String, Float> calculatePageIndicators(String assessUserId) {
List<AssessUserTarget> assessUserTargets = assessUserTargetMapper.selectAllStudentAssessUserTargetByIssueId(assessUserId);
Map<String, Float> result = MapUtil.newHashMap();
assessUserTargets.parallelStream().forEach(assessUser -> {
Float total = this.calculateIndicators(assessUserId, IndicatorsTypeEnum.parseCode(assessUser.getCode()));
result.put(assessUser.getCode(), total);
});
return result;
}
@Override
public BigDecimal calculateCurrentTotalAssets(String userId) {
//feign interface call
//1.获取 币币总资产 + 法币总资产 + 数字钱包 + 初始资产 + 挂单资金
//cache rate
//2.计算总资产 转换成RMB
//cache RMB rate
return null;
}
/**
* calculate single indicator
*
* @param assessUserId page result id
* @param type indicators type
* @return indicators result
* @author fengyu.wang
* @date 2020-05-27 22:34:19
*/
private Float calculateIndicators(String assessUserId, IndicatorsTypeEnum type) {
//indicator impl
return null;
}
}

@ -2,13 +2,18 @@ package com.blockchain.server.yyyf.indicators;
import com.blockchain.server.yyyf.indicators.dto.AssetsReporter;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
/**
* @author fengyu
*/
public interface IndicatorsManager {
/**
* save assets reporter item
*
* @param assetsReporterList assets reporter list to do save
* @author fengyu.wang
* @date 2020-05-27 22:32:30
*/
@ -18,22 +23,12 @@ public interface IndicatorsManager {
* get assets reporter item by assessUserId
*
* @param assessUserId page result id
* @return assets reporter list
* @author fengyu.wang
* @date 2020-05-27 22:32:49
*/
List<AssetsReporter> getAssetsReporterListByAssessUserId(String assessUserId);
/**
* calculate single indicator
*
* @param assessUserId page result id
* @param type indicators type
* @return indicators result
* @author fengyu.wang
* @date 2020-05-27 22:34:19
*/
float calculateIndicators(String assessUserId, String type);
/**
* calculate indicator by full exam
*
@ -44,4 +39,13 @@ public interface IndicatorsManager {
*/
Map<String, Float> calculatePageIndicators(String assessUserId);
/**
* calculate current total asset
*
* @param userId system user id
* @return current total assets (RMB)
* @author fengyu.wang
* @date 2020-06-02 20:15:15
*/
BigDecimal calculateCurrentTotalAssets(String userId);
}

@ -1,6 +1,9 @@
package com.blockchain.server.yyyf.indicators.dto;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
@ -12,10 +15,28 @@ import java.util.Date;
* @date 2020-05-27 22:59:34
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AssetsReporter {
private String assessUserId;//成绩id
private String coinName;//币种
private int days;//交易天数
private BigDecimal assets;//资产总额
private Date createTime;//创建时间
/**
* 成绩id
*/
private String assessUserId;
/**
* 币种
*/
private String coinName;
/**
* 交易天数
*/
private long days;
/**
* 资产总额
*/
private BigDecimal assets;
/**
* 创建时间
*/
private Date createTime;
}

@ -11,6 +11,6 @@ import lombok.Data;
@Data
public class IndicatorsDetail {
private String assessUserId;
private String type;//indicator type
private IndicatorsTypeEnum type;
private float indicator;
}

@ -0,0 +1,46 @@
package com.blockchain.server.yyyf.indicators.dto;
import lombok.Getter;
/**
* @author fengyu
*/
public enum IndicatorsTypeEnum {
/*年化收益率*/
ANNUAL_GROWTH_RATE("AnnualGrowthRate"),
/*收益率*/
GROWTH_RATE("GrowthRate"),
/*累计收益率*/
TOTAL_GROWTH_RATE("TotalGrowthRate"),
/*波动率*/
FLUCTUATION_RATE("FluctuationRate"),
/*夏普比率*/
SHAPE_RATE("ShapeRate"),
/*盈亏比*/
PROFIT_LOSS_RATE("ProfitLossRate"),
/*最大回撤率*/
MAX_DRAWDOWN_RATE("MaxDrawdownRate"),
/*最大亏损率*/
MAX_LOSS_RATE("MaxLossRate"),
/*风险率(资产负债比)*/
ASSET_LIABILITY_RISK_RATE("AssetLiabilityRiskRate"),
/*TVPI*/
TVPI("TVPI");
@Getter
private final String code;
IndicatorsTypeEnum(String code) {
this.code = code;
}
public static IndicatorsTypeEnum parseCode(String code) {
for (IndicatorsTypeEnum value : IndicatorsTypeEnum.values()) {
if (code.equals(value.getCode())) {
return value;
}
}
throw new IllegalArgumentException();
}
}

@ -1,39 +1,47 @@
package com.blockchain.server.yyyf.task;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.blockchain.server.yyyf.dto.UserTimeMoneyDto;
import com.blockchain.server.yyyf.entity.AssessUser;
import com.blockchain.server.yyyf.indicators.IndicatorsManager;
import com.blockchain.server.yyyf.indicators.dto.AssetsReporter;
import com.blockchain.server.yyyf.service.AssessUserService;
import org.springframework.beans.factory.annotation.Autowired;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author fengyu
*/
@Configuration
@EnableScheduling
@AllArgsConstructor
public class ExamProcessTask {
@Autowired
private AssessUserService assessUserService;
private final AssessUserService assessUserService;
private final IndicatorsManager indicatorsManager;
//下面的原注解报错,先注释掉:llegalStateException: Encountered invalid
// @Scheduled method 'processRecording': Cron expression must consist of 6 fields (found 7 in "0 0 0 1/1 * ? *")
//@Scheduled(cron="0 0 0 1/1 * ? *")
//每天 00:01:00 执行
@Scheduled(cron = "0 1 0 * * ?")
public void processRecording() {
//1.获取所有正在进行的考核、练习的 学生id(子系统userId),注意可能多个练习和一个考试并存
//包含以渔有方userId、本系统userId(qUserId)、开始时间(startTime)以及各个币种余额情况
List<UserTimeMoneyDto> userTimeMoneyDtos = this.assessUserService.selectUserTimeMoneyDtosForNotEnd();
//2.获取 币币总资产 + 法币总资产 + 数据钱包 + 初始资产 + 挂单资金
//3.计算总资产 转换成RMB
//4.获取学生考核开始时间 计算当前进行到第几天
//5.获取学生试卷Id assessUserId
//6.保存到DB
List<UserTimeMoneyDto> userTimeMoneyList = this.assessUserService.selectUserTimeMoneyDtosForNotEnd();
List<AssetsReporter> assetsReporterList = new ArrayList<>(userTimeMoneyList.size());
DateTime now = DateUtil.date();
userTimeMoneyList.forEach(entity -> {
BigDecimal assets = indicatorsManager.calculateCurrentTotalAssets(entity.getQUserId());
assetsReporterList.add(AssetsReporter.builder()
.assessUserId(entity.getAssessUserId())
.assets(assets)
.days(DateUtil.between(entity.getStartTime(), now, DateUnit.DAY))
.coinName("RMB")
.createTime(now)
.build());
});
indicatorsManager.saveAssetsReporter(assetsReporterList);
}
}

Loading…
Cancel
Save