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

+ 11 - 0
src/main/java/com/izouma/wenlvju/dto/ProgrammeResultDTO.java

@@ -1,12 +1,17 @@
 package com.izouma.wenlvju.dto;
 
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.izouma.wenlvju.domain.performance.Programme;
 import lombok.Data;
 
 @Data
 public class ProgrammeResultDTO {
+
+    @ExcelProperty(value = "节目编号")
+    private Long id;
+
     @ExcelProperty(value = "节目名称")
     private String name;
 
@@ -34,6 +39,12 @@ public class ProgrammeResultDTO {
     @ExcelProperty(value = "奖项")
     private String award;
 
+    @ExcelIgnore
+    private Long awardId;
+
+    @ExcelIgnore
+    private boolean second;
+
     public ProgrammeResultDTO(Programme programme) {
         BeanUtil.copyProperties(programme, this);
     }

+ 1 - 1
src/main/java/com/izouma/wenlvju/enums/ProgrammeStatus.java

@@ -31,7 +31,7 @@ public enum ProgrammeStatus {
     /*
     评奖中
      */
-    AWARD,
+//    AWARD,
     /*
     完成
      */

+ 0 - 5
src/main/java/com/izouma/wenlvju/repo/performance/ProgrammeRepo.java

@@ -19,9 +19,6 @@ public interface ProgrammeRepo extends JpaRepository<Programme, Long>, JpaSpecif
 
     List<Programme> findAllByPerformanceIdAndProgrammeStatus(Long performanceId, ProgrammeStatus status);
 
-    @Query("select id from Programme where del = false and performanceId = ?1 and programmeStatus = ?2")
-    List<Long> findIdByPerformanceIdAndProgrammeStatus(Long performanceId, ProgrammeStatus status);
-
     long countAllByArrangeIdAndSignedInIsNull(Long arrangeId);
 
     @Query("update Programme t set t.allSigned = true where t.arrangeId = ?1")
@@ -53,8 +50,6 @@ public interface ProgrammeRepo extends JpaRepository<Programme, Long>, JpaSpecif
 
     List<Programme> findAllByPerformanceIdAndProgrammeStatusAndArrangeIdIsNull(Long performanceId, ProgrammeStatus programmeStatus);
 
-    List<Programme> findAllByPerformanceIdAndReviewArrangeIdIsNull(Long performanceId);
-
     List<Programme> findAllByPerformanceIdAndProgrammeStatusAndReviewArrangeIdIsNull(Long performanceId, ProgrammeStatus programmeStatus);
 
     List<Programme> findAllByArrangeId(Long arrangeId);

+ 13 - 5
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeAwardService.java

@@ -10,6 +10,7 @@ import com.izouma.wenlvju.dto.AwardDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.ProgrammeAwardDTO;
 import com.izouma.wenlvju.enums.ProgrammeStatus;
+import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
 import com.izouma.wenlvju.repo.AwardRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeAwardRepo;
@@ -67,7 +68,7 @@ public class ProgrammeAwardService {
         }
 
         //总节目
-        List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndProgrammeStatus(performanceId, ProgrammeStatus.AWARD);
+        List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndProgrammeStatus(performanceId, ProgrammeStatus.SUBMIT);
         List<ArtType> artTypes = all.stream()
                 .filter(artType -> ObjectUtil.isNull(artType.getParent()))
                 .collect(Collectors.toList());
@@ -189,7 +190,7 @@ public class ProgrammeAwardService {
             return dtos;
         }
 
-        List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndProgrammeStatus(performanceId, ProgrammeStatus.AWARD);
+        List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndProgrammeStatus(performanceId, ProgrammeStatus.SUBMIT);
         List<ArtType> artParents = artTypes.stream()
                 .filter(artType -> ObjectUtil.isNull(artType.getParent()))
                 .collect(Collectors.toList());
@@ -224,7 +225,7 @@ public class ProgrammeAwardService {
 
     public void saveProgramme(List<ProgrammeAwardDTO> dtos) {
         List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndProgrammeStatus(dtos.get(0)
-                .getPerformanceId(), ProgrammeStatus.AWARD);
+                .getPerformanceId(), ProgrammeStatus.SUBMIT);
 
         List<ArtType> artTypes = artTypeRepo.findAll();
         List<ArtType> artParents = artTypes.stream()
@@ -274,13 +275,18 @@ public class ProgrammeAwardService {
 
     public void saveProgramme1(List<ProgrammeAwardDTO> dtos) {
         List<Programme> programmeList = programmeRepo.findAllByPerformanceIdAndProgrammeStatus(dtos.get(0)
-                .getPerformanceId(), ProgrammeStatus.AWARD);
+                .getPerformanceId(), ProgrammeStatus.SUBMIT);
+
+        long noScore = programmeList.stream().filter(programme -> ObjectUtil.isNull(programme.getScore())).count();
+        if (noScore > 0) {
+            throw new BusinessException("有节目未评分");
+        }
+
 
         Map<Long, List<Programme>> programmeMap = programmeList.stream()
                 .sorted(Comparator.comparingDouble(Programme::getScore))
                 .collect(Collectors.groupingBy(Programme::getParentSpecialtyId));
 
-
         //获得奖项优先级
         List<Award> awards = awardRepo.findAll();
         awards.sort(Comparator.comparingInt(Award::getLevel));
@@ -299,8 +305,10 @@ public class ProgrammeAwardService {
                     if (CollUtil.isNotEmpty(programmes)) {
                         List<Programme> result = programmes.subList(start, start + pa.getNum().intValue());
                         result.forEach(programme -> programme.setAwardId(award.getId()));
+                        programmeRepo.saveAll(result);
                         start += pa.getNum().intValue();
                     }
+
                 }
             }
         });

+ 26 - 2
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeService.java

@@ -957,8 +957,32 @@ public class ProgrammeService {
     }
 
     public Page<ProgrammeResultDTO> result(PageQuery pageQuery) {
-        pageQuery.setSort("awardId,desc");
-        Page<Programme> all = this.all2(pageQuery);
+        Map<String, Object> query = pageQuery.getQuery();
+        Object code = query.get("code");
+        String artCode = null;
+        if (ObjectUtil.isNotNull(code)) {
+            artCode = Convert.convert(String.class, code);
+            query.remove("code");
+        }
+
+        List<ArtType> artTypes = artTypeRepo.findAll();
+
+        String finalArtCode = artCode;
+        Page<Programme> all =  programmeRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
+            List<Predicate> and = JpaUtils.toPredicates(pageQuery, Programme.class, root, criteriaQuery, criteriaBuilder);
+            if (StrUtil.isNotBlank(finalArtCode)) {
+                and.add(root.get("specialtyId").in(artTypeService.getIds(artTypes, finalArtCode)));
+            }
+
+
+            criteriaQuery.orderBy(criteriaBuilder.asc(criteriaBuilder.selectCase()
+                    .when(criteriaBuilder.isNull(root.get("awardId")), 100000)
+                    .otherwise(root.get("awardId"))));
+
+            return criteriaBuilder.and(and.toArray(new Predicate[0]));
+
+        }), JpaUtils.toPageRequest(pageQuery));
+
         List<Programme> programmes = all.getContent();
         Map<Long, String> settingMap = settingRepo.findAllByFlagIn(CollUtil.newArrayList(3, 4))
                 .stream()

+ 9 - 1
src/main/java/com/izouma/wenlvju/web/performance/ProgrammeController.java

@@ -61,6 +61,14 @@ public class ProgrammeController extends BaseController {
         return programmeRepo.save(programme);
     }
 
+    @PreAuthorize("hasRole('ADMIN')")
+    @PostMapping("/saveAward")
+    public Programme saveAward(@RequestParam Long id, Long awardId) {
+        Programme programme = programmeRepo.findById(id).orElseThrow(new BusinessException("无节目"));
+        programme.setAwardId(awardId);
+        return programmeRepo.save(programme);
+    }
+
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<Programme> all(@RequestBody PageQuery pageQuery) {
@@ -229,7 +237,7 @@ public class ProgrammeController extends BaseController {
     }
 
     @PostMapping("/result")
-    public Page<ProgrammeResultDTO> result(PageQuery pageQuery) {
+    public Page<ProgrammeResultDTO> result(@RequestBody PageQuery pageQuery) {
         return programmeService.result(pageQuery);
     }
 

+ 89 - 56
src/main/vue/src/views/performance/ProgrammeResultList.vue

@@ -37,8 +37,15 @@
                         </el-form-item>
                     </el-col>
                     <el-col :span="8">
-                        <el-form-item label="节目名称">
-                            <el-input placeholder="节目名称" v-model="form.name" clearable></el-input>
+                        <el-form-item label="奖项">
+                            <el-select v-model="form.awardId" clearable>
+                                <el-option
+                                    v-for="item in awards"
+                                    :key="item.value"
+                                    :label="item.label"
+                                    :value="item.value"
+                                ></el-option>
+                            </el-select>
                         </el-form-item>
                     </el-col>
                 </el-row>
@@ -84,14 +91,11 @@
                                 </el-form-item>
                             </el-col>
 
-                            <el-col :span="8"
-                                ><el-form-item label="考级点名称">
-                                    <el-input
-                                        placeholder="考级点名称"
-                                        v-model="search"
-                                        clearable
-                                    ></el-input> </el-form-item
-                            ></el-col>
+                            <el-col :span="8">
+                                <el-form-item label="节目名称">
+                                    <el-input placeholder="节目名称" v-model="form.name" clearable></el-input>
+                                </el-form-item>
+                            </el-col>
                         </el-row>
                     </div>
                 </el-collapse-transition>
@@ -131,17 +135,42 @@
             :height="tableHeight"
         >
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
-            <!-- <el-table-column prop="id" label="ID" width="100"> </el-table-column> -->
+            <el-table-column prop="id" label="节目编号" width="100"> </el-table-column>
             <el-table-column prop="name" label="节目名称"> </el-table-column>
             <el-table-column prop="specialty" label="参赛专业"> </el-table-column>
             <el-table-column prop="competitionGroup" label="参赛组别" min-width="70"> </el-table-column>
             <el-table-column prop="level" label="参赛级别" min-width="70"> </el-table-column>
-            <el-table-column prop="quantity" label="参赛人数" min-width="70"> </el-table-column>
+            <!-- <el-table-column prop="quantity" label="参赛人数" min-width="70"> </el-table-column> -->
             <el-table-column prop="gradingOrganization" label="考级机构" show-overflow-tooltip min-width="160">
             </el-table-column>
             <el-table-column prop="organization" label="承办单位" min-width="160"> </el-table-column>
-            <el-table-column prop="examPoint" label="考级点" min-width="160"> </el-table-column>
-            <el-table-column prop="award" label="获奖情况" min-width="95"> </el-table-column>
+            <!-- <el-table-column prop="examPoint" label="考级点" min-width="160"> </el-table-column> -->
+            <el-table-column prop="award" label="获奖情况" min-width="120">
+                <template slot-scope="{ row }">
+                    <span v-if="!row.second">{{ row.award }}</span>
+                    <el-select v-else v-model="row.awardId" size="mini" :controls="true" style="width: 90px" clearable>
+                        <el-option
+                            v-for="item in awards"
+                            :key="item.value"
+                            :label="item.label"
+                            :value="item.value"
+                        ></el-option>
+                    </el-select>
+                </template>
+            </el-table-column>
+            <el-table-column label="操作" align="left" fixed="right" min-width="120">
+                <template slot-scope="{ row }">
+                    <div v-if="performance.status == 'RATE'">
+                        <el-button @click="row.second = true" size="mini" plain type="warning" v-if="!row.second"
+                            >修改</el-button
+                        >
+                        <div v-else>
+                            <el-button @click="saveRow(row)" size="mini" plain type="primary">保存</el-button>
+                            <el-button @click="row.second = false" size="mini" plain type="danger">取消</el-button>
+                        </div>
+                    </div>
+                </template>
+            </el-table-column>
         </el-table>
         <div class="pagination-wrapper">
             <el-pagination
@@ -162,7 +191,6 @@
 import delChild from '@/mixins/delChild';
 import { mapState } from 'vuex';
 import pageableTable from '@/mixins/pageableTable';
-import { format } from 'date-fns';
 
 export default {
     name: 'ProgrammeOrgList',
@@ -182,11 +210,11 @@ export default {
             levelSingleOptions: [],
             levelCollectiveOptions: [],
             levelSettingId: '',
-            dialogUrl: '',
             gradingOrganizationIdOptions: [],
             gradingOrganizationId: '',
             performanceId: '',
             performances: [],
+            performance: {},
             artTypes: [],
             optionProps: {
                 value: 'id',
@@ -198,13 +226,10 @@ export default {
                 expandTrigger: 'hover'
             },
             specialtyId: '',
-            showViedo: false,
-            videoUrl: '',
-            name: '',
-            instructor: '',
             showMore: false,
             downloadProgramme: false,
-            organizationIdOptions: []
+            organizationIdOptions: [],
+            awards: []
         };
     },
     created() {
@@ -299,6 +324,7 @@ export default {
                     });
                     if (!this.$route.query.pid) {
                         this.performanceId = res.content[0].id;
+                        this.performance = res.content[0];
                     }
                 }
             })
@@ -314,17 +340,27 @@ export default {
             .catch(e => {
                 console.log(e);
             });
+        this.$http
+            .post('/award/all', { size: 20 }, { body: 'json' })
+            .then(res => {
+                if (res.content.length > 0) {
+                    res.content.forEach(item => {
+                        this.awards.push({
+                            label: item.name,
+                            value: item.id
+                        });
+                    });
+                }
+            })
+            .catch(e => {
+                console.log(e);
+            });
     },
     computed: {
         selection() {
             return this.$refs.table.selection.map(i => i.id);
         },
-        ...mapState(['organization']),
-        headers() {
-            return {
-                Authorization: 'Bearer ' + sessionStorage.getItem('token')
-            };
-        }
+        ...mapState(['organization'])
     },
     methods: {
         competitionGroupFormatter(row, column, cellValue, index) {
@@ -355,6 +391,9 @@ export default {
             if (this.form.name) {
                 data.query.name = this.form.name;
             }
+            if (this.form.awardId) {
+                data.query.awardId = this.form.awardId;
+            }
             return data;
         },
         toggleMultipleMode(multipleMode) {
@@ -375,6 +414,7 @@ export default {
             this.downloading = true;
 
             let data = {
+                size: 2000,
                 sort: 'createdAt,desc',
                 query: {
                     organizationId: this.organization.id
@@ -392,15 +432,12 @@ export default {
             if (this.specialtyId) {
                 data.query.code = this.getCode(this.specialtyId);
             }
-            if (this.name) {
-                data.query.name = this.name;
-            }
-            if (this.instructor) {
-                data.query.instructor = this.instructor;
-            }
             if (this.performanceId) {
                 data.query.performanceId = this.performanceId;
             }
+            if (this.form.awardId) {
+                data.query.awardId = this.form.awardId;
+            }
             this.$axios
                 .get('/programme/excelResult', {
                     responseType: 'blob',
@@ -423,29 +460,8 @@ export default {
                     this.$message.error(e.error);
                 });
         },
-        operation1() {
-            this.$notify({
-                title: '提示',
-                message: this.selection
-            });
-        },
-        operation2() {
-            this.$message('操作2');
-        },
-        deleteRow(row) {
-            this.$alert('删除将无法恢复,确认要删除么?', '警告', { type: 'error' })
-                .then(() => {
-                    return this.$http.post(`/programme/del/${row.id}`);
-                })
-                .then(() => {
-                    this.$message.success('删除成功');
-                    this.getData();
-                })
-                .catch(e => {
-                    if (e !== 'cancel') {
-                        this.$message.error(e.error);
-                    }
-                });
+        getCode(value) {
+            return this.forTree(this.artTypes, value).code;
         },
         forTree(list, value) {
             var result = null;
@@ -465,6 +481,23 @@ export default {
                 }
             }
             return result;
+        },
+        saveRow(row) {
+            this.$http
+                .post('/programme/saveAward', {
+                    id: row.id,
+                    awardId: row.awardId
+                })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.getData();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
         }
     }
 };