licailing преди 4 години
родител
ревизия
a40e745b0d

+ 17 - 0
src/main/java/com/izouma/wenlvju/service/RecordService.java

@@ -1,5 +1,8 @@
 package com.izouma.wenlvju.service;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.izouma.wenlvju.domain.Record;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.dto.RecordExcelDTO;
@@ -12,6 +15,7 @@ import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
 import javax.persistence.criteria.Predicate;
+import java.time.LocalDate;
 import java.util.List;
 import java.util.Map;
 
@@ -41,8 +45,17 @@ public class RecordService {
             query.remove("organizer");
         }
 
+        Object examinationTime = query.get("examinationTime");
+        LocalDate date = null;
+        if (examinationTime != null) {
+            date = Convert.toLocalDateTime(examinationTime).toLocalDate();
+            query.remove("examinationTime");
+        }
+
+
         String finalAgency = examinationAgency;
         String finalOrganizer = organizer;
+        LocalDate finalDate = date;
         return recordRepo.findAll((root, criteriaQuery, criteriaBuilder) -> {
             List<Predicate> and = JpaUtils.toPredicates(pageQuery, Record.class, root, criteriaQuery, criteriaBuilder);
             if (StringUtil.isNotBlank(finalAgency)) {
@@ -51,6 +64,10 @@ public class RecordService {
             if (StringUtil.isNotBlank(finalOrganizer)) {
                 and.add(criteriaBuilder.like(root.get("organizer"), "%" + finalOrganizer + "%"));
             }
+            if (ObjectUtil.isNotEmpty(finalDate)) {
+                and.add(criteriaBuilder.lessThanOrEqualTo(root.get("examinationStartTime"), finalDate));
+                and.add(criteriaBuilder.greaterThanOrEqualTo(root.get("examinationEndTime"), finalDate));
+            }
             return criteriaBuilder.and(and.toArray(new Predicate[0]));
         }, JpaUtils.toPageRequest(pageQuery));
     }

+ 1 - 1
src/main/java/com/izouma/wenlvju/utils/JpaUtils.java

@@ -132,7 +132,7 @@ public class JpaUtils {
                     and.add(criteriaBuilder.lessThanOrEqualTo(root.get(property), end));
                 } else {
                     and.add(criteriaBuilder.and(criteriaBuilder.equal(root.get(property), DateTimeUtils
-                            .toLocalDateTime((String) value, "yyyy-MM-dd"))));
+                            .toLocalDate((String) value, "yyyy-MM-dd"))));
                 }
             } else {
                 and.add(criteriaBuilder.and(criteriaBuilder.equal(root.get(property), value)));

+ 1 - 1
src/main/vue/src/plugins/http.js

@@ -5,7 +5,7 @@ import qs from 'qs';
 let baseUrl = 'http://localhost:8080';
 switch (process.env.NODE_ENV) {
     case 'development':
-        baseUrl = 'http://192.168.50.190:8080';
+        baseUrl = 'http://localhost:8080';
         // baseUrl = 'http://wlj.izouma.com';
         break;
     case 'test':

+ 4 - 3
src/main/vue/src/router.js

@@ -187,9 +187,10 @@ const router = new Router({
                     }
                 },
                 {
-                    path: '/recordList2',
-                    name: 'RecordList2',
-                    component: () => import(/* webpackChunkName: "recordList" */ '@/views/record/RecordList2.vue'),
+                    path: '/recordRegulationList',
+                    name: 'RecordRegulationList',
+                    component: () =>
+                        import(/* webpackChunkName: "recordList" */ '@/views/record/RecordRegulationList.vue'),
                     meta: {
                         title: '监管管理'
                     }

+ 294 - 0
src/main/vue/src/views/record/RecordRegulationList.vue

@@ -0,0 +1,294 @@
+<template>
+    <div class="list-view">
+        <div class="filters-container">
+            <div>
+                <span class="span-width">
+                    <span class="span-size">考级活动名称</span>
+                    <el-input placeholder="输入考级活动名称" v-model="search" clearable class="filter-item"></el-input>
+                </span>
+                <span class="span-width">
+                    <span class="span-size">考级机构名称</span>
+                    <el-input placeholder="输入考级机构名称" v-model="agency" clearable class="filter-item"></el-input>
+                </span>
+                <span class="span-width">
+                    <span class="span-size">承办单位名称</span>
+                    <el-input
+                        placeholder="输入承办单位名称"
+                        v-model="organizer"
+                        clearable
+                        class="filter-item"
+                    ></el-input>
+                </span>
+            </div>
+            <!-- <el-input placeholder="输入关键字" v-model="search" clearable class="filter-item"></el-input> -->
+            <div style="padding-left: 20px">
+                <el-button @click="getData" type="primary" icon="el-icon-search" class="filter-item">查询 </el-button>
+                <el-button @click="getData" type="primary" icon="el-icon-video-camera" class="filter-item"
+                    >监控平台
+                </el-button>
+            </div>
+        </div>
+        <el-table
+            :data="tableData"
+            row-key="id"
+            ref="table"
+            header-row-class-name="table-header-row"
+            header-cell-class-name="table-header-cell"
+            row-class-name="table-row"
+            cell-class-name="table-cell"
+            :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="examinationName" label="考级活动名称"> </el-table-column>
+            <el-table-column prop="examinationStartTime" label="考级活动时间" show-overflow-tooltip>
+                <template slot-scope="{ row }">
+                    <span>{{ row.examinationStartTime }} 至 {{ row.examinationEndTime }}</span>
+                </template>
+            </el-table-column>
+            <el-table-column prop="examinationAgency" label="考级机构名称"> </el-table-column>
+            <el-table-column prop="organizer" label="承办单位名称"> </el-table-column>
+            <el-table-column prop="district" label="考级地点"> </el-table-column>
+            <el-table-column prop="recordTime" label="备案时间"> </el-table-column>
+            <el-table-column prop="status" label="状态" :formatter="statusFormatter" width="50"> </el-table-column>
+            <el-table-column label="操作" align="center" fixed="right" min-width="80">
+                <template slot-scope="{ row }">
+                    <el-button @click="editRow(row)" type="primary" size="mini" plain>查看</el-button>
+                    <el-button @click="openRoom(row)" type="warning" size="mini" plain>考场</el-button>
+                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
+                </template>
+            </el-table-column>
+        </el-table>
+        <div class="pagination-wrapper">
+            <!-- <div class="multiple-mode-wrapper">
+                <el-button v-if="!multipleMode" @click="toggleMultipleMode(true)">批量编辑</el-button>
+                <el-button-group v-else>
+                    <el-button @click="operation1">批量操作1</el-button>
+                    <el-button @click="operation2">批量操作2</el-button>
+                    <el-button @click="toggleMultipleMode(false)">取消</el-button>
+                </el-button-group>
+            </div> -->
+            <el-pagination
+                background
+                @size-change="onSizeChange"
+                @current-change="onCurrentChange"
+                :current-page="page"
+                :page-sizes="[10, 20, 30, 40, 50]"
+                :page-size="pageSize"
+                layout="total, sizes, prev, pager, next, jumper"
+                :total="totalElements"
+            >
+            </el-pagination>
+        </div>
+    </div>
+</template>
+<script>
+import pageableTable from '@/mixins/pageableTable';
+import format from 'date-fns/format';
+import startOfDay from 'date-fns/startOfDay';
+import endOfDay from 'date-fns/endOfDay';
+
+export default {
+    name: 'RecordRegulationList',
+    mixins: [pageableTable],
+    created() {
+        this.$http
+            .get('/district/NJ')
+            .then(res => {
+                this.district = res;
+            })
+            .catch(e => {
+                console.log(e);
+                this.$message.error(e.error);
+            });
+    },
+    data() {
+        return {
+            multipleMode: false,
+            search: '',
+            url: '/record/all',
+            downloading: false,
+            categoryOptions: [{ label: '承办单位', value: 'ORGANIZER' }],
+            statusOptions: [{ label: '正常', value: 'NORMAL' }],
+            district: [],
+            districtId: '',
+            province: '江苏省',
+            city: '南京市',
+            status: '',
+            recordDateRange: '',
+            agency: '',
+            organizer: '',
+            dateRange: ''
+        };
+    },
+    computed: {
+        selection() {
+            return this.$refs.table.selection.map(i => i.id);
+        }
+    },
+    methods: {
+        categoryFormatter(row, column, cellValue, index) {
+            let selectedOption = this.categoryOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        },
+        statusFormatter(row, column, cellValue, index) {
+            let selectedOption = this.statusOptions.find(i => i.value === cellValue);
+            if (selectedOption) {
+                return selectedOption.label;
+            }
+            return '';
+        },
+        beforeGetData() {
+            // return {
+            //     search: this.search,
+            //     sort: 'recordTime,desc',
+            //     query: {
+            //         district: this.districtId,
+            //         del: false
+            //     }
+            // };
+            let data = {
+                sort: 'recordTime,desc',
+                query: {
+                    del: false,
+                    examinationTime: format(new Date(), 'yyyy-MM-dd')
+                }
+            };
+            if (this.search) {
+                data.search = this.search;
+            }
+            if (this.districtId) {
+                data.query.district = this.districtId;
+            }
+            if (this.agency) {
+                data.query.examinationAgency = this.agency;
+            }
+            if (this.organizer) {
+                data.query.organizer = this.organizer;
+            }
+            return data;
+        },
+        toggleMultipleMode(multipleMode) {
+            this.multipleMode = multipleMode;
+            if (!multipleMode) {
+                this.$refs.table.clearSelection();
+            }
+        },
+        addRow() {
+            this.$router.push({
+                path: '/recordEdit',
+                query: {
+                    ...this.$route.query
+                }
+            });
+        },
+        editRow(row) {
+            this.$router.push({
+                path: '/recordEdit',
+                query: {
+                    id: row.id
+                }
+            });
+        },
+        download() {
+            this.downloading = true;
+            this.$axios
+                .get('/record/excel', {
+                    responseType: 'blob',
+                    params: {
+                        size: 10000,
+                        query: {
+                            del: false
+                        }
+                    }
+                })
+                .then(res => {
+                    console.log(res);
+                    this.downloading = false;
+                    const downloadUrl = window.URL.createObjectURL(new Blob([res.data]));
+                    const link = document.createElement('a');
+                    link.href = downloadUrl;
+                    link.setAttribute('download', res.headers['content-disposition'].split('filename=')[1]);
+                    document.body.appendChild(link);
+                    link.click();
+                    link.remove();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.downloading = false;
+                    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(`/record/del/${row.id}`);
+                })
+                .then(() => {
+                    this.$message.success('删除成功');
+                    this.getData();
+                })
+                .catch(e => {
+                    if (e !== 'cancel') {
+                        this.$message.error(e.error);
+                    }
+                });
+        },
+        distribute() {
+            this.$alert('已分发到各区县!', '分发', {
+                confirmButtonText: '确定'
+            });
+        },
+        update() {
+            this.$http
+                .get('/record/update')
+                .then(res => {
+                    this.getData();
+                })
+                .catch(e => {
+                    console.log(e);
+                    this.$message.error(e.error);
+                });
+        },
+        openRoom(row) {
+            this.$router.push({
+                path: '/recordRoomList',
+                query: {
+                    id: row.id
+                }
+            });
+        }
+    }
+};
+</script>
+<style lang="less" scoped>
+.span-size {
+    font-size: 14px;
+    color: #565b66;
+    line-height: 15px;
+    padding: 0 10px 0 10px;
+}
+.span-width {
+    width: 330px;
+    display: inline-block;
+    text-align: right;
+}
+.span-width2 {
+    width: 500px;
+    // float: left;
+    text-align: right;
+    display: inline-block;
+}
+</style>

+ 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(3L)
+        System.out.println(jwtTokenUtil.generateToken(JwtUserFactory.create(userRepo.findById(469L)
                 .orElseThrow(new BusinessException("用户不存在")))));
     }