diff --git a/src/main/java/com/sztzjy/forex/trading_trading/controller/MemberController.java b/src/main/java/com/sztzjy/forex/trading_trading/controller/MemberController.java index a9b3612..c54c9b0 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/controller/MemberController.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/controller/MemberController.java @@ -85,7 +85,7 @@ public class MemberController { @AnonymousAccess @PostMapping("getPracticeMemberIdByStudentNumberAndPracticeTrainingId") public ResultEntity getPracticeMemberIdByStudentNumberAndPracticeTrainingId(@RequestBody String studentNumber) { - Member member = memberService.getPracticeMemberIdByStudentNumberAndPracticeTrainingId(studentNumber,Constant.PRACTICE_TRAINING_ID); + Member member = memberService.getPracticeMemberIdByStudentNumberAndPracticeTrainingId(studentNumber, Constant.PRACTICE_TRAINING_ID); return new ResultEntity(HttpStatus.OK, "根据学号获取成员ID", member.getMemberId()); } @@ -94,29 +94,29 @@ public class MemberController { public ResultEntity getMemberId(@RequestBody JSONObject jsonObject) { String studentNumber = jsonObject.getString("studentNumber"); String trainingId = jsonObject.getString("trainingId"); - String trainingStatus=jsonObject.getString("trainingStatus"); - Integer schoolId =Constant.PRACTICE_SCHOOL_ID; - if(trainingId.isEmpty()){ - trainingId=Constant.PRACTICE_TRAINING_ID; + String trainingStatus = jsonObject.getString("trainingStatus"); + Integer schoolId = Constant.PRACTICE_SCHOOL_ID; + if (trainingId.isEmpty()) { + trainingId = Constant.PRACTICE_TRAINING_ID; } - if(!Constant.PRACTICE_TRAINING_ID.equals(trainingId)){ + if (!Constant.PRACTICE_TRAINING_ID.equals(trainingId)) { schoolId = jsonObject.getInteger("schoolId"); } Member member = memberService.selectByStudentNumberAndSchoolIdAndTrainingID(studentNumber, schoolId, trainingId); - Double positionProfitLoss=0.0; - if(!Constant.TRAINING_STATUS_FINISHED.equals(trainingStatus)){ + Double positionProfitLoss = 0.0; + if (!Constant.TRAINING_STATUS_FINISHED.equals(trainingStatus)) { positionProfitLoss = takeStashController.flashTotalPositionProfitLoss(member.getMemberId()); - if (positionProfitLoss==null){ - positionProfitLoss=0.0; + if (positionProfitLoss == null) { + positionProfitLoss = 0.0; } member.setPositionProfitLoss(positionProfitLoss); //设置持仓盈亏 } Double initialCapital = member.getInitialCapital();//初始资金 Double cumulativeProfitLoss = member.getCumulativeProfitLoss(); //累计盈亏 - if(cumulativeProfitLoss==null){ - cumulativeProfitLoss=0.0; + if (cumulativeProfitLoss == null) { + cumulativeProfitLoss = 0.0; } - if(cumulativeProfitLoss==null){ + if (cumulativeProfitLoss == null) { member.setCumulativeProfitLoss(0.0); } Double totalAssets = initialCapital+cumulativeProfitLoss; //总资产=初始资金+累计盈亏 @@ -125,17 +125,17 @@ public class MemberController { member.setNetValue(netValue); //设置净值 Double marginUsed = member.getMarginUsed(); //获取已用保证金 - if (marginUsed==null || marginUsed==0.0){ - marginUsed=0.0; + if (marginUsed == null || marginUsed == 0.0) { + marginUsed = 0.0; member.setMarginLevel(null); member.setMarginUsed(0.0); - }else { + } else { member.setMarginLevel(bigDecimalUtils.div(netValue, marginUsed, 2)); //设置保证金水平 } member.setAvailableFunds(bigDecimalUtils.sub(netValue, marginUsed)); //设置可用资金 //特殊处理 占用ReportScore 传递美元转换rmb ForexMarketData usdcnh = forexMarketDateUtil.getForexMarketDateByCode("USDCNY"); - member.setReportScore(bigDecimalUtils.mul(Double.parseDouble(usdcnh.getSellPic())*totalAssets,1,2)); + member.setReportScore(bigDecimalUtils.mul(Double.parseDouble(usdcnh.getSellPic()) * totalAssets, 1, 2)); return new ResultEntity(HttpStatus.OK, "获取成员ID", member); } @@ -151,13 +151,13 @@ public class MemberController { @ApiParam("页量") @RequestParam(required = false) Integer size) { JwtUser jwtUser = TokenProvider.getJWTUser(request); - PageInfo pageInfo = memberService.pagedListMembers(className, trainingName, markStatus, keyword, jwtUser,index, size); + PageInfo pageInfo = memberService.pagedListMembers(className, trainingName, markStatus, keyword, jwtUser, index, size); if (!pageInfo.getList().isEmpty()) { for (MemberVO vo : pageInfo.getList()) { Training training = trainingService.findById(vo.getTrainingId()); if (vo.getYield() == null || training == null) continue; vo.setTradeTrainingScore(gradeWeightService.findWeightByWeightIdAndYield(training.getWeightId(), vo.getYield()).getActualScore()); - vo.setTotalScore(vo.getTradeTrainingScore() + (vo.getReportScore()==null?0:vo.getReportScore())); + vo.setTotalScore(vo.getTradeTrainingScore() + (vo.getReportScore() == null ? 0 : vo.getReportScore())); } } return new ResultEntity>(pageInfo); @@ -181,6 +181,12 @@ public class MemberController { ExcelData excelData = ExcelData.create(titles); for (MemberVO member : members) { List rows = new ArrayList<>(); + + Training training = trainingService.findById(member.getTrainingId()); + if (member.getYield() == null || training == null) continue; + member.setTradeTrainingScore(gradeWeightService.findWeightByWeightIdAndYield(training.getWeightId(), member.getYield()).getActualScore()); + member.setTotalScore(member.getTradeTrainingScore() + (member.getReportScore() == null ? 0 : member.getReportScore())); + rows.add(member.getTrainingName()); rows.add(member.getClassGrade()); rows.add(member.getStudentNumber()); @@ -205,11 +211,11 @@ public class MemberController { @ApiOperation("根据实训任务id获取成员列表") @GetMapping("listMembersByTrainingId") public ResultEntity> listMembersByTrainingId(@RequestParam String trainingId, - @ApiParam("班级id") Integer classId, - @ApiParam("查询关键字:学号和姓名")String keyword, - @RequestParam Integer index, - @RequestParam Integer size) { - PageInfo members = memberService.pageListMemberByTrainingId(trainingId, classId,keyword,index, size); + @ApiParam("班级id") Integer classId, + @ApiParam("查询关键字:学号和姓名") String keyword, + @RequestParam Integer index, + @RequestParam Integer size) { + PageInfo members = memberService.pageListMemberByTrainingId(trainingId, classId, keyword, index, size); return new ResultEntity>(members); } diff --git a/src/main/java/com/sztzjy/forex/trading_trading/mappers/TrainingMapper.java b/src/main/java/com/sztzjy/forex/trading_trading/mappers/TrainingMapper.java index 1e546b4..77e6f49 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/mappers/TrainingMapper.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/mappers/TrainingMapper.java @@ -148,4 +148,7 @@ public interface TrainingMapper { "WHERE end_time >= NOW() - INTERVAL 5 MINUTE AND end_time <= NOW() AND status = 'FINISHED'") List findTrainingForUpdateScore(); + @Select("SELECT * FROM sys_training WHERE weight_id=#{weightId}") + List findByWeightId(@Param("weightId") String weightId); + } \ No newline at end of file diff --git a/src/main/java/com/sztzjy/forex/trading_trading/service/GradeWeightService.java b/src/main/java/com/sztzjy/forex/trading_trading/service/GradeWeightService.java index 1c96e43..3fbe19e 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/service/GradeWeightService.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/service/GradeWeightService.java @@ -5,23 +5,54 @@ import com.sztzjy.forex.trading_trading.dto.GradeWeightBO; import com.sztzjy.forex.trading_trading.dto.GradeWeightDetailBO; import com.sztzjy.forex.trading_trading.entity.GradeWeight; import com.sztzjy.forex.trading_trading.entity.GradeWeightExample; +import com.sztzjy.forex.trading_trading.entity.Training; import com.sztzjy.forex.trading_trading.mappers.GradeWeightMapper; +import org.checkerframework.checker.units.qual.A; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; @Service public class GradeWeightService { @Autowired GradeWeightMapper gradeWeightMapper; + @Autowired + TrainingService trainingService; + public void insert(GradeWeightBO bo, JwtUser currentUser) { - GradeWeight.buildGradeWeights(bo, currentUser).forEach(gradeWeightMapper::insertSelective); - } + HashSet oldWeightIds = new HashSet(); + List gradeWeights = findWeightBySchoolId(currentUser.getSchoolId()); + if (gradeWeights != null && gradeWeights.size() > 0) { + for(GradeWeight weight: gradeWeights) { + oldWeightIds.add(weight.getWeightId()); + gradeWeightMapper.deleteByPrimaryKey(weight.getId()); + } + } + List weights = GradeWeight.buildGradeWeights(bo, currentUser); + for (GradeWeight weight : weights) { + gradeWeightMapper.insertSelective(weight); + } + if (oldWeightIds != null) { + for(String oldWeightId: oldWeightIds) { + List training = trainingService.findByWeightId(oldWeightId); + if (training != null && training.size() > 0) { + GradeWeight gradeWeight = findBySchoolId(currentUser.getSchoolId()); + for (Training t : training) { + t.setWeightId(gradeWeight.getWeightId()); + trainingService.update(t); + } + } + } + } + } public GradeWeight findBySchoolId(int schoolId) { GradeWeightExample example = new GradeWeightExample(); GradeWeightExample.Criteria criteria = example.createCriteria(); @@ -81,8 +112,8 @@ public class GradeWeightService { GradeWeightExample.Criteria criteria = example.createCriteria(); criteria.andWeightIdEqualTo(weightId); if (yield > 1000D) { - criteria.andLevelEqualTo(1); - }else{ + criteria.andLevelEqualTo(1); + } else { criteria.andMaxProfitGreaterThan(yield); criteria.andMinProfitLessThanOrEqualTo(yield); } diff --git a/src/main/java/com/sztzjy/forex/trading_trading/service/TrainingService.java b/src/main/java/com/sztzjy/forex/trading_trading/service/TrainingService.java index c72784e..ec429d0 100644 --- a/src/main/java/com/sztzjy/forex/trading_trading/service/TrainingService.java +++ b/src/main/java/com/sztzjy/forex/trading_trading/service/TrainingService.java @@ -60,6 +60,10 @@ public class TrainingService { return trainingMapper.selectByPrimaryKey(id); } + public List findByWeightId(String weightId) { + return trainingMapper.findByWeightId(weightId); + } + public void delete(String id) { //TODO 删除实训还要删除member表中的trainingId相关数据 trainingMapper.deleteByPrimaryKey(id);