我还能继续跑 9 月之前
父節點
當前提交
f96d65e148

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

@@ -42,6 +42,7 @@ public class TotalScoreController {
     @Operation(summary = "创建作品总分")
     @PreAuthorize("@ss.hasPermission('work:total-score:create')")
     public CommonResult<Integer> createTotalScore(@Valid @RequestBody TotalScoreSaveReqVO createReqVO) {
+        System.out.println("添加"+createReqVO);
         return success(totalScoreService.createTotalScore(createReqVO));
     }
 
@@ -84,12 +85,31 @@ public class TotalScoreController {
     @PreAuthorize("@ss.hasPermission('work:total-score:export')")
     @ApiAccessLog(operateType = EXPORT)
     public void exportTotalScoreExcel(@Valid TotalScorePageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
+                                      HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
         List<TotalScoreDO> list = totalScoreService.getTotalScorePage(pageReqVO).getList();
         // 导出 Excel
         ExcelUtils.write(response, "作品总分.xls", "数据", TotalScoreRespVO.class,
-                        BeanUtils.toBean(list, TotalScoreRespVO.class));
+                BeanUtils.toBean(list, TotalScoreRespVO.class));
+    }
+    @PostMapping("/jsscore")
+    @Operation(summary = "计算打分后的总分存到表中")
+//    @PreAuthorize("@ss.hasPermission('work:total-score:jsscore')")
+    public CommonResult<Integer> jsscore() {
+        return success(totalScoreService.JsTotalScore());
+    }
+    @PostMapping("/czscore")
+    @Operation(summary = "重置总分表和专家打分表")
+    @PreAuthorize("@ss.hasPermission('work:total-score:czscore')")
+    public CommonResult<Boolean> czscore(@Valid @RequestBody TotalScoreSaveReqVO createReqVO) {
+        totalScoreService.delTotalScore(Integer.parseInt(createReqVO.getWorkId()));
+        return success(true);
+    }
+    @PostMapping("/scorename")
+    @Operation(summary = "获取专家姓名和作品名称和打分")
+    @PreAuthorize("@ss.hasPermission('work:total-score:scorename')")
+    public CommonResult<List<Map<String,String>>> scorename(@Valid @RequestBody TotalScoreSaveReqVO createReqVO) {
+        return success(totalScoreService.getScoreName(Integer.parseInt(createReqVO.getWorkId())));
     }
 
 }

+ 2 - 0
yudao-module-work/yudao-module-work-biz/src/main/java/cn/iocoder/yudao/module/work/controller/admin/totalscore/vo/TotalScorePageReqVO.java

@@ -14,6 +14,8 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
 public class TotalScorePageReqVO extends PageParam {
+    @Schema(description = "作品id")
+    private String workId;
 
     @Schema(description = "作品名", example = "王五")
     private String workName;

+ 3 - 0
yudao-module-work/yudao-module-work-biz/src/main/java/cn/iocoder/yudao/module/work/controller/admin/totalscore/vo/TotalScoreRespVO.java

@@ -16,6 +16,9 @@ public class TotalScoreRespVO {
     @ExcelProperty("id")
     private Integer id;
 
+    @ExcelProperty("作品id")
+    private String workId;
+
     @Schema(description = "作品名", example = "王五")
     @ExcelProperty("作品名")
     private String workName;

+ 4 - 1
yudao-module-work/yudao-module-work-biz/src/main/java/cn/iocoder/yudao/module/work/controller/admin/totalscore/vo/TotalScoreSaveReqVO.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.work.controller.admin.totalscore.vo;
 
+import com.alibaba.excel.annotation.ExcelProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import java.util.*;
@@ -12,10 +13,12 @@ public class TotalScoreSaveReqVO {
     @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "18605")
     private Integer id;
 
+    @ExcelProperty("作品id")
+    private String workId;
+
     @Schema(description = "作品名", example = "王五")
     private String workName;
 
     @Schema(description = "总评分")
     private String overallRating;
-
 }

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

@@ -24,5 +24,29 @@ 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);
+    /**
+     * 获取打分人分数与姓名
+     *
+     * @return 编号
+     */
+    List<Map<String,String>> getScoreName(String workId);
 }

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

@@ -51,5 +51,19 @@ public interface TotalScoreService {
      * @return 作品总分分页
      */
     PageResult<TotalScoreDO> getTotalScorePage(TotalScorePageReqVO pageReqVO);
-
+    /**
+     * 计算作品总分
+     *
+     //     * @param id 编号
+     * @return 作品总分
+     */
+    Integer JsTotalScore();
+    /**
+     * 获取打分人分数与姓名
+     *
+     * @return 编号
+     */
+    List<Map<String,String>> getScoreName(Integer workId);
+    //逻辑删除 总分和各项评分
+    Boolean delTotalScore(Integer workId);
 }

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

@@ -1,20 +1,24 @@
 package cn.iocoder.yudao.module.work.service.totalscore;
 
+import cn.iocoder.yudao.module.work.controller.admin.score.vo.ScorePageReqVO;
+import cn.iocoder.yudao.module.work.controller.admin.score.vo.ScoreRespVO;
+import cn.iocoder.yudao.module.work.dal.dataobject.score.ScoreDO;
+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;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.module.work.enums.ErrorCodeConstants.*;
 
 /**
@@ -28,6 +32,8 @@ public class TotalScoreServiceImpl implements TotalScoreService {
 
     @Resource
     private TotalScoreMapper totalScoreMapper;
+    @Resource
+    private ScoreMapper scoreMapper;
 
     @Override
     public Integer createTotalScore(TotalScoreSaveReqVO createReqVO) {
@@ -71,4 +77,75 @@ public class TotalScoreServiceImpl implements TotalScoreService {
         return totalScoreMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public Integer JsTotalScore() {
+        List<Map<String,Integer>> workidList=scoreMapper.getScoreWork();
+        DecimalFormat decimalFormat = new DecimalFormat("#.00");
+        //添加总分人数
+        Integer scrs=0;
+        //评选人数
+        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);
+                TotalScoreSaveReqVO totalScoreSaveReqVO=new TotalScoreSaveReqVO();
+                totalScoreSaveReqVO.setWorkName(workid.get("work_name")+"");
+                totalScoreSaveReqVO.setOverallRating(decimalFormat.format(pingjunfen));
+                totalScoreSaveReqVO.setWorkId(workId+"");
+                TotalScoreDO totalScore = BeanUtils.toBean(totalScoreSaveReqVO, TotalScoreDO.class);
+                //统计的分数添加到数据库
+                totalScoreMapper.insert(totalScore);
+                scrs++;
+            }
+        }
+        return scrs;
+    }
+
+    @Override
+    public List<Map<String, String>> getScoreName(Integer workId) {
+        return scoreMapper.getScoreName(workId+"");
+    }
+
+    @Override
+    public Boolean delTotalScore(Integer workId) {
+        //获取专家评分表id
+        ScorePageReqVO scorePageReqVO=new ScorePageReqVO();
+        scorePageReqVO.setWorkId(workId);
+        PageResult<ScoreDO> pageResult = scoreMapper.selectPage(scorePageReqVO);
+        List<ScoreDO> scoreDOList=pageResult.getList();
+        for (ScoreDO scoredo: scoreDOList) {
+            //进行逻辑删除
+            scoreMapper.deleteById(scoredo.getId());
+        }
+        //获取总分表id
+        TotalScorePageReqVO totalScorePageReqVO=new TotalScorePageReqVO();
+        totalScorePageReqVO.setWorkId(workId+"");
+        PageResult<TotalScoreDO> totalScoreDOPageResult = totalScoreMapper.selectPage(totalScorePageReqVO);
+        System.out.println(totalScoreDOPageResult.getList());
+        totalScoreMapper.deleteById(totalScoreDOPageResult.getList().get(0).getId());
+        return true;
+    }
+
 }

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

@@ -9,4 +9,28 @@
         文档可见: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' and a.deleted='0' GROUP BY a.work_id
+        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' and a.deleted='0' and a.work_id not in(SELECT work_id from work_total_score where deleted='0' ) 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}) and deleted='0'
+    </select>
+    <select id="getdfxq" resultType="java.lang.Integer">
+        select score from work_score  where `status`='1' and work_id=#{workId} and deleted='0'
+    </select>
+    <select id="getScoreName" resultType="java.util.Map">
+        select b.username, a.score from work_score a ,system_users b where a.creator=b.id and a.deleted='0' 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>