Browse Source

分配评委

licailing 4 years ago
parent
commit
e0176d21de

+ 1 - 2
src/main/java/com/izouma/wenlvju/domain/performance/Programme.java

@@ -8,10 +8,9 @@ import com.izouma.wenlvju.domain.BaseEntity;
 import com.izouma.wenlvju.domain.VideoObject;
 import com.izouma.wenlvju.dto.ProgUploadDTO;
 import com.izouma.wenlvju.dto.ProgrammeDTO;
-import com.izouma.wenlvju.enums.ProgrammeProcess;
+import com.izouma.wenlvju.enums.CompetitionGroup;
 import com.izouma.wenlvju.enums.ProgrammeStatus;
 import com.izouma.wenlvju.enums.SignedIn;
-import com.izouma.wenlvju.enums.CompetitionGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;

+ 1 - 0
src/main/java/com/izouma/wenlvju/repo/performance/ArrangeRepo.java

@@ -21,6 +21,7 @@ public interface ArrangeRepo extends JpaRepository<Arrange, Long>, JpaSpecificat
 
     Arrange findFirstByPerformanceIdAndAuditTimes(Long performanceId, int auditTimes);
 
+    long countArrangeByPerformanceId(Long performanceId);
 //    @Query("update Arrange t set t.publish = true where t.performanceId = ?1")
 //    @Modifying
 //    @Transactional

+ 4 - 3
src/main/java/com/izouma/wenlvju/repo/performance/ProgrammeRepo.java

@@ -17,11 +17,12 @@ public interface ProgrammeRepo extends JpaRepository<Programme, Long>, JpaSpecif
     @Transactional
     void softDelete(Long id);
 
-    long countAllByPerformanceId(Long performanceId);
-
     List<Programme> findAllByPerformanceIdAndProgrammeStatus(Long performanceId, ProgrammeStatus status);
 
-    long countAllByArrangeIdAndProgrammeStatusIsNotNull(Long arrangeId);
+    @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")
     @Modifying

+ 7 - 1
src/main/java/com/izouma/wenlvju/service/performance/ArrangeJudgeService.java

@@ -8,6 +8,7 @@ import com.izouma.wenlvju.domain.performance.Arrange;
 import com.izouma.wenlvju.domain.performance.ArrangeJudge;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
+import com.izouma.wenlvju.repo.RateAuditRepo;
 import com.izouma.wenlvju.repo.UserRepo;
 import com.izouma.wenlvju.repo.performance.ArrangeJudgeRepo;
 import com.izouma.wenlvju.repo.performance.ArrangeRepo;
@@ -31,6 +32,7 @@ public class ArrangeJudgeService {
     private ArrangeRepo      arrangeRepo;
     private UserRepo         userRepo;
     private NjwlSmsService   njwlSmsService;
+    private RateAuditRepo    rateAuditRepo;
 
     public Page<ArrangeJudge> all(PageQuery pageQuery) {
         return arrangeJudgeRepo.findAll(JpaUtils.toSpecification(pageQuery, ArrangeJudge.class), JpaUtils.toPageRequest(pageQuery));
@@ -41,6 +43,7 @@ public class ArrangeJudgeService {
         List<Long> expertIds = converter.convertToEntityAttribute(experts);
         List<Long> arrangeIds = converter.convertToEntityAttribute(arranges);
         Arrange arrange = arrangeRepo.findById(arrangeIds.get(0)).orElseThrow(new BusinessException("无分组"));
+
         LocalDate date = arrange.getDate();
         Boolean morning = arrange.getMorning();
         if (ObjectUtil.isNotNull(date)) {
@@ -85,6 +88,9 @@ public class ArrangeJudgeService {
                 .stream()
                 .map(User::getPhone)
                 .collect(Collectors.joining(","));
-        njwlSmsService.sendSms(phones,"已分配您评审节目,链接为http://yskj.njlyw.cn:8081/h5/login");
+        njwlSmsService.sendSms(phones, "已分配您评审节目,链接为http://yskj.njlyw.cn:8081/h5/login");
+
+        //记录
+
     }
 }

+ 28 - 6
src/main/java/com/izouma/wenlvju/service/performance/ArrangeService.java

@@ -1,9 +1,9 @@
 package com.izouma.wenlvju.service.performance;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.ObjectUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.izouma.wenlvju.domain.ArtType;
+import com.izouma.wenlvju.domain.RateAudit;
 import com.izouma.wenlvju.domain.User;
 import com.izouma.wenlvju.domain.performance.Arrange;
 import com.izouma.wenlvju.domain.performance.ArrangeJudge;
@@ -12,10 +12,10 @@ import com.izouma.wenlvju.domain.performance.Programme;
 import com.izouma.wenlvju.dto.ArrangeDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.enums.PerformanceStatus;
-import com.izouma.wenlvju.enums.ProgrammeProcess;
 import com.izouma.wenlvju.enums.ProgrammeStatus;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ArtTypeRepo;
+import com.izouma.wenlvju.repo.RateAuditRepo;
 import com.izouma.wenlvju.repo.UserRepo;
 import com.izouma.wenlvju.repo.performance.ArrangeJudgeRepo;
 import com.izouma.wenlvju.repo.performance.ArrangeRepo;
@@ -47,6 +47,7 @@ public class ArrangeService {
     private ArrangeJudgeRepo arrangeJudgeRepo;
     private UserRepo         userRepo;
     private PerformanceRepo  performanceRepo;
+    private RateAuditRepo    rateAuditRepo;
 
     public Page<Arrange> all(PageQuery pageQuery) {
         Map<Long, String> artMap = artTypeRepo.findAll()
@@ -288,12 +289,13 @@ public class ArrangeService {
         List<Programme> byPerformanceId = programmeRepo.findAllByPerformanceIdAndProgrammeStatus(dto.getPerformanceId(), ProgrammeStatus.SUBMIT);
         int group = (int) Math.ceil((double) byPerformanceId.size() / dto.getQuantity());
 
-        for (int i = 1; i <= group; i++) {
+        long count = arrangeRepo.countArrangeByPerformanceId(dto.getPerformanceId());
+        for (int i = 0; i < group; i++) {
             Arrange arrange = Arrange.builder()
                     .performanceId(dto.getPerformanceId())
                     .quantity(dto.getQuantity())
                     .specialtyId(dto.getSpecialtyId())
-                    .name("第" + i + "场")
+                    .name("第" + count + "场")
                     .auditTimes(times)
                     .build();
 
@@ -315,6 +317,7 @@ public class ArrangeService {
                 //不需要这么多分组
                 break;
             }
+            count++;
         }
     }
 
@@ -324,12 +327,24 @@ public class ArrangeService {
         if (performance.getAuditTimes() > 1) {
             online = performance.getReviewOnline();
         }
-        // 改为分配评委
+        // 改为分配评委
         performance.setStatus(PerformanceStatus.ARRANGE_JUDGE);
         performanceRepo.save(performance);
         if (!online) {
             this.publishOffline(performanceId);
         }
+
+        //记录状态
+//        List<Long> pids = programmeRepo.findIdByPerformanceIdAndProgrammeStatus(performanceId, ProgrammeStatus.SUBMIT);
+//        List<RateAudit> rateAudits = new ArrayList<>();
+//        pids.forEach(id -> rateAudits.add(RateAudit.builder()
+//                .status(PerformanceStatus.ARRANGE.toString())
+//                .userId(userId)
+//                .programmeAudit(true)
+//                .rateId(id)
+//                .remark("分组安排已发布")
+//                .build()));
+//        rateAuditRepo.saveAll(rateAudits);
     }
 
     public void publishOffline(Long performanceId) {
@@ -368,12 +383,19 @@ public class ArrangeService {
         if (CollUtil.isEmpty(arrangeId)) {
             return new PageImpl<>(new ArrayList<>(), JpaUtils.toPageRequest(pageQuery), 0);
         }
+        Map<Long, String> artTypeMap = artTypeRepo.findAllByParentIsNull()
+                .stream()
+                .collect(Collectors.toMap(ArtType::getId, ArtType::getName));
         pageQuery.setSort("date,asc;startTime,asc;");
         return arrangeRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> {
             List<Predicate> and = JpaUtils.toPredicates(pageQuery, Arrange.class, root, criteriaQuery, criteriaBuilder);
             and.add(root.get("id").in(arrangeId));
             return criteriaBuilder.and(and.toArray(new Predicate[0]));
-        }), JpaUtils.toPageRequest(pageQuery));
+        }), JpaUtils.toPageRequest(pageQuery)).map(arrange -> {
+            List<String> names = arrange.getSpecialtyId().stream().map(artTypeMap::get).collect(Collectors.toList());
+            arrange.setSpecialtyName(names);
+            return arrange;
+        });
     }
 
 }

+ 47 - 5
src/main/java/com/izouma/wenlvju/service/performance/ProgrammeService.java

@@ -20,6 +20,7 @@ import com.izouma.wenlvju.service.UserService;
 import com.izouma.wenlvju.service.storage.StorageService;
 import com.izouma.wenlvju.utils.FileUtils;
 import com.izouma.wenlvju.utils.JpaUtils;
+import com.izouma.wenlvju.utils.ObjUtils;
 import com.izouma.wenlvju.utils.excel.UploadDataListener;
 import lombok.AllArgsConstructor;
 import org.apache.commons.io.FilenameUtils;
@@ -29,6 +30,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.persistence.criteria.Predicate;
@@ -68,6 +70,41 @@ public class ProgrammeService {
         return programmeRepo.findAll(JpaUtils.toSpecification(pageQuery, Programme.class), JpaUtils.toPageRequest(pageQuery));
     }
 
+    public Programme save(Programme record, Long userId) {
+        if (record.getId() != null) {
+            Programme orig = programmeRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
+            if (ProgrammeStatus.INITIAL.equals(orig.getProgrammeStatus())) {
+                Performance performance = performanceRepo.findById(orig.getPerformanceId())
+                        .orElseThrow(new BusinessException("无展演活动"));
+                if (LocalDate.now().isAfter(performance.getEndDate())) {
+                    throw new BusinessException("活动已报名结束!");
+                }
+            }
+            ObjUtils.merge(orig, record);
+            orig.setParentSpecialtyId(artTypeService.getParent(orig.getSpecialtyId()));
+            record = programmeRepo.save(orig);
+        } else {
+            Performance performance = performanceRepo.findById(record.getPerformanceId())
+                    .orElseThrow(new BusinessException("无展演活动"));
+            if (LocalDate.now().isAfter(performance.getEndDate())) {
+                throw new BusinessException("活动已报名结束!");
+            }
+            record.setParentSpecialtyId(artTypeService.getParent(record.getSpecialtyId()));
+            record = programmeRepo.save(record);
+        }
+        if (ProgrammeStatus.SUBMIT.equals(record.getProgrammeStatus())) {
+            rateAuditRepo.save(RateAudit.builder()
+                    .rateId(record.getId())
+                    .programmeAudit(true)
+                    .userId(userId)
+                    .remark("已上报节目信息")
+                    .status(ProgrammeStatus.SUBMIT.toString())
+                    .build());
+        }
+        return record;
+    }
+
+
     public Page<ProgrammeDTO> backAll(PageQuery pageQuery) {
         Map<String, Object> query = pageQuery.getQuery();
         Object code = query.get("code");
@@ -569,11 +606,16 @@ public class ProgrammeService {
     public void signIn(Long id, SignedIn signedIn, String description, Long userId) {
         Programme programme = programmeRepo.findById(id).orElseThrow(new BusinessException("无节目"));
         programme.setSignedIn(signedIn);
-//        programme.setDescription(description);
-//        programme.setSignedAt(LocalDateTime.now());
         programmeRepo.save(programme);
 
-        long unSigned = programmeRepo.countAllByArrangeIdAndProgrammeStatusIsNotNull(programme.getArrangeId());
+        //该状态
+        Performance performance = performanceRepo.findById(programme.getId()).orElseThrow(new BusinessException("无活动"));
+        if (PerformanceStatus.ARRANGE_JUDGE.equals(performance.getStatus())) {
+            performance.setStatus(PerformanceStatus.SIGN_IN);
+            performanceRepo.save(performance);
+        }
+
+        long unSigned = programmeRepo.countAllByArrangeIdAndSignedInIsNull(programme.getArrangeId());
         if (unSigned == 0) {
             programmeRepo.allSigned(programme.getArrangeId());
         }
@@ -670,13 +712,13 @@ public class ProgrammeService {
         Programme programme = programmeRepo.findById(id).orElseThrow(new BusinessException("无节目"));
         programme.setProgrammeStatus(status);
         programmeRepo.save(programme);
-        RateAudit.builder()
+        rateAuditRepo.save(RateAudit.builder()
                 .status(status.toString())
                 .rateId(id)
                 .programmeAudit(true)
                 .remark(remark)
                 .userId(userId)
-                .build();
+                .build());
     }
 
     /*

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

@@ -1,21 +1,14 @@
 package com.izouma.wenlvju.web.performance;
 
-import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
-import com.izouma.wenlvju.domain.ArtType;
-import com.izouma.wenlvju.domain.performance.Performance;
 import com.izouma.wenlvju.domain.performance.Programme;
 import com.izouma.wenlvju.dto.*;
 import com.izouma.wenlvju.enums.ProgrammeStatus;
 import com.izouma.wenlvju.enums.SignedIn;
 import com.izouma.wenlvju.exception.BusinessException;
-import com.izouma.wenlvju.repo.ArtTypeRepo;
 import com.izouma.wenlvju.repo.performance.PerformanceRepo;
 import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
-import com.izouma.wenlvju.service.ArtTypeService;
 import com.izouma.wenlvju.service.UserService;
 import com.izouma.wenlvju.service.performance.ProgrammeService;
-import com.izouma.wenlvju.utils.ObjUtils;
 import com.izouma.wenlvju.utils.SecurityUtils;
 import com.izouma.wenlvju.utils.excel.ExcelUtils;
 import com.izouma.wenlvju.web.BaseController;
@@ -28,7 +21,6 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
-import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
@@ -39,34 +31,13 @@ import java.util.Map;
 public class ProgrammeController extends BaseController {
     private ProgrammeService programmeService;
     private ProgrammeRepo    programmeRepo;
-    private ArtTypeRepo      artTypeRepo;
-    private ArtTypeService   artTypeService;
     private UserService      userService;
     private PerformanceRepo  performanceRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     public Programme save(@RequestBody Programme record) {
-        if (record.getId() != null) {
-            Programme orig = programmeRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
-            if (ProgrammeStatus.INITIAL.equals(orig.getProgrammeStatus())) {
-                Performance performance = performanceRepo.findById(orig.getPerformanceId())
-                        .orElseThrow(new BusinessException("无展演活动"));
-                if (LocalDate.now().isAfter(performance.getEndDate())) {
-                    throw new BusinessException("活动已报名结束!");
-                }
-            }
-            ObjUtils.merge(orig, record);
-            orig.setParentSpecialtyId(artTypeService.getParent(orig.getSpecialtyId()));
-            return programmeRepo.save(orig);
-        }
-        Performance performance = performanceRepo.findById(record.getPerformanceId())
-                .orElseThrow(new BusinessException("无展演活动"));
-        if (LocalDate.now().isAfter(performance.getEndDate())) {
-            throw new BusinessException("活动已报名结束!");
-        }
-        record.setParentSpecialtyId(artTypeService.getParent(record.getSpecialtyId()));
-        return programmeRepo.save(record);
+        return programmeService.save(record, SecurityUtils.getAuthenticatedUser().getId());
     }
 
 

+ 1 - 1
src/main/vue/src/views/performance/PerformanceList.vue

@@ -28,7 +28,7 @@
             <!-- <el-table-column prop="id" label="ID" width="100"> </el-table-column> -->
             <el-table-column prop="name" label="活动名称" min-width="230"> </el-table-column>
             <el-table-column prop="year" label="年度" min-width="50"> </el-table-column>
-            <el-table-column label="活动状态" width="80">
+            <el-table-column label="活动状态" width="100">
                 <template slot-scope="{ row }">
                     <el-link style="font-size: 13px" :underline="false" type="info" v-if="currentTime < row.startDate"
                         >未开始</el-link

+ 14 - 4
src/main/vue/src/views/performance/ProgrammeSignList.vue

@@ -69,14 +69,15 @@
             </el-table-column>
             <el-table-column prop="organization" label="承办单位" min-width="160"> </el-table-column>
             <el-table-column prop="name" label="节目名称" min-width="70"> </el-table-column>
-            <el-table-column label="表演时间" min-width="70"> </el-table-column>
+            <el-table-column label="表演时间" min-width="70" v-if="!performance.online"> </el-table-column>
             <el-table-column prop="quantity" label="表演人数" min-width="70"> </el-table-column>
             <el-table-column prop="contact" label="联系人" min-width="68"> </el-table-column>
             <el-table-column prop="phone" label="联系电话" min-width="95"> </el-table-column>
             <el-table-column prop="writerDirector" label="编导姓名"> </el-table-column>
             <el-table-column prop="writerPhone" label="联系电话"> </el-table-column>
-            <el-table-column prop="signedIn" label="状态" :formatter="signedInFormatter"> </el-table-column>
-            <el-table-column label="操作" align="left" fixed="right" min-width="100">
+            <el-table-column prop="signedIn" label="状态" :formatter="signedInFormatter" v-if="!performance.online">
+            </el-table-column>
+            <el-table-column label="操作" align="left" fixed="right" min-width="100" v-if="!performance.online">
                 <template slot-scope="{ row }">
                     <el-button @click="showSign(row)" size="mini" plain type="primary">签到处理</el-button>
                 </template>
@@ -146,10 +147,11 @@ export default {
             url: '/programme/byArrange',
             downloading: false,
             form: {
-                date: new Date()
+                // date: new Date()
             },
             dialogSign: false,
             performances: [],
+            performance: {},
             signedInOptions: [
                 { label: '已签到', value: 'SIGNED_IN' },
                 { label: '未签到', value: 'UNSIGNED' },
@@ -184,6 +186,9 @@ export default {
                         });
                     });
                     // this.form.performanceId = res.content[0].id;
+                    this.form.performanceId = res.content[0].id;
+                    this.performance = res.content[0];
+                    this.getData();
                     this.$http
                         .post('/performanceSchedule/all', { size: 100 }, { body: 'json' })
                         .then(res => {
@@ -346,6 +351,11 @@ export default {
                     };
                 }
             }
+        },
+        getPerformance() {
+            this.performance = this.performances.find(item => {
+                return item.id == this.form.performanceId;
+            });
         }
     }
 };

+ 1 - 1
src/test/java/com/izouma/wenlvju/repo/UserRepoTest.java

@@ -74,7 +74,7 @@ public class UserRepoTest {
 
     @Test
     public void test3() {
-        System.out.println(jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(25L)
+        System.out.println(jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(348L)
                 .orElseThrow(new BusinessException("用户不存在")))));
     }