Sfoglia il codice sorgente

计算评分总分接口添加

我还能继续跑 8 mesi fa
parent
commit
90bc83b717

+ 7 - 1
yudao-module-work/yudao-module-work-biz/src/main/java/cn/iocoder/yudao/module/work/controller/admin/totalscore/TotalScoreController.java

@@ -91,5 +91,11 @@ public class TotalScoreController {
         ExcelUtils.write(response, "作品总分.xls", "数据", TotalScoreRespVO.class,
                         BeanUtils.toBean(list, TotalScoreRespVO.class));
     }
-
+    @PostMapping("/jsscore")
+    @Operation(summary = "计算打分后的总分")
+//    @PreAuthorize("@ss.hasPermission('work:total-score:jsscore')")
+    public CommonResult<List<Map<String,String>>> jsscore() {
+        System.out.println("调用");
+        return success(totalScoreService.JsTotalScore());
+    }
 }

+ 18 - 0
yudao-module-work/yudao-module-work-biz/src/main/java/cn/iocoder/yudao/module/work/dal/mysql/score/ScoreMapper.java

@@ -24,5 +24,23 @@ public interface ScoreMapper extends BaseMapperX<ScoreDO> {
                 .betweenIfPresent(ScoreDO::getCreateTime, reqVO.getCreateTime())
                 .orderByDesc(ScoreDO::getId));
     }
+    /**
+     * 获取多少作品评分
+     *
+     * @return 编号
+     */
+    List<Map<String,Integer>> getScoreWork();
 
+    /**
+     * 获取需要打分人数
+     *
+     * @return 编号
+     */
+    String getxydfrs(Integer workId);
+    /**
+     * 获取打分详情
+     *
+     * @return 编号
+     */
+    List<Integer>  getdfxq(Integer workId);
 }

+ 7 - 1
yudao-module-work/yudao-module-work-biz/src/main/java/cn/iocoder/yudao/module/work/service/totalscore/TotalScoreService.java

@@ -51,5 +51,11 @@ public interface TotalScoreService {
      * @return 作品总分分页
      */
     PageResult<TotalScoreDO> getTotalScorePage(TotalScorePageReqVO pageReqVO);
-
+    /**
+     * 计算作品总分
+     *
+//     * @param id 编号
+     * @return 作品总分
+     */
+    List<Map<String,String>> JsTotalScore();
 }

+ 52 - 2
yudao-module-work/yudao-module-work-biz/src/main/java/cn/iocoder/yudao/module/work/service/totalscore/TotalScoreServiceImpl.java

@@ -1,15 +1,15 @@
 package cn.iocoder.yudao.module.work.service.totalscore;
 
+import cn.iocoder.yudao.module.work.dal.mysql.score.ScoreMapper;
 import org.springframework.stereotype.Service;
 import jakarta.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.transaction.annotation.Transactional;
 
+import java.text.DecimalFormat;
 import java.util.*;
 import cn.iocoder.yudao.module.work.controller.admin.totalscore.vo.*;
 import cn.iocoder.yudao.module.work.dal.dataobject.totalscore.TotalScoreDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 
 import cn.iocoder.yudao.module.work.dal.mysql.totalscore.TotalScoreMapper;
@@ -28,6 +28,8 @@ public class TotalScoreServiceImpl implements TotalScoreService {
 
     @Resource
     private TotalScoreMapper totalScoreMapper;
+    @Resource
+    private ScoreMapper scoreMapper;
 
     @Override
     public Integer createTotalScore(TotalScoreSaveReqVO createReqVO) {
@@ -71,4 +73,52 @@ public class TotalScoreServiceImpl implements TotalScoreService {
         return totalScoreMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public List<Map<String,String>> JsTotalScore() {
+        List<Map<String,Integer>> workidList=scoreMapper.getScoreWork();
+        //总分 暂存
+        List<Map<String,String>> workzfList=new ArrayList<Map<String, String>>();
+        DecimalFormat decimalFormat = new DecimalFormat("#.00");
+        //评选人数
+        Integer pxqrrs=0;
+        //评选人数
+        Integer workId=0;
+        double pingjunfen=0;
+        for (Map<String,Integer> workid : workidList) {
+            workId=workid.get("work_id");
+            pxqrrs=Integer.parseInt(String.valueOf(workid.get("pfrs")));
+            //获取有几个人评选
+            String userids= scoreMapper.getxydfrs(workId);
+            String[] strArray = userids.replace("[", "").replace("]", "").split(",");
+            if(pxqrrs.equals(strArray.length)){
+                System.out.println("按规则计算分数");
+               List<Integer> scoreList= scoreMapper.getdfxq(workId);
+                int sum=0;
+                int max=scoreList.get(0);
+                int min=scoreList.get(0);
+                for (int score : scoreList) {
+                    sum += score;
+                    if (score > max) {
+                        max = score;
+                    }
+                    if (min > score) {
+                        min = score;
+                    }
+                }
+                pingjunfen= (double) (sum - max - min) / (double) (strArray.length - 2);
+//                System.out.println("平均分数"+pingjunfen);
+//                System.out.println("平均分数"+decimalFormat.format(pingjunfen));
+                //拼接最终核算的总分
+                Map<String, String> workzf=new HashMap<>();
+                workzf.put("workName",workid.get("work_name")+"");
+                workzf.put("workId",workId+"");
+                workzf.put("overallRating",decimalFormat.format(pingjunfen));
+                workzfList.add(workzf);
+            }else {
+                System.out.println("分数未打完不计算");
+            }
+        }
+        return workzfList;
+    }
+
 }

+ 20 - 0
yudao-module-work/yudao-module-work-biz/src/main/resources/mapper/score/ScoreMapper.xml

@@ -9,4 +9,24 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
+<!--    <select id="getScoreWork" resultType="java.lang.Integer">-->
+<!--        select DISTINCT work_id from work_score-->
+<!--    </select>-->
+    <select id="getScoreWork" resultType="java.util.Map">
+        select  a.work_id,b.work_name,count(a.work_id) pfrs from work_score a LEFT JOIN work b on a.work_id=b.work_id where a.`status`='1' GROUP BY a.work_id
+</select>
+
+    <!--    <select id="getdfrs" resultType="java.lang.Integer">-->
+<!--        select  count(work_id) from work_score where  work_id='37' and `status`='1' GROUP BY work_id-->
+<!--    </select>-->
+    <select id="getxydfrs" resultType="java.lang.String">
+        select user_ids from work_allocation where work_type_id = (select category_id from work  where work_id=#{workId})
+    </select>
+    <select id="getdfxq" resultType="java.lang.Integer">
+        select score from work_score  where `status`='1' and work_id=#{workId}
+    </select>
+
+    <!--    <select id="getScoreWork" resultType="java.util.LinkedHashMap">-->
+<!--        select  a.work_id ,count(a.work_id) pfrs from work_score a LEFT JOIN work b on a.work_id=b.work_id where a.`status`='1' GROUP BY a.work_id-->
+<!--    </select>-->
 </mapper>