licailing 4 anni fa
parent
commit
07e4c1b05c

+ 27 - 0
src/main/java/com/izouma/wenlvju/converter/NumOfReportListConverter.java

@@ -0,0 +1,27 @@
+package com.izouma.wenlvju.converter;
+
+import com.alibaba.fastjson.JSON;
+import com.izouma.wenlvju.domain.regulation.NumOfReport;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.persistence.AttributeConverter;
+import javax.persistence.Converter;
+import java.util.List;
+
+@Converter
+public class NumOfReportListConverter implements AttributeConverter<List<NumOfReport>, String> {
+    @Override
+    public String convertToDatabaseColumn(List<NumOfReport> list) {
+        if (list != null)
+            return JSON.toJSONString(list);
+        return null;
+    }
+
+    @Override
+    public List<NumOfReport> convertToEntityAttribute(String s) {
+        if (StringUtils.isNotEmpty(s)) {
+            return JSON.parseArray(s, NumOfReport.class);
+        }
+        return null;
+    }
+}

+ 15 - 0
src/main/java/com/izouma/wenlvju/domain/regulation/NumOfReport.java

@@ -0,0 +1,15 @@
+package com.izouma.wenlvju.domain.regulation;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+public class NumOfReport {
+    private String  name;
+    private Integer num;
+}

+ 12 - 4
src/main/java/com/izouma/wenlvju/domain/regulation/Report.java

@@ -1,5 +1,6 @@
 package com.izouma.wenlvju.domain.regulation;
 
+import com.izouma.wenlvju.converter.NumOfReportListConverter;
 import com.izouma.wenlvju.domain.BaseEntity;
 import com.izouma.wenlvju.enums.ReportType;
 import io.swagger.annotations.ApiModelProperty;
@@ -8,10 +9,9 @@ import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
+import javax.persistence.*;
+import java.util.List;
+import java.util.Map;
 
 @Data
 @AllArgsConstructor
@@ -37,4 +37,12 @@ public class Report extends BaseEntity {
 
     @Column(columnDefinition = "TEXT")
     private String file;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = NumOfReportListConverter.class)
+    private List<NumOfReport> total;
+
+    @Column(columnDefinition = "TEXT")
+    @Convert(converter = NumOfReportListConverter.class)
+    private List<NumOfReport> specialty;
 }

+ 35 - 17
src/main/java/com/izouma/wenlvju/service/regulation/ReportService.java

@@ -8,6 +8,7 @@ import com.izouma.wenlvju.domain.Organization;
 import com.izouma.wenlvju.domain.Record;
 import com.izouma.wenlvju.domain.RecordSpecialty;
 import com.izouma.wenlvju.domain.regulation.Complain;
+import com.izouma.wenlvju.domain.regulation.NumOfReport;
 import com.izouma.wenlvju.domain.regulation.Report;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.ReportDTO;
@@ -263,20 +264,38 @@ public class ReportService {
     /*
     总统计图
      */
-    public Map<String, Integer> getTotal(List<Record> records, List<Complain> complains) {
-        Map<String, Integer> map = new HashMap<>();
+    public List<NumOfReport> getTotal(List<Record> records, List<Complain> complains) {
+        List<NumOfReport> total = new ArrayList<>(3);
         //备案条数
-        map.put("record", records.size());
+        total.add(NumOfReport.builder()
+                .name("record")
+                .num(records.size())
+                .build());
         //报考人数
         int examQuantity = records.stream().mapToInt(Record::getExamQuantity).sum();
-        map.put("examQuantity", examQuantity);
-        //投诉数量
-        map.put("complain", complains.size());
-        return map;
+        total.add(NumOfReport.builder()
+                .name("examQuantity")
+                .num(examQuantity)
+                .build());
+        //投诉条数
+        total.add(NumOfReport.builder()
+                .name("complain")
+                .num(complains.size())
+                .build());
+
+        return total;
+//        Map<String, Integer> map = new HashMap<>();
+//        //备案条数
+//        map.put("record", records.size());
+//        //报考人数
+//        map.put("examQuantity", examQuantity);
+//        //投诉数量
+//        map.put("complain", complains.size());
+//        return map;
     }
 
     /*
-    各转报考人数-饼图
+    各专业考场数量-饼图
      */
     public Map<String, Long> getSpecialty(List<RecordSpecialty> recordSpecialties) {
         Map<String, Long> specialtyCount = recordSpecialties.stream().filter(rs -> StrUtil.isNotEmpty(rs.getCode()))
@@ -339,7 +358,7 @@ public class ReportService {
         List<RecordSpecialty> recordSpecialties = recordSpecialtyRepo.findAllByRecordIdIn(recordIds);
 
         Map<String, Object> dataMap = new HashMap<>();
-//        try {
+
         //标题
         dataMap.put("year", report.getYear());
         if (ReportType.QUARTERLY.equals(report.getType())) {
@@ -355,10 +374,11 @@ public class ReportService {
         }
 
         //总统计
-        Map<String, Integer> total = this.getTotal(records, complains);
-        dataMap.put("record", total.get("record"));
-        dataMap.put("totalExamQuantity", total.get("examQuantity"));
-        dataMap.put("totalComplain", total.get("complain"));
+        List<NumOfReport> total = this.getTotal(records, complains);
+        total.forEach(num -> dataMap.put(num.getName(), num.getNum()));
+//        dataMap.put("record", total.get("record"));
+//        dataMap.put("totalExamQuantity", total.get("examQuantity"));
+//        dataMap.put("totalComplain", total.get("complain"));
 
         //各专业统计
         Map<String, Long> specialty = this.getSpecialty(recordSpecialties);
@@ -413,13 +433,11 @@ public class ReportService {
         String url = storageService.uploadFromInputStream(is, "word" + "/" + new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date())
                 + RandomStringUtils.randomAlphabetic(8) + ".docx");
 
+        report.setTotal(total);
         report.setFile(url);
         report.setTime(String.valueOf(date.get("time")));
         report.setTitle("南京市社会艺术水平考级监管报告");
         reportRepo.save(report);
-//        } catch (Exception e) {
-//            log.error("生成word错误", e);
-//            throw new BusinessException(e.getMessage());
-//        }
+
     }
 }

+ 0 - 3
src/main/vue/src/views/Statistic.vue

@@ -60,9 +60,6 @@ export default {
         GridLayout,
         GridItem,
         DatasWidget,
-        LineChartWidget,
-        BarChartWidget,
-        PieChartWidget,
         ArtTypeWidget,
         ExamWidegt,
         PassWidget

+ 9 - 1
src/main/vue/src/views/record/ReportList.vue

@@ -66,7 +66,7 @@
             <el-table-column prop="time" label="报告时间"> </el-table-column>
             <el-table-column label="操作" align="center" fixed="right" min-width="150">
                 <template slot-scope="{ row }">
-                    <el-button type="primary" size="mini" plain>查看</el-button>
+                    <el-button type="primary" size="mini" plain @click="statisticRow(row)">查看</el-button>
                     <el-button type="primary" size="mini" plain @click="downloadRow(row.file)">下载</el-button>
                     <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
@@ -283,6 +283,14 @@ export default {
         },
         downloadRow(file) {
             window.open(file, '_blank');
+        },
+        statisticRow(row) {
+            this.$router.push({
+                path: '/statistic',
+                query: {
+                    id: row.id
+                }
+            });
         }
     }
 };

+ 15 - 2
src/main/vue/src/widgets/UserWidget.vue

@@ -1,16 +1,24 @@
 <template>
     <widget-card :bodyStyle="bodyStyle">
-        <i class="fa-fw fas fa-user fa-3x" style="color: #40c9c6;"></i>
+        <i class="fa-fw fas fa-building fa-3x" style="color: #40c9c6;"></i>
         <div class="info">
             <div class="text">承办单位</div>
-            <div class="num">4,258</div>
+            <div class="num">{{ yearInfo.chenban }}</div>
         </div>
     </widget-card>
 </template>
 <script>
 import WidgetCard from './WidgetCard';
+import widget from '../mixins/widget';
 
 export default {
+    props: {
+        year: {
+            type: String,
+            default: '2021'
+        }
+    },
+    mixins: [widget],
     data() {
         return {
             bodyStyle: {
@@ -19,6 +27,11 @@ export default {
             }
         };
     },
+    computed: {
+        yearInfo() {
+            return this.allData[this.year];
+        }
+    },
     components: {
         WidgetCard
     }

+ 17 - 4
src/main/vue/src/widgets/UserWidget2.vue

@@ -1,16 +1,24 @@
 <template>
-    <widget-card :bodyStyle="bodyStyle">
-        <i class="fa-fw fas fa-calendar-check fa-3x" style="color: #40c9c6;"></i>
+    <widget-card :bodyStyle="bodyStyle" path="/gradingOrganizationList">
+        <i class="fa-fw fas fa-school fa-3x" style="color: #40c9c6;"></i>
         <div class="info">
-            <div class="text">备案数量</div>
-            <div class="num">500</div>
+            <div class="text">考级机构</div>
+            <div class="num">{{ yearInfo.jigou }}</div>
         </div>
     </widget-card>
 </template>
 <script>
 import WidgetCard from './WidgetCard';
+import widget from '../mixins/widget';
 
 export default {
+    props: {
+        year: {
+            type: String,
+            default: '2021'
+        }
+    },
+    mixins: [widget],
     data() {
         return {
             bodyStyle: {
@@ -19,6 +27,11 @@ export default {
             }
         };
     },
+    computed: {
+        yearInfo() {
+            return this.allData[this.year];
+        }
+    },
     components: {
         WidgetCard
     }

+ 54 - 0
src/main/vue/src/widgets/UserWidget3.vue

@@ -0,0 +1,54 @@
+<template>
+    <widget-card :bodyStyle="bodyStyle">
+        <i class="fa-fw fas fa-child fa-3x" style="color: #40c9c6;"></i>
+        <div class="info">
+            <div class="text">报考人数</div>
+            <div class="num">{{ yearInfo.baokao }}万</div>
+        </div>
+    </widget-card>
+</template>
+<script>
+import WidgetCard from './WidgetCard';
+import widget from '../mixins/widget';
+
+export default {
+    props: {
+        year: {
+            type: String,
+            default: '2021'
+        }
+    },
+    mixins: [widget],
+    data() {
+        return {
+            bodyStyle: {
+                display: 'flex',
+                alignItems: 'center'
+            }
+        };
+    },
+    computed: {
+        yearInfo() {
+            return this.allData[this.year];
+        }
+    },
+    components: {
+        WidgetCard
+    }
+};
+</script>
+<style lang="less" scoped>
+.info {
+    flex-grow: 1;
+    text-align: right;
+    .text {
+        color: #999;
+        font-size: 16px;
+        margin-bottom: 12px;
+    }
+    .num {
+        font-size: 20px;
+        color: #333;
+    }
+}
+</style>

+ 54 - 0
src/main/vue/src/widgets/UserWidget4.vue

@@ -0,0 +1,54 @@
+<template>
+    <widget-card :bodyStyle="bodyStyle">
+        <i class="fa-fw fas fa-database fa-3x" style="color: #40c9c6;"></i>
+        <div class="info">
+            <div class="text">等级评定</div>
+            <div class="num">{{ yearInfo.dengji }}</div>
+        </div>
+    </widget-card>
+</template>
+<script>
+import WidgetCard from './WidgetCard';
+import widget from '../mixins/widget';
+
+export default {
+    props: {
+        year: {
+            type: String,
+            default: '2021'
+        }
+    },
+    mixins: [widget],
+    data() {
+        return {
+            bodyStyle: {
+                display: 'flex',
+                alignItems: 'center'
+            }
+        };
+    },
+    computed: {
+        yearInfo() {
+            return this.allData[this.year];
+        }
+    },
+    components: {
+        WidgetCard
+    }
+};
+</script>
+<style lang="less" scoped>
+.info {
+    flex-grow: 1;
+    text-align: right;
+    .text {
+        color: #999;
+        font-size: 16px;
+        margin-bottom: 12px;
+    }
+    .num {
+        font-size: 20px;
+        color: #333;
+    }
+}
+</style>