licailing %!s(int64=4) %!d(string=hai) anos
pai
achega
fdd000ebf4

+ 44 - 4
src/main/java/com/izouma/wenlvju/service/performance/ArrangeService.java

@@ -112,8 +112,10 @@ public class ArrangeService {
         String[] arr = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
         String[] arr = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "十"};
         String format1 = format.format(date);
         String format1 = format.format(date);
 
 
+        List<Programme> byPerformanceId = programmeRepo.findAllByPerformanceIdAndStatus(dto.getPerformanceId(), 1);
+
         if (dto.isMorning() && dto.isAfternoon()) {
         if (dto.isMorning() && dto.isAfternoon()) {
-            this.saveArrange(dto, group, time, format1, arr);
+            this.saveArrange(byPerformanceId, dto, group, time, format1, arr);
         } else {
         } else {
             LocalTime startAt;
             LocalTime startAt;
             LocalTime endAt;
             LocalTime endAt;
@@ -153,7 +155,7 @@ public class ArrangeService {
                         .morning(morning)
                         .morning(morning)
                         .build();
                         .build();
 
 
-                Map<String, String> programmes = programmeService.group(arrange);
+                Map<String, String> programmes = programmeService.group(byPerformanceId, arrange);
                 List<Programme> programmeList = JSONObject.parseArray(programmes.get("programmes"), Programme.class);
                 List<Programme> programmeList = JSONObject.parseArray(programmes.get("programmes"), Programme.class);
                 List<Long> ids = programmeList.stream()
                 List<Long> ids = programmeList.stream()
                         .map(Programme::getSpecialtyId)
                         .map(Programme::getSpecialtyId)
@@ -184,11 +186,12 @@ public class ArrangeService {
 
 
     }
     }
 
 
-    public void saveArrange(ArrangeDTO dto, int group, int time, String format1, String[] arr) {
+    public void saveArrange(List<Programme> byPerformanceId, ArrangeDTO dto, int group, int time, String format1, String[] arr) {
         LocalDate date = dto.getStartDate();
         LocalDate date = dto.getStartDate();
         LocalTime startTime = dto.getMorningStartTime();
         LocalTime startTime = dto.getMorningStartTime();
         boolean morning = true;
         boolean morning = true;
         int j = 0;
         int j = 0;
+
         for (int i = 0; i < group; i++) {
         for (int i = 0; i < group; i++) {
             LocalTime endTime = startTime.plusMinutes(time);
             LocalTime endTime = startTime.plusMinutes(time);
 //            if (!endTime.isBefore(dto.getMorningEndTime())) {
 //            if (!endTime.isBefore(dto.getMorningEndTime())) {
@@ -212,7 +215,7 @@ public class ArrangeService {
                     .morning(morning)
                     .morning(morning)
                     .build();
                     .build();
 
 
-            Map<String, String> programmes = programmeService.group(arrange);
+            Map<String, String> programmes = programmeService.group(byPerformanceId, arrange);
             List<Programme> programmeList = JSONObject.parseArray(programmes.get("programmes"), Programme.class);
             List<Programme> programmeList = JSONObject.parseArray(programmes.get("programmes"), Programme.class);
             List<Long> ids = programmeList.stream()
             List<Long> ids = programmeList.stream()
                     .map(Programme::getSpecialtyId)
                     .map(Programme::getSpecialtyId)
@@ -287,4 +290,41 @@ public class ArrangeService {
         }), JpaUtils.toPageRequest(pageQuery));
         }), JpaUtils.toPageRequest(pageQuery));
     }
     }
 
 
+    public void groupOffline(ArrangeDTO dto) {
+        Arrange first = arrangeRepo.findFirstByPerformanceId(dto.getPerformanceId());
+        if (ObjectUtil.isNotNull(first) && first.isPublish()) {
+            throw new BusinessException("活动分组已发布");
+        }
+        List<Programme> byPerformanceId = programmeRepo.findAllByPerformanceIdAndStatus(dto.getPerformanceId(), 1);
+        int group = (int) Math.ceil((double) byPerformanceId.size() / dto.getQuantity());
+
+        for (int i = 0; i < group; i++) {
+            Arrange arrange = Arrange.builder()
+                    .performanceId(dto.getPerformanceId())
+                    .quantity(dto.getQuantity())
+                    .specialtyId(dto.getSpecialtyId())
+                    .name("第" + i + 1 + "场")
+                    .build();
+
+            Map<String, String> programmes = programmeService.group(byPerformanceId, arrange);
+            List<Programme> programmeList = JSONObject.parseArray(programmes.get("programmes"), Programme.class);
+            List<Long> ids = programmeList.stream()
+                    .map(Programme::getSpecialtyId)
+                    .distinct()
+                    .collect(Collectors.toList());
+            arrange.setSpecialtyId(ids);
+            arrange.setQuantity(programmeList.size());
+            arrange = arrangeRepo.save(arrange);
+
+            programmeService.saveAll(programmeList, arrange.getId());
+
+            // 插入节目
+            if (!Boolean.parseBoolean(programmes.get("flag"))) {
+                //不需要这么多分组
+                break;
+            }
+        }
+    }
+
+
 }
 }

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

@@ -331,10 +331,10 @@ public class ProgrammeService {
     }
     }
 
 
     @Transactional(rollbackOn = Exception.class)
     @Transactional(rollbackOn = Exception.class)
-    public Map<String, String> group(Arrange arrange) {
+    public Map<String, String> group(List<Programme> byPerformanceId, Arrange arrange) {
         boolean flag = true;
         boolean flag = true;
 
 
-        List<Programme> byPerformanceId = programmeRepo.findAllByPerformanceIdAndStatus(arrange.getPerformanceId(), 0);
+
         int quantity = arrange.getQuantity();
         int quantity = arrange.getQuantity();
         if (byPerformanceId.size() < quantity) {
         if (byPerformanceId.size() < quantity) {
             flag = false;
             flag = false;
@@ -374,7 +374,7 @@ public class ProgrammeService {
         // 是否继续分组
         // 是否继续分组
         boolean flag = true;
         boolean flag = true;
 
 
-        List<Programme> byPerformanceId = programmeRepo.findAllByPerformanceIdAndStatus(arrange.getPerformanceId(), 0);
+        List<Programme> byPerformanceId = programmeRepo.findAllByPerformanceIdAndStatus(arrange.getPerformanceId(), 1);
         int quantity = arrange.getQuantity();
         int quantity = arrange.getQuantity();
         if (byPerformanceId.size() < quantity) {
         if (byPerformanceId.size() < quantity) {
             flag = false;
             flag = false;

+ 40 - 10
src/main/vue/src/views/performance/ArrangeList.vue

@@ -28,7 +28,7 @@
                         <el-card shadow="hover" :body-style="{ padding: '20px' }" style="margin-bottom: 20px">
                         <el-card shadow="hover" :body-style="{ padding: '20px' }" style="margin-bottom: 20px">
                             <el-row :gutter="15">
                             <el-row :gutter="15">
                                 <el-col :span="12" :offset="0">
                                 <el-col :span="12" :offset="0">
-                                    <el-form-item label="活动日期" prop="dateRange">
+                                    <el-form-item label="活动日期" prop="dateRange" v-if="performance.online">
                                         <el-date-picker
                                         <el-date-picker
                                             v-model="dateRange"
                                             v-model="dateRange"
                                             value-format="yyyy-MM-dd"
                                             value-format="yyyy-MM-dd"
@@ -42,7 +42,13 @@
                                     </el-form-item>
                                     </el-form-item>
                                 </el-col>
                                 </el-col>
                                 <el-col :span="12" :offset="0">
                                 <el-col :span="12" :offset="0">
-                                    <el-form-item prop="address" class="flex" label="活动地点" style="width: 100%">
+                                    <el-form-item
+                                        prop="address"
+                                        class="flex"
+                                        label="活动地点"
+                                        style="width: 100%"
+                                        v-if="performance.online"
+                                    >
                                         <el-select v-model="form.address">
                                         <el-select v-model="form.address">
                                             <el-option
                                             <el-option
                                                 v-for="(item, index) in addresses"
                                                 v-for="(item, index) in addresses"
@@ -54,7 +60,7 @@
                                     </el-form-item>
                                     </el-form-item>
                                 </el-col>
                                 </el-col>
                                 <el-col :span="12">
                                 <el-col :span="12">
-                                    <el-form-item label="时间安排" prop="morning">
+                                    <el-form-item label="时间安排" prop="morning" v-if="performance.online">
                                         <el-checkbox v-model="form.morning" disabled>上午</el-checkbox>
                                         <el-checkbox v-model="form.morning" disabled>上午</el-checkbox>
                                         <el-time-select
                                         <el-time-select
                                             placeholder="起始时间"
                                             placeholder="起始时间"
@@ -86,19 +92,24 @@
 
 
                                 <el-col :span="6" :offset="0">
                                 <el-col :span="6" :offset="0">
                                     <el-form-item class="flex" label="分组节目数量" prop="quantity">
                                     <el-form-item class="flex" label="分组节目数量" prop="quantity">
-                                        <!-- <el-input-number type="number" v-model="form.quantity"></el-input-number> -->
-                                        <el-select v-model="form.quantity" clearable>
+                                        <el-input-number type="number" v-model="form.quantity"></el-input-number>
+                                        <!-- <el-select v-model="form.quantity" clearable>
                                             <el-option
                                             <el-option
                                                 v-for="item in nums"
                                                 v-for="item in nums"
                                                 :key="item"
                                                 :key="item"
                                                 :label="item"
                                                 :label="item"
                                                 :value="item"
                                                 :value="item"
                                             ></el-option>
                                             ></el-option>
-                                        </el-select>
+                                        </el-select> -->
                                     </el-form-item>
                                     </el-form-item>
                                 </el-col>
                                 </el-col>
                                 <el-col :span="6" :offset="0">
                                 <el-col :span="6" :offset="0">
-                                    <el-form-item class="flex" label="单个节目时长" prop="duration">
+                                    <el-form-item
+                                        class="flex"
+                                        label="单个节目时长"
+                                        prop="duration"
+                                        v-if="performance.online"
+                                    >
                                         <!-- <el-input-number type="number" v-model="form.duration"></el-input-number> -->
                                         <!-- <el-input-number type="number" v-model="form.duration"></el-input-number> -->
                                         <el-select v-model="form.duration" clearable>
                                         <el-select v-model="form.duration" clearable>
                                             <el-option
                                             <el-option
@@ -111,7 +122,7 @@
                                     </el-form-item>
                                     </el-form-item>
                                 </el-col>
                                 </el-col>
                                 <el-col :span="12" :offset="0">
                                 <el-col :span="12" :offset="0">
-                                    <el-form-item label=" " prop="afternoon">
+                                    <el-form-item label=" " prop="afternoon" v-if="performance.online">
                                         <el-checkbox v-model="form.afternoon" disabled>下午</el-checkbox>
                                         <el-checkbox v-model="form.afternoon" disabled>下午</el-checkbox>
 
 
                                         <el-time-select
                                         <el-time-select
@@ -178,9 +189,9 @@
         >
         >
             <el-table-column v-if="multipleMode" align="center" type="selection" width="50"> </el-table-column>
             <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="ID" width="100"> </el-table-column> -->
-            <el-table-column prop="address" label="活动地点"> </el-table-column>
+            <el-table-column prop="address" label="活动地点" v-if="performance.online"> </el-table-column>
             <el-table-column prop="name" label="分组名称" min-width="130"> </el-table-column>
             <el-table-column prop="name" label="分组名称" min-width="130"> </el-table-column>
-            <el-table-column label="时间安排" min-width="100">
+            <el-table-column label="时间安排" min-width="100" v-if="performance.online">
                 <template slot-scope="{ row }"> {{ getTime(row.startTime) }}-{{ getTime(row.endTime) }} </template>
                 <template slot-scope="{ row }"> {{ getTime(row.startTime) }}-{{ getTime(row.endTime) }} </template>
             </el-table-column>
             </el-table-column>
             <el-table-column prop="quantity" label="节目数量"> </el-table-column>
             <el-table-column prop="quantity" label="节目数量"> </el-table-column>
@@ -284,6 +295,7 @@ export default {
             downloading: false,
             downloading: false,
             form: {},
             form: {},
             performances: [],
             performances: [],
+            performance: {},
             addresses: [],
             addresses: [],
             addressList: [],
             addressList: [],
             timeRange: [null, null],
             timeRange: [null, null],
@@ -336,6 +348,7 @@ export default {
                         });
                         });
                     });
                     });
                     this.form.performanceId = res.content[0].id;
                     this.form.performanceId = res.content[0].id;
+                    this.performance = res.content[0];
                     this.getData();
                     this.getData();
                     this.$http
                     this.$http
                         .post(
                         .post(
@@ -541,6 +554,23 @@ export default {
                     this.$message.error(e.error);
                     this.$message.error(e.error);
                 });
                 });
         },
         },
+        submitOffline() {
+            let data = { ...this.form };
+
+            this.saving = true;
+            this.$http
+                .post('/arrange/group', data, { body: 'json' })
+                .then(res => {
+                    this.saving = false;
+                    this.$message.success('成功');
+                    this.getData();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.saving = false;
+                    this.$message.error(e.error);
+                });
+        },
         move(index, direction) {
         move(index, direction) {
             const start = index;
             const start = index;
             const end = direction + index;
             const end = direction + index;