From a38f12b1126176919a08654d3e1d063d376540c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E6=B2=85?= <907037276@qq.com>
Date: Fri, 19 Jan 2024 16:21:46 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=95=99=E5=B8=88=E7=AB=AF=E9=A6=96?=
 =?UTF-8?q?=E9=A1=B5=E6=8A=A5=E9=94=99=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../controller/MemberController.java          | 57 ++++++++++---------
 .../mappers/TrainingMapper.java               |  3 +
 .../service/GradeWeightService.java           | 39 +++++++++++--
 .../service/TrainingService.java              |  4 ++
 4 files changed, 73 insertions(+), 30 deletions(-)

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 86fdc7c..73fb5b0 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
@@ -84,7 +84,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());
     }
 
@@ -93,48 +93,48 @@ 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;  //总资产=初始资金+累计盈亏
+        Double totalAssets = initialCapital + cumulativeProfitLoss;  //总资产=初始资金+累计盈亏
         Double netValue = bigDecimalUtils.add(totalAssets, positionProfitLoss);
         member.setTotalAssets(totalAssets);  //设置总资产
         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);
     }
@@ -150,13 +150,13 @@ public class MemberController {
                                                              @ApiParam("页量") @RequestParam(required = false) Integer size) {
 
         JwtUser jwtUser = TokenProvider.getJWTUser(request);
-        PageInfo<MemberVO> pageInfo = memberService.pagedListMembers(className, trainingName, markStatus, keyword, jwtUser,index, size);
+        PageInfo<MemberVO> 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<MemberVO>>(pageInfo);
@@ -180,6 +180,12 @@ public class MemberController {
         ExcelData excelData = ExcelData.create(titles);
         for (MemberVO member : members) {
             List<Object> 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());
@@ -204,14 +210,13 @@ public class MemberController {
     @ApiOperation("根据实训任务id获取成员列表")
     @GetMapping("listMembersByTrainingId")
     public ResultEntity<PageInfo<MemberVO>> listMembersByTrainingId(@RequestParam String trainingId,
-                                                                  @ApiParam("班级id") Integer classId,
-                                                                  @ApiParam("查询关键字:学号和姓名")String keyword,
-                                                                  @RequestParam Integer index,
-                                                                  @RequestParam Integer size) {
-        PageInfo<MemberVO> members = memberService.pageListMemberByTrainingId(trainingId, classId,keyword,index, size);
+                                                                    @ApiParam("班级id") Integer classId,
+                                                                    @ApiParam("查询关键字:学号和姓名") String keyword,
+                                                                    @RequestParam Integer index,
+                                                                    @RequestParam Integer size) {
+        PageInfo<MemberVO> members = memberService.pageListMemberByTrainingId(trainingId, classId, keyword, index, size);
         return new ResultEntity<PageInfo<MemberVO>>(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<Training> findTrainingForUpdateScore();
 
+    @Select("SELECT * FROM sys_training WHERE weight_id=#{weightId}")
+    List<Training> 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<String> oldWeightIds = new HashSet();
+        List<GradeWeight> gradeWeights = findWeightBySchoolId(currentUser.getSchoolId());
+        if (gradeWeights != null && gradeWeights.size() > 0) {
+            for(GradeWeight weight: gradeWeights) {
+                oldWeightIds.add(weight.getWeightId());
+                gradeWeightMapper.deleteByPrimaryKey(weight.getId());
+            }
+        }
+        List<GradeWeight> weights = GradeWeight.buildGradeWeights(bo, currentUser);
+        for (GradeWeight weight : weights) {
+            gradeWeightMapper.insertSelective(weight);
+        }
+        if (oldWeightIds != null) {
+            for(String oldWeightId: oldWeightIds) {
+                List<Training> 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<Training> findByWeightId(String weightId) {
+        return trainingMapper.findByWeightId(weightId);
+    }
+
     public void delete(String id) {
         //TODO 删除实训还要删除member表中的trainingId相关数据
         trainingMapper.deleteByPrimaryKey(id);