|
|
|
@ -5,10 +5,7 @@ import com.github.pagehelper.PageInfo;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.config.Constant;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.config.security.JwtUser;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.dto.MemberVO;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.entity.ForexMarketData;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.entity.Member;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.entity.MemberExample;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.entity.TakeStash;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.entity.*;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.mappers.MemberMapper;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.util.BigDecimalUtils;
|
|
|
|
|
import com.sztzjy.forex.trading_trading.util.ForexMarketDateUtil;
|
|
|
|
@ -28,6 +25,7 @@ import java.util.ArrayList;
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
@Service
|
|
|
|
|
public class MemberService {
|
|
|
|
@ -90,39 +88,39 @@ public class MemberService {
|
|
|
|
|
String trainingName,
|
|
|
|
|
Integer markStatus,
|
|
|
|
|
String keyword,
|
|
|
|
|
Integer schoolId,
|
|
|
|
|
JwtUser user,
|
|
|
|
|
Integer page,
|
|
|
|
|
Integer size) {
|
|
|
|
|
MemberExample example = new MemberExample();
|
|
|
|
|
MemberExample.Criteria criteria = example.createCriteria();
|
|
|
|
|
criteria.andSchoolIdEqualTo(schoolId);
|
|
|
|
|
if (StringUtils.hasText(className)) {
|
|
|
|
|
criteria.andClassGradeEqualTo(className);
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.hasText(trainingName)) {
|
|
|
|
|
criteria.andTrainingNameEqualTo(trainingName);
|
|
|
|
|
}
|
|
|
|
|
if (markStatus != null) {
|
|
|
|
|
//未评分
|
|
|
|
|
if (markStatus == 0) {
|
|
|
|
|
criteria.andReportScoreIsNull();
|
|
|
|
|
} else {
|
|
|
|
|
//已评分
|
|
|
|
|
criteria.andReportScoreIsNotNull();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.hasText(keyword)) {
|
|
|
|
|
criteria.andNameLike("%" + keyword + "%");
|
|
|
|
|
MemberExample.Criteria orCriteria = example.createCriteria();
|
|
|
|
|
orCriteria.andStudentNumberEqualTo("%" + keyword + "%");
|
|
|
|
|
example.or(orCriteria);
|
|
|
|
|
}
|
|
|
|
|
// MemberExample example = new MemberExample();
|
|
|
|
|
// MemberExample.Criteria criteria = example.createCriteria();
|
|
|
|
|
// criteria.andSchoolIdEqualTo(user.getSchoolId());
|
|
|
|
|
// if (StringUtils.hasText(className)) {
|
|
|
|
|
// criteria.andClassGradeEqualTo(className);
|
|
|
|
|
// }
|
|
|
|
|
// if (StringUtils.hasText(trainingName)) {
|
|
|
|
|
// criteria.andTrainingNameEqualTo(trainingName);
|
|
|
|
|
// }
|
|
|
|
|
// if (markStatus != null) {
|
|
|
|
|
// //未评分
|
|
|
|
|
// if (markStatus == 0) {
|
|
|
|
|
// criteria.andReportScoreIsNull();
|
|
|
|
|
// } else {
|
|
|
|
|
// //已评分
|
|
|
|
|
// criteria.andReportScoreIsNotNull();
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// if (StringUtils.hasText(keyword)) {
|
|
|
|
|
// criteria.andNameLike("%" + keyword + "%");
|
|
|
|
|
// MemberExample.Criteria orCriteria = example.createCriteria();
|
|
|
|
|
// orCriteria.andStudentNumberEqualTo("%" + keyword + "%");
|
|
|
|
|
// example.or(orCriteria);
|
|
|
|
|
// }
|
|
|
|
|
PageHelper.startPage(page, size);
|
|
|
|
|
return new PageInfo<>(memberMapper.pagedListMembers(example));
|
|
|
|
|
return new PageInfo<>(memberMapper.pagedListMembers(className, trainingName, markStatus, keyword, user.getSchoolId()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public PageInfo<Member> pageListMemberByTrainingId(String trainingId,
|
|
|
|
|
public PageInfo<MemberVO> pageListMemberByTrainingId(String trainingId,
|
|
|
|
|
Integer classId,
|
|
|
|
|
String keyword,
|
|
|
|
|
Integer index,
|
|
|
|
@ -130,25 +128,26 @@ public class MemberService {
|
|
|
|
|
MemberExample example = new MemberExample();
|
|
|
|
|
MemberExample.Criteria criteria = example.createCriteria();
|
|
|
|
|
criteria.andTrainingIdEqualTo(trainingId);
|
|
|
|
|
if (classId!=null&&classId>0) {
|
|
|
|
|
if (classId != null && classId > 0) {
|
|
|
|
|
criteria.andClassIdEqualTo(classId);
|
|
|
|
|
}
|
|
|
|
|
if(StringUtils.hasText(keyword)){
|
|
|
|
|
criteria.andNameLike("%"+keyword+"%");
|
|
|
|
|
if (StringUtils.hasText(keyword)) {
|
|
|
|
|
criteria.andNameLike("%" + keyword + "%");
|
|
|
|
|
MemberExample.Criteria orCriteria = example.createCriteria();
|
|
|
|
|
orCriteria.andStudentNumberEqualTo("%"+keyword+"%");
|
|
|
|
|
orCriteria.andStudentNumberEqualTo("%" + keyword + "%");
|
|
|
|
|
example.or(orCriteria);
|
|
|
|
|
}
|
|
|
|
|
example.setOrderByClause("stu_rank ASC");
|
|
|
|
|
PageHelper.startPage(index, size);
|
|
|
|
|
return new PageInfo<>(memberMapper.selectByExample(example));
|
|
|
|
|
return new PageInfo<>(memberMapper.selectByCondition(example));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void exportMembers(String className,
|
|
|
|
|
public List<MemberVO> exportMembers(String className,
|
|
|
|
|
String trainingName,
|
|
|
|
|
Integer markStatus,
|
|
|
|
|
String keyword,
|
|
|
|
|
JwtUser user,
|
|
|
|
|
HttpServletResponse response) throws FileNotFoundException {
|
|
|
|
|
MemberExample example = new MemberExample();
|
|
|
|
|
MemberExample.Criteria criteria = example.createCriteria();
|
|
|
|
@ -173,30 +172,8 @@ public class MemberService {
|
|
|
|
|
orCriteria.andStudentNumberEqualTo("%" + keyword + "%");
|
|
|
|
|
example.or(orCriteria);
|
|
|
|
|
}
|
|
|
|
|
List<MemberVO> members = memberMapper.pagedListMembers(example);
|
|
|
|
|
Assert.notNull(members, "没有可导出数据");
|
|
|
|
|
List<String> titles = Arrays.asList("实训任务名称", "班级", "学号", "姓名", "排名", "累计盈亏", "收益率", "模拟交易实训成绩", "实训报告成绩", "总成绩");
|
|
|
|
|
ExcelData excelData = ExcelData.create(titles);
|
|
|
|
|
for (MemberVO member : members) {
|
|
|
|
|
List<Object> rows = new ArrayList<>();
|
|
|
|
|
rows.add(member.getTrainingName());
|
|
|
|
|
rows.add(member.getClassGrade());
|
|
|
|
|
rows.add(member.getStudentNumber());
|
|
|
|
|
rows.add(member.getName());
|
|
|
|
|
rows.add(member.getStuRank());
|
|
|
|
|
rows.add(member.getCumulativeProfitLoss());
|
|
|
|
|
rows.add(member.getYield());
|
|
|
|
|
rows.add(member.getTradeTrainingScore());
|
|
|
|
|
rows.add(member.getTrainingReportScore());
|
|
|
|
|
rows.add(member.getTotalScore());
|
|
|
|
|
excelData.addRow(rows);
|
|
|
|
|
}
|
|
|
|
|
String fileName = "学生排行榜数据.xlsx";
|
|
|
|
|
String file = fileUtil.getFullPath(fileName);
|
|
|
|
|
FileOutputStream fileOut = new FileOutputStream(file);
|
|
|
|
|
ExcelProvider.SimpleExcelExport(excelData, fileOut);
|
|
|
|
|
fileUtil.download(response, fileName);
|
|
|
|
|
fileUtil.remove(file);
|
|
|
|
|
List<MemberVO> members = memberMapper.pagedListMembers(className, trainingName, markStatus, keyword, user.getSchoolId());
|
|
|
|
|
return members;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<Map<String, Object>> classScoreTrend(Integer schoolId) {
|
|
|
|
@ -223,17 +200,17 @@ public class MemberService {
|
|
|
|
|
return memberMapper.selectAllTrainingList(schoolId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<Member> findByTrainingId(String trainingId){
|
|
|
|
|
public List<Member> findByTrainingId(String trainingId) {
|
|
|
|
|
MemberExample example = new MemberExample();
|
|
|
|
|
example.createCriteria().andTrainingIdEqualTo(trainingId);
|
|
|
|
|
return memberMapper.selectByExample(example);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Member findByTrainingIdAndStudentNumber(String trainingId,String studentNumber){
|
|
|
|
|
public Member findByTrainingIdAndStudentNumber(String trainingId, String studentNumber) {
|
|
|
|
|
MemberExample example = new MemberExample();
|
|
|
|
|
example.createCriteria().andTrainingIdEqualTo(trainingId).andStudentNumberEqualTo(studentNumber);
|
|
|
|
|
List<Member> members = memberMapper.selectByExample(example);
|
|
|
|
|
return members.size()>0?members.get(0):null;
|
|
|
|
|
return members.size() > 0 ? members.get(0) : null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 分批处理删除业务,防止当studentNumbers过多时生成的SQL语句可能会超过数据库支持的最大长度限制,从而导致SQL执行失败
|
|
|
|
@ -255,21 +232,21 @@ public class MemberService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//获取可用资金
|
|
|
|
|
public Double getAvailableFunds(Member member){
|
|
|
|
|
public Double getAvailableFunds(Member member) {
|
|
|
|
|
Double positionProfitLoss = flashTotalPositionProfitLoss(member.getMemberId());
|
|
|
|
|
if (positionProfitLoss==null){
|
|
|
|
|
positionProfitLoss=0.0;
|
|
|
|
|
if (positionProfitLoss == null) {
|
|
|
|
|
positionProfitLoss = 0.0;
|
|
|
|
|
}
|
|
|
|
|
Double initialCapital = member.getInitialCapital();//初始资金
|
|
|
|
|
Double totalAssets = initialCapital+positionProfitLoss;
|
|
|
|
|
Double totalAssets = initialCapital + positionProfitLoss;
|
|
|
|
|
Double netValue = bigDecimalUtils.add(totalAssets, positionProfitLoss);
|
|
|
|
|
Double cumulativeProfitLoss = member.getCumulativeProfitLoss(); //累计盈亏
|
|
|
|
|
if(cumulativeProfitLoss==null){
|
|
|
|
|
if (cumulativeProfitLoss == null) {
|
|
|
|
|
member.setCumulativeProfitLoss(0.0);
|
|
|
|
|
}
|
|
|
|
|
Double marginUsed = member.getMarginUsed(); //获取已用保证金
|
|
|
|
|
if (marginUsed==null){
|
|
|
|
|
marginUsed=0.0;
|
|
|
|
|
if (marginUsed == null) {
|
|
|
|
|
marginUsed = 0.0;
|
|
|
|
|
}
|
|
|
|
|
return bigDecimalUtils.sub(netValue, marginUsed);
|
|
|
|
|
}
|
|
|
|
@ -297,7 +274,7 @@ public class MemberService {
|
|
|
|
|
if (Constant.BUY_BUYSELLTYPE.equals(buySellType)) { //买
|
|
|
|
|
profitAndLoss = (nowSellPic - priceTransaction) * volumeTransaction * Constant.PEACEQUANTITY;
|
|
|
|
|
} else { //卖
|
|
|
|
|
profitAndLoss = (priceTransaction-nowBuyPic) * volumeTransaction * Constant.PEACEQUANTITY;
|
|
|
|
|
profitAndLoss = (priceTransaction - nowBuyPic) * volumeTransaction * Constant.PEACEQUANTITY;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
totalProfitAndLoss = totalProfitAndLoss + profitAndLoss;
|
|
|
|
@ -305,4 +282,8 @@ public class MemberService {
|
|
|
|
|
}
|
|
|
|
|
return totalProfitAndLoss;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void updateStuRank(){
|
|
|
|
|
memberMapper.updateStuRank();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|