licailing 4 лет назад
Родитель
Сommit
c4ebca2247

+ 8 - 0
src/main/java/com/izouma/wenlvju/domain/performance/ProgrammeAward.java

@@ -1,6 +1,8 @@
 package com.izouma.wenlvju.domain.performance;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.izouma.wenlvju.domain.BaseEntity;
+import com.izouma.wenlvju.dto.ProgrammeAwardDTO;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
@@ -24,6 +26,8 @@ public class ProgrammeAward extends BaseEntity {
 
     private Long specialtyId;
 
+    private long programmeNum;
+
     private Long awardId;
 
     @ApiModelProperty(value = "占比")
@@ -32,4 +36,8 @@ public class ProgrammeAward extends BaseEntity {
     private long num;
 
     private String remark;
+
+    public ProgrammeAward(ProgrammeAwardDTO dto) {
+        BeanUtil.copyProperties(dto, this);
+    }
 }

+ 24 - 0
src/main/java/com/izouma/wenlvju/dto/AwardDTO.java

@@ -0,0 +1,24 @@
+package com.izouma.wenlvju.dto;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.izouma.wenlvju.domain.performance.ProgrammeAward;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@Data
+public class AwardDTO {
+    private String award;
+
+    @ApiModelProperty(value = "占比")
+    private Double percentage;
+
+    private Long num;
+
+    private String remark;
+
+    public AwardDTO(ProgrammeAward programmeAward) {
+        BeanUtil.copyProperties(this, programmeAward);
+    }
+}

+ 13 - 0
src/main/java/com/izouma/wenlvju/dto/ProgrammeAwardDTO.java

@@ -4,21 +4,32 @@ package com.izouma.wenlvju.dto;
 import cn.hutool.core.bean.BeanUtil;
 import com.izouma.wenlvju.domain.performance.ProgrammeAward;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.util.ArrayList;
+import java.util.List;
+
 @Data
+@Builder
 @NoArgsConstructor
+@AllArgsConstructor
 public class ProgrammeAwardDTO {
 
     private Long performanceId;
 
+    private Long specialtyId;
+
     private String specialty;
 
     private long programmeNum;
 
     private String award;
 
+    private Long awardId;
+
     @ApiModelProperty(value = "占比")
     private Double percentage;
 
@@ -26,6 +37,8 @@ public class ProgrammeAwardDTO {
 
     private String remark;
 
+    private List<AwardDTO> awardDTOS;
+
     public ProgrammeAwardDTO(ProgrammeAward programmeAward) {
         BeanUtil.copyProperties(this, programmeAward);
     }

+ 117 - 4
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeAwardService.java

@@ -6,6 +6,7 @@ import com.izouma.wenlvju.domain.ArtType;
 import com.izouma.wenlvju.domain.Award;
 import com.izouma.wenlvju.domain.performance.Programme;
 import com.izouma.wenlvju.domain.performance.ProgrammeAward;
+import com.izouma.wenlvju.dto.AwardDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.ProgrammeAwardDTO;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
@@ -17,9 +18,7 @@ import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -36,32 +35,41 @@ public class ProgrammeAwardService {
     }
 
     public List<ProgrammeAwardDTO> getAll(Long performanceId) {
+        //找出所有节目奖项设置
         PageQuery pageQuery = new PageQuery();
         pageQuery.setSize(100);
         pageQuery.setSort("specialtyId,asc");
         pageQuery.getQuery().put("performanceId", performanceId);
         List<ProgrammeAward> programmeAwards = this.all(pageQuery).getContent();
 
+        // 奖项
+        List<Award> awardList = awardRepo.findAll();
+
+        //专业
         List<ArtType> all = artTypeRepo.findAll();
         Map<Long, String> artTypeMap = all
                 .stream()
                 .collect(Collectors.toMap(ArtType::getId, ArtType::getName));
 
+        //已经设置完成
         if (CollUtil.isNotEmpty(programmeAwards)) {
+            Map<Long, String> awardMap = awardList.stream().collect(Collectors.toMap(Award::getId, Award::getName));
             return programmeAwards.stream()
                     .map(award -> {
                         ProgrammeAwardDTO dto = new ProgrammeAwardDTO(award);
                         dto.setSpecialty(artTypeMap.get(award.getSpecialtyId()));
+                        dto.setAward(awardMap.get(award.getAwardId()));
                         return dto;
                     })
                     .collect(Collectors.toList());
         }
 
+        //总节目
         List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndStatus(performanceId, 2);
         List<ArtType> artTypes = all.stream()
                 .filter(artType -> ObjectUtil.isNull(artType.getParent()))
                 .collect(Collectors.toList());
-        List<Award> awardList = awardRepo.findAll();
+
         List<ProgrammeAwardDTO> dtos = new ArrayList<>();
 
         artTypes.forEach(artType -> {
@@ -75,7 +83,9 @@ public class ProgrammeAwardService {
 
             awardList.forEach(award -> {
                 ProgrammeAwardDTO dto = new ProgrammeAwardDTO();
+                dto.setSpecialtyId(artType.getId());
                 dto.setSpecialty(artType.getName());
+                dto.setAwardId(award.getId());
                 dto.setAward(award.getName());
                 dto.setPerformanceId(performanceId);
                 dto.setProgrammeNum(count);
@@ -84,4 +94,107 @@ public class ProgrammeAwardService {
         });
         return dtos;
     }
+
+
+    public List<ProgrammeAwardDTO> getAll2(Long performanceId) {
+        PageQuery pageQuery = new PageQuery();
+        pageQuery.setSize(100);
+        pageQuery.setSort("specialtyId,asc");
+        pageQuery.getQuery().put("performanceId", performanceId);
+        List<ProgrammeAward> programmeAwards = this.all(pageQuery).getContent();
+
+        List<Award> awardList = awardRepo.findAll();
+
+        List<ArtType> all = artTypeRepo.findAll();
+        Map<Long, String> artTypeMap = all
+                .stream()
+                .collect(Collectors.toMap(ArtType::getId, ArtType::getName));
+
+        List<ProgrammeAwardDTO> dtos = new ArrayList<>();
+        if (CollUtil.isNotEmpty(programmeAwards)) {
+            Map<Long, List<ProgrammeAward>> longListMap = programmeAwards.stream()
+                    .collect(Collectors.groupingBy(ProgrammeAward::getSpecialtyId));
+            Map<Long, String> awardMap = awardList.stream().collect(Collectors.toMap(Award::getId, Award::getName));
+
+            longListMap.forEach((k, v) -> {
+                ProgrammeAwardDTO dto = new ProgrammeAwardDTO(v.get(0));
+                dto.setSpecialty(artTypeMap.get(k));
+                dto.setAwardDTOS(v.stream().map(award -> {
+                    AwardDTO awardDTO = new AwardDTO(award);
+                    awardDTO.setAward(awardMap.get(award.getAwardId()));
+                    return awardDTO;
+                }).collect(Collectors.toList()));
+                dtos.add(dto);
+            });
+            return dtos;
+        }
+
+        List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndStatus(performanceId, 2);
+        List<ArtType> artTypes = all.stream()
+                .filter(artType -> ObjectUtil.isNull(artType.getParent()))
+                .collect(Collectors.toList());
+
+
+        artTypes.forEach(artType -> {
+
+            List<Long> artTypeIds = all.stream()
+                    .filter(at -> at.getCode().startsWith(artType.getCode()))
+                    .map(ArtType::getId)
+                    .collect(Collectors.toList());
+            long count = programmeList.stream()
+                    .filter(programme -> artTypeIds.contains(programme.getSpecialtyId()))
+                    .count();
+            ProgrammeAwardDTO dto = ProgrammeAwardDTO.builder()
+                    .programmeNum(count)
+                    .specialty(artType.getName())
+                    .performanceId(performanceId)
+                    .build();
+
+            List<AwardDTO> awardDTOS = new ArrayList<>();
+            awardList.forEach(award -> {
+                AwardDTO awardDTO = new AwardDTO();
+                awardDTO.setAward(award.getName());
+                awardDTOS.add(awardDTO);
+            });
+            dto.setAwardDTOS(awardDTOS);
+            dtos.add(dto);
+        });
+        return dtos;
+    }
+
+    public void batchSave(List<ProgrammeAwardDTO> dtos) {
+        List<ProgrammeAward> programmeAwards = dtos.stream().map(ProgrammeAward::new).collect(Collectors.toList());
+        programmeAwardRepo.saveAll(programmeAwards);
+    }
+
+    public void saveProgramme(List<ProgrammeAwardDTO> dtos) {
+        List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndStatus(dtos.get(0)
+                .getPerformanceId(), 2);
+
+        //按专业分组
+
+        //按成绩排序
+        programmeList.sort(Comparator.comparingDouble(Programme::getScore));
+
+        //获得奖项优先级
+        List<Award> awards = awardRepo.findAll();
+        awards.sort(Comparator.comparingInt(Award::getLevel));
+
+        //按专业区分再按奖项区分
+        Map<Long, Map<Long, List<ProgrammeAwardDTO>>> mapMap = dtos.stream()
+                .collect(Collectors.groupingBy(ProgrammeAwardDTO::getSpecialtyId, Collectors.groupingBy(ProgrammeAwardDTO::getAwardId)));
+
+
+        mapMap.forEach((k, v) -> {
+            int start = 0;
+            awards.forEach(award -> {
+                ProgrammeAwardDTO pa = v.get(award.getId()).get(0);
+                if (pa.getNum() > 0) {
+
+                }
+            });
+
+
+        });
+    }
 }

+ 5 - 0
src/main/java/com/izouma/wenlvju/web/performance/ProgrammeAwardController.java

@@ -65,5 +65,10 @@ public class ProgrammeAwardController extends BaseController {
     public List<ProgrammeAwardDTO> getAll(@RequestParam Long performanceId) {
         return programmeAwardService.getAll(performanceId);
     }
+
+    @PostMapping("/getAll2")
+    public List<ProgrammeAwardDTO> getAll2(@RequestParam Long performanceId) {
+        return programmeAwardService.getAll2(performanceId);
+    }
 }
 

+ 20 - 14
src/main/vue/src/views/performance/ProgrammeAwardList.vue

@@ -72,7 +72,7 @@
                         size="mini"
                         label=""
                         :min="0"
-                        :max="row.programmeNum"
+                        :max="row.max"
                         :step="1"
                         :controls="true"
                         controls-position="both"
@@ -267,7 +267,7 @@ export default {
 
             return _map;
         },
-        getInfo(mapInfo = new Map(), keys = ['specialty']) {
+        getInfo(mapInfo = new Map(), keys = ['specialtyId']) {
             let info = {};
             keys.forEach(item => {
                 if (mapInfo.has(item)) {
@@ -303,21 +303,27 @@ export default {
         },
         changePercentage(row) {
             row.num = (row.programmeNum * row.percentage) / 100;
-            if (typeof row.remainder == 'undefined') {
-                row.remainder = row.programmeNum - row.num;
-            } else {
-                row.remainder = row.remainder - row.num;
-            }
-            console.log(row.remainder);
+            let list = this.tableData.filter(item => {
+                return item.specialtyId == row.specialtyId;
+            });
+            console.log(list);
         },
         changeNum(row) {
-            row.percentage = (row.num / row.programmeNum) * 100;
-            if (typeof row.remainder == 'undefined') {
-                row.remainder = row.programmeNum - row.num;
-            } else {
-                row.remainder = row.remainder - row.num;
+            let list = this.tableData.filter(item => {
+                return item.specialty == row.specialty;
+            });
+            let total = 0;
+            list.forEach(item => {
+                total += item.num;
+            });
+            row.max = row.programmeNum - total + row.num;
+
+            if (total > row.programmeNum) {
+                row.num = 0;
             }
-            console.log(row.remainder);
+            row.percentage = (row.num / row.programmeNum) * 100;
+
+            console.log(row.max);
         }
     }
 };