|
@@ -8,6 +8,7 @@ import com.izouma.wenlvju.domain.ArtType;
|
|
|
import com.izouma.wenlvju.domain.GradingOrganization;
|
|
import com.izouma.wenlvju.domain.GradingOrganization;
|
|
|
import com.izouma.wenlvju.domain.Organization;
|
|
import com.izouma.wenlvju.domain.Organization;
|
|
|
import com.izouma.wenlvju.domain.Setting;
|
|
import com.izouma.wenlvju.domain.Setting;
|
|
|
|
|
+import com.izouma.wenlvju.domain.performance.Arrange;
|
|
|
import com.izouma.wenlvju.domain.performance.Participant;
|
|
import com.izouma.wenlvju.domain.performance.Participant;
|
|
|
import com.izouma.wenlvju.domain.performance.Performance;
|
|
import com.izouma.wenlvju.domain.performance.Performance;
|
|
|
import com.izouma.wenlvju.domain.performance.Programme;
|
|
import com.izouma.wenlvju.domain.performance.Programme;
|
|
@@ -19,6 +20,7 @@ import com.izouma.wenlvju.repo.ArtTypeRepo;
|
|
|
import com.izouma.wenlvju.repo.GradingOrganizationRepo;
|
|
import com.izouma.wenlvju.repo.GradingOrganizationRepo;
|
|
|
import com.izouma.wenlvju.repo.OrganizationRepo;
|
|
import com.izouma.wenlvju.repo.OrganizationRepo;
|
|
|
import com.izouma.wenlvju.repo.SettingRepo;
|
|
import com.izouma.wenlvju.repo.SettingRepo;
|
|
|
|
|
+import com.izouma.wenlvju.repo.performance.ArrangeRepo;
|
|
|
import com.izouma.wenlvju.repo.performance.ParticipantRepo;
|
|
import com.izouma.wenlvju.repo.performance.ParticipantRepo;
|
|
|
import com.izouma.wenlvju.repo.performance.PerformanceRepo;
|
|
import com.izouma.wenlvju.repo.performance.PerformanceRepo;
|
|
|
import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
|
|
import com.izouma.wenlvju.repo.performance.ProgrammeRepo;
|
|
@@ -35,7 +37,9 @@ import java.io.ByteArrayInputStream;
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.ByteArrayOutputStream;
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
import java.io.InputStream;
|
|
import java.io.InputStream;
|
|
|
|
|
+import java.time.LocalDateTime;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
|
|
+import java.util.Comparator;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -52,6 +56,7 @@ public class ProgrammeService {
|
|
|
private SettingRepo settingRepo;
|
|
private SettingRepo settingRepo;
|
|
|
private ArtTypeService artTypeService;
|
|
private ArtTypeService artTypeService;
|
|
|
private PerformanceRepo performanceRepo;
|
|
private PerformanceRepo performanceRepo;
|
|
|
|
|
+ private ArrangeRepo arrangeRepo;
|
|
|
|
|
|
|
|
public Page<Programme> all(PageQuery pageQuery) {
|
|
public Page<Programme> all(PageQuery pageQuery) {
|
|
|
return programmeRepo.findAll(JpaUtils.toSpecification(pageQuery, Programme.class), JpaUtils.toPageRequest(pageQuery));
|
|
return programmeRepo.findAll(JpaUtils.toSpecification(pageQuery, Programme.class), JpaUtils.toPageRequest(pageQuery));
|
|
@@ -231,4 +236,125 @@ public class ProgrammeService {
|
|
|
|
|
|
|
|
programmeRepo.saveAll(programmes);
|
|
programmeRepo.saveAll(programmes);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ @Transactional(rollbackOn = Exception.class)
|
|
|
|
|
+ public boolean group(Arrange arrange) {
|
|
|
|
|
+ boolean flag = true;
|
|
|
|
|
+
|
|
|
|
|
+ List<Programme> byPerformanceId = programmeRepo.findAllByPerformanceIdAndStatus(arrange.getPerformanceId(), 0);
|
|
|
|
|
+ int quantity = arrange.getQuantity();
|
|
|
|
|
+ if (byPerformanceId.size() < quantity) {
|
|
|
|
|
+ flag = false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ List<Programme> result = new ArrayList<>(quantity);
|
|
|
|
|
+ if (CollUtil.isNotEmpty(arrange.getSpecialtyId())) {
|
|
|
|
|
+
|
|
|
|
|
+ List<Long> artTypeChild = artTypeService.getChild(arrange.getSpecialtyId(), new ArrayList<>(arrange.getSpecialtyId()));
|
|
|
|
|
+ List<Programme> programmeList = byPerformanceId.stream()
|
|
|
|
|
+ .filter(programme -> artTypeChild.contains(programme.getSpecialtyId()))
|
|
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
+
|
|
|
|
|
+ int size = programmeList.size();
|
|
|
|
|
+ if (size < quantity) {
|
|
|
|
|
+ programmeList.addAll(byPerformanceId.stream()
|
|
|
|
|
+ .filter(programme -> !artTypeChild.contains(programme.getSpecialtyId()))
|
|
|
|
|
+ .limit(quantity - size)
|
|
|
|
|
+ .collect(Collectors.toList()));
|
|
|
|
|
+ flag = false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ this.sort(programmeList);
|
|
|
|
|
+ result.addAll(programmeList.stream().limit(quantity).collect(Collectors.toList()));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ this.sort(byPerformanceId);
|
|
|
|
|
+ result.addAll(byPerformanceId.stream().limit(quantity).collect(Collectors.toList()));
|
|
|
|
|
+ }
|
|
|
|
|
+// LocalDateTime showTime = LocalDateTime.of(arrange.getDate(), arrange.getStartTime());
|
|
|
|
|
+
|
|
|
|
|
+ for (Programme programme : result) {
|
|
|
|
|
+ programme.setArrangeId(arrange.getId());
|
|
|
|
|
+// programme.setShowTime(showTime);
|
|
|
|
|
+ programme.setStatus(1);
|
|
|
|
|
+// showTime = showTime.plusMinutes(arrange.getDuration());
|
|
|
|
|
+ }
|
|
|
|
|
+ programmeRepo.saveAll(result);
|
|
|
|
|
+ if (result.size() < quantity) {
|
|
|
|
|
+ arrange.setQuantity(result.size());
|
|
|
|
|
+ arrangeRepo.save(arrange);
|
|
|
|
|
+ }
|
|
|
|
|
+ return flag;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void sort(List<Programme> programmes) {
|
|
|
|
|
+ programmes.sort((a, b) -> {
|
|
|
|
|
+ if (a.getOrganizationId().equals(b.getOrganizationId())) {
|
|
|
|
|
+ if (a.getOrganizationId().equals(b.getOrganizationId())) {
|
|
|
|
|
+// if (StrUtil.isNotBlank(a.getExamPoint()) && StrUtil.isNotBlank(b.getExamPoint()) && a.getExamPoint()
|
|
|
|
|
+// .equals(b.getExamPoint())) {
|
|
|
|
|
+ return a.getSpecialtyId().compareTo(b.getSpecialtyId());
|
|
|
|
|
+// } else {
|
|
|
|
|
+// return a.getExamPoint().compareTo(b.getExamPoint());
|
|
|
|
|
+// }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return a.getOrganizationId().compareTo(b.getOrganizationId());
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ return a.getOrganizationId().compareTo(b.getOrganizationId());
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ /*
|
|
|
|
|
+ 移除分组
|
|
|
|
|
+ */
|
|
|
|
|
+ public void removeArrange(Long id) {
|
|
|
|
|
+ Programme programme = programmeRepo.findById(id).orElseThrow(new BusinessException("无记录"));
|
|
|
|
|
+ Long arrangeId = programme.getArrangeId();
|
|
|
|
|
+
|
|
|
|
|
+// final LocalDateTime[] showTime = {programme.getShowTime()};
|
|
|
|
|
+ // 分组下的所有节目
|
|
|
|
|
+// List<Programme> programmes = programmeRepo.findAllByArrangeIdAndShowTimeAfter(arrangeId, showTime[0]);
|
|
|
|
|
+// programmes.sort(Comparator.comparing(Programme::getShowTime));
|
|
|
|
|
+// programmes.forEach(pro -> {
|
|
|
|
|
+// LocalDateTime tmp = pro.getShowTime();
|
|
|
|
|
+// pro.setShowTime(showTime[0]);
|
|
|
|
|
+// showTime[0] = tmp;
|
|
|
|
|
+// });
|
|
|
|
|
+
|
|
|
|
|
+ programme.setStatus(0);
|
|
|
|
|
+ programme.setArrangeId(null);
|
|
|
|
|
+ programmeRepo.save(programme);
|
|
|
|
|
+
|
|
|
|
|
+// programmes.add(programme);
|
|
|
|
|
+// programmeRepo.saveAll(programmes);
|
|
|
|
|
+
|
|
|
|
|
+ arrangeRepo.minusQuantity(arrangeId);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*
|
|
|
|
|
+ 增加节目
|
|
|
|
|
+ */
|
|
|
|
|
+ public void add(Long id, Long arrangeId) {
|
|
|
|
|
+// LocalDateTime showTime = programmeRepo.findFirstByArrangeIdOrderByShowTimeDesc(arrangeId).getShowTime();
|
|
|
|
|
+ Arrange arrange = arrangeRepo.findById(arrangeId).orElseThrow(new BusinessException("无记录"));
|
|
|
|
|
+ Programme programme = programmeRepo.findById(id).orElseThrow(new BusinessException("无记录"));
|
|
|
|
|
+// programme.setShowTime(showTime.plusMinutes(arrange.getDuration()));
|
|
|
|
|
+ programme.setArrangeId(arrangeId);
|
|
|
|
|
+ programme.setStatus(1);
|
|
|
|
|
+ programmeRepo.save(programme);
|
|
|
|
|
+
|
|
|
|
|
+ arrange.setQuantity(arrange.getQuantity() + 1);
|
|
|
|
|
+ arrangeRepo.save(arrange);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /*
|
|
|
|
|
+ 未分组节目
|
|
|
|
|
+ */
|
|
|
|
|
+ public List<Programme> ungrouped(Long performanceId) {
|
|
|
|
|
+ List<Programme> programmes = programmeRepo.findAllByPerformanceIdAndStatus(performanceId, 0);
|
|
|
|
|
+ this.sort(programmes);
|
|
|
|
|
+ return programmes;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|