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

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

@@ -36,5 +36,6 @@ public class ExamRoom extends BaseEntity {
     private Long recordId;
 
     @Transient
-    private String status;
+    private Integer status;
+
 }

+ 0 - 68
src/main/java/com/izouma/wenlvju/domain/Regulatory.java

@@ -1,68 +0,0 @@
-package com.izouma.wenlvju.domain;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import org.hibernate.annotations.NotFound;
-import org.hibernate.annotations.NotFoundAction;
-import org.hibernate.annotations.Where;
-
-import javax.persistence.*;
-import java.time.LocalDate;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Builder
-@Entity
-@Where(clause = "del = 0")
-@ApiModel(value = "监管管理")
-public class Regulatory extends BaseEntity {
-    private Long recordId;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "recordId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
-    @NotFound(action = NotFoundAction.IGNORE)
-    private Record record;
-
-
-    @ApiModelProperty(value = "监管人员")
-    private Long supervisorUserId;
-
-    @ManyToOne(fetch = FetchType.LAZY)
-    @JoinColumn(name = "supervisorUserId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
-    @NotFound(action = NotFoundAction.IGNORE)
-    private User supervisorUser;
-
-
-    private LocalDate time;
-
-    @ApiModelProperty(value = "是否考前备案")
-    private Boolean isRecord;
-    @ApiModelProperty(value = "是否明显位置张贴《考试简章》")
-    private Boolean isPostExamGuide;
-    @ApiModelProperty(value = "考场服务设备是否完善")
-    private Boolean isPerfectDeviceServices;
-    @ApiModelProperty(value = "考试时间与备案考试时间是否一致")
-    private Boolean isHaveTheSameTime;
-    @ApiModelProperty(value = "考试地点与备案考试地点是否一致")
-    private Boolean isSameAddress;
-    @ApiModelProperty(value = "是否有无相关专业考官且佩戴考官证")
-    private Boolean isExaminer;
-    @ApiModelProperty(value = "是否现场对艺术水平做出评定")
-    private Boolean isRate;
-    @ApiModelProperty(value = "是否是所属考级机构教材确定的考级内容")
-    private Boolean isSureContent;
-    @ApiModelProperty(value = "是否在明显位置张贴《疫情防控指南》海报")
-    private Boolean isPostPoster;
-    @ApiModelProperty(value = "考点是否配备测量体温设备,且专人值守")
-    private Boolean isHaveThermometer;
-    @ApiModelProperty(value = "考场是否实施预约限流措施")
-    private Boolean isSchedule;
-
-    @ApiModelProperty(value = "其他")
-    private String other;
-}

+ 43 - 0
src/main/java/com/izouma/wenlvju/dto/ExamRoomDTO.java

@@ -0,0 +1,43 @@
+package com.izouma.wenlvju.dto;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.izouma.wenlvju.domain.ExamRoom;
+import com.izouma.wenlvju.domain.Record;
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "考场")
+public class ExamRoomDTO {
+
+    private String name;
+
+    private String deviceSerial;
+
+    private String validateCode;
+
+    private String address;
+
+    private Long recordId;
+
+    private Integer status;
+
+    private String organizer;
+
+    private String examinationAddress;
+
+    private String examOwner;
+
+    private String examOwnerPhone;
+
+    public ExamRoomDTO(ExamRoom examRoom, Record record) {
+        BeanUtil.copyProperties(examRoom, this);
+        BeanUtil.copyProperties(record, this);
+    }
+}

+ 2 - 0
src/main/java/com/izouma/wenlvju/repo/ExamRoomRepo.java

@@ -16,4 +16,6 @@ public interface ExamRoomRepo extends JpaRepository<ExamRoom, Long>, JpaSpecific
     void softDelete(Long id);
 
     List<ExamRoom> findAllByRecordId(Long recordId);
+
+    List<ExamRoom> findAllByRecordIdIn(Iterable<Long> recordId);
 }

+ 0 - 19
src/main/java/com/izouma/wenlvju/repo/RegulatoryRepo.java

@@ -1,19 +0,0 @@
-package com.izouma.wenlvju.repo;
-
-import com.izouma.wenlvju.domain.Regulatory;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-public interface RegulatoryRepo extends JpaRepository<Regulatory, Long>, JpaSpecificationExecutor<Regulatory> {
-    @Query("update Regulatory t set t.del = true where t.id = ?1")
-    @Modifying
-    @Transactional
-    void softDelete(Long id);
-
-    List<Regulatory> findAllByRecordIdOrderByCreatedAtDesc(Long recordId);
-}

+ 16 - 23
src/main/java/com/izouma/wenlvju/service/ExamRoomService.java

@@ -7,18 +7,16 @@ import com.alibaba.fastjson.JSONObject;
 import com.github.kevinsawicki.http.HttpRequest;
 import com.izouma.wenlvju.domain.ExamRoom;
 import com.izouma.wenlvju.domain.Record;
+import com.izouma.wenlvju.dto.ExamRoomDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ExamRoomRepo;
-import com.izouma.wenlvju.repo.OrganizationRepo;
 import com.izouma.wenlvju.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.domain.Page;
-import org.springframework.data.domain.PageImpl;
 import org.springframework.stereotype.Service;
 
-import javax.persistence.criteria.Predicate;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -27,10 +25,9 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class ExamRoomService {
 
-    private final ExamRoomRepo       examRoomRepo;
-    private final EzvizTokenService  ezvizTokenService;
-    private final RecordService      recordService;
-    private final OrganizationRepo   organizationRepo;
+    private final ExamRoomRepo      examRoomRepo;
+    private final EzvizTokenService ezvizTokenService;
+    private final RecordService     recordService;
 
     public Page<ExamRoom> all(PageQuery pageQuery) {
         return examRoomRepo.findAll(JpaUtils.toSpecification(pageQuery, ExamRoom.class), JpaUtils.toPageRequest(pageQuery));
@@ -150,30 +147,26 @@ public class ExamRoomService {
     /*
     展示今天备案中的所有考场信息
      */
-    public List<ExamRoom> byToday(PageQuery pageQuery, boolean status) {
-        List<Long> ids = new ArrayList<>();
+    public List<ExamRoomDTO> byToday(PageQuery pageQuery, Integer status) {
 
         List<Record> all = recordService.all2(pageQuery).getContent();
+        Map<Long, Record> recordMap = all.stream().collect(Collectors.toMap(Record::getId, record -> record));
 
         List<Long> rids = all.stream().map(Record::getId).collect(Collectors.toList());
         if (CollUtil.isEmpty(rids)) {
             return null;
         }
 
-//        ids.addAll(recordExamRoomRepo.findExamRoomIdByRecordIdIn(rids));
-
-
-        if (CollUtil.isEmpty(ids)) {
-            return null;
+        List<ExamRoom> examRooms = examRoomRepo.findAllByRecordIdIn(rids);
+        if (ObjectUtil.isNotEmpty(status)) {
+            Map<String, Integer> device = this.showDevice();
+            return examRooms.stream()
+                    .filter(examRoom -> status.equals(device.get(examRoom.getDeviceSerial())))
+                    .map(examRoom -> new ExamRoomDTO(examRoom, recordMap.get(examRoom.getRecordId())))
+                    .collect(Collectors.toList());
         }
-        List<ExamRoom> rooms = examRoomRepo.findAllById(ids);
-//        Set<Long> organizationIds = rooms.stream().map(ExamRoom::getOrganizationId).collect(Collectors.toSet());
-//        Map<Long, String> organizationMap = organizationRepo.findAllById(organizationIds)
-//                .stream()
-//                .collect(Collectors.toMap(Organization::getId, Organization::getName));
-
-
-//        rooms.forEach(room -> room.setRecord(null));
-        return rooms;
+        return examRooms.stream()
+                .map(examRoom -> new ExamRoomDTO(examRoom, recordMap.get(examRoom.getRecordId())))
+                .collect(Collectors.toList());
     }
 }

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

@@ -67,7 +67,7 @@ public class RecordService {
                 and.add(criteriaBuilder.greaterThanOrEqualTo(root.get("examinationEndTime"), finalDate));
             }
             if (ObjectUtil.isNotEmpty(finalTodayDate)) {
-                and.add(criteriaBuilder.lessThanOrEqualTo(root.get("examinationStartTime"), finalTodayDate));
+                and.add(criteriaBuilder.lessThan(root.get("examinationEndTime"), finalTodayDate));
             }
             return criteriaBuilder.and(and.toArray(new Predicate[0]));
         }, JpaUtils.toPageRequest(pageQuery));

+ 0 - 20
src/main/java/com/izouma/wenlvju/service/RegulatoryService.java

@@ -1,20 +0,0 @@
-package com.izouma.wenlvju.service;
-
-import com.izouma.wenlvju.domain.Regulatory;
-import com.izouma.wenlvju.dto.PageQuery;
-import com.izouma.wenlvju.repo.RegulatoryRepo;
-import com.izouma.wenlvju.utils.JpaUtils;
-import lombok.AllArgsConstructor;
-import org.springframework.data.domain.Page;
-import org.springframework.stereotype.Service;
-
-@Service
-@AllArgsConstructor
-public class RegulatoryService {
-
-    private RegulatoryRepo regulatoryRepo;
-
-    public Page<Regulatory> all(PageQuery pageQuery) {
-        return regulatoryRepo.findAll(JpaUtils.toSpecification(pageQuery, Regulatory.class), JpaUtils.toPageRequest(pageQuery));
-    }
-}

+ 12 - 3
src/main/java/com/izouma/wenlvju/web/ExamRoomController.java

@@ -1,8 +1,9 @@
 package com.izouma.wenlvju.web;
 
-import cn.hutool.core.convert.Convert;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.izouma.wenlvju.domain.ExamRoom;
+import com.izouma.wenlvju.dto.ExamRoomDTO;
 import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.exception.BusinessException;
 import com.izouma.wenlvju.repo.ExamRoomRepo;
@@ -52,7 +53,15 @@ public class ExamRoomController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/all")
     public Page<ExamRoom> all(@RequestBody PageQuery pageQuery) {
-        return examRoomService.all(pageQuery);
+        Page<ExamRoom> all = examRoomService.all(pageQuery);
+        if (CollUtil.isEmpty(all)) {
+            return all;
+        }
+        Map<String, Integer> device = examRoomService.showDevice();
+        return all.map(examRoom -> {
+            examRoom.setStatus(device.get(examRoom.getDeviceSerial()));
+            return examRoom;
+        });
     }
 
     @GetMapping("/get/{id}")
@@ -77,7 +86,7 @@ public class ExamRoomController extends BaseController {
 
     @PostMapping("/byToday")
     @ApiOperation("今日所有备案的考场信息")
-    public List<ExamRoom> byToday(PageQuery pageQuery, boolean status) {
+    public List<ExamRoomDTO> byToday(@RequestBody PageQuery pageQuery, Integer status) {
         return examRoomService.byToday(pageQuery, status);
     }
 }

+ 0 - 78
src/main/java/com/izouma/wenlvju/web/RegulatoryController.java

@@ -1,78 +0,0 @@
-package com.izouma.wenlvju.web;
-
-import com.izouma.wenlvju.domain.Record;
-import com.izouma.wenlvju.domain.Regulatory;
-import com.izouma.wenlvju.dto.PageQuery;
-import com.izouma.wenlvju.enums.RegulatoryStatus;
-import com.izouma.wenlvju.exception.BusinessException;
-import com.izouma.wenlvju.repo.RecordRepo;
-import com.izouma.wenlvju.repo.RegulatoryRepo;
-import com.izouma.wenlvju.service.RegulatoryService;
-import com.izouma.wenlvju.utils.ObjUtils;
-import com.izouma.wenlvju.utils.excel.ExcelUtils;
-import io.swagger.annotations.ApiOperation;
-import lombok.AllArgsConstructor;
-import org.springframework.data.domain.Page;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.time.LocalDate;
-import java.util.List;
-
-@RestController
-@RequestMapping("/regulatory")
-@AllArgsConstructor
-public class RegulatoryController extends BaseController {
-    private RegulatoryService regulatoryService;
-    private RegulatoryRepo    regulatoryRepo;
-    private RecordRepo        recordRepo;
-
-    //@PreAuthorize("hasRole('ADMIN')")
-    @PostMapping("/save")
-    public Regulatory save(@RequestBody Regulatory record) {
-        if (record.getId() != null) {
-            Regulatory orig = regulatoryRepo.findById(record.getId()).orElseThrow(new BusinessException("无记录"));
-            ObjUtils.merge(orig, record);
-            return regulatoryRepo.save(orig);
-        }
-        if (record.getRecordId() != null) {
-            Record record1 = recordRepo.findById(record.getRecordId()).orElseThrow(new BusinessException("无记录"));
-//            record1.setRegulatoryStatus(RegulatoryStatus.SUBMITTED);
-            recordRepo.save(record1);
-        }
-        record.setTime(LocalDate.now());
-        return regulatoryRepo.save(record);
-    }
-
-    //@PreAuthorize("hasRole('ADMIN')")
-    @PostMapping("/all")
-    public Page<Regulatory> all(@RequestBody PageQuery pageQuery) {
-        pageQuery.setSort("createdAt,desc");
-        return regulatoryService.all(pageQuery);
-    }
-
-    @GetMapping("/get/{id}")
-    public Regulatory get(@PathVariable Long id) {
-        return regulatoryRepo.findById(id).orElseThrow(new BusinessException("无记录"));
-    }
-
-    @PostMapping("/del/{id}")
-    public void del(@PathVariable Long id) {
-        regulatoryRepo.softDelete(id);
-    }
-
-    @GetMapping("/excel")
-    @ResponseBody
-    public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException {
-        List<Regulatory> data = all(pageQuery).getContent();
-        ExcelUtils.export(response, data);
-    }
-
-    @GetMapping("/byRecord")
-    @ApiOperation("按检查记录查询")
-    public List<Regulatory> byRecord(@RequestParam Long recordId) {
-        return regulatoryRepo.findAllByRecordIdOrderByCreatedAtDesc(recordId);
-    }
-}
-

+ 4 - 4
src/main/vue/src/components/VideoGrid.vue

@@ -3,9 +3,9 @@
         <div slot="header">
             <span class="span-size">承办单位:{{ organizer }}<br /></span>
             <span class="span-size">考级详细地址:{{ examinationAddress }}<br /></span>
-            <span class="span-size">联系人:<br /></span>
-            <span class="span-size">联系电话:<br /></span>
-            <span class="span-size">检查记录:<br /></span>
+            <span class="span-size">联系人:{{ owner }}<br /></span>
+            <span class="span-size">联系电话:{{ phone }}<br /></span>
+            <span class="span-size">检查记录:<br /></span>
         </div>
         <div class="video" :id="name" style="width:100%;height:320px">
             <!-- <div class="bottom"></div> -->
@@ -33,7 +33,7 @@ import EZUIKit from 'ezuikit-js';
 
 export default {
     name: 'VideoGrid',
-    props: ['token', 'device', 'name', 'organizer', 'orgname'],
+    props: ['token', 'device', 'name', 'organizer', 'address', 'owner', 'phone'],
     data() {
         return {
             player: null,

+ 5 - 1
src/main/vue/src/views/ExamRoomList.vue

@@ -29,7 +29,11 @@
             <el-table-column prop="address" label="考场地址"> </el-table-column>
             <el-table-column prop="deviceSerial" label="设备序列号"> </el-table-column>
             <el-table-column prop="validateCode" label="设备验证码"> </el-table-column>
-            <el-table-column prop="status" label="状态"> </el-table-column>
+            <el-table-column prop="status" label="状态"
+                ><template slot-scope="{ row }"
+                    ><span v-if="row.status == 1">在线</span><span v-else>不在线</span></template
+                ></el-table-column
+            >
             <el-table-column label="操作" align="center" fixed="right" min-width="150">
                 <template slot-scope="{ row }">
                     <el-button @click="monitor(row)" type="success" size="mini" plain>监控</el-button>

+ 1 - 13
src/main/vue/src/views/record/RecordRegulationHistory.vue

@@ -43,9 +43,6 @@
                     <el-button @click="getData" type="primary" icon="el-icon-search" class="filter-item"
                         >查询
                     </el-button>
-                    <el-button @click="showVideo" type="primary" icon="el-icon-video-camera" class="filter-item"
-                        >监控平台
-                    </el-button>
                 </div>
             </el-col>
         </div>
@@ -71,19 +68,10 @@
             <el-table-column prop="organizer" label="承办单位名称" min-width="150" sortable> </el-table-column>
             <el-table-column prop="district" label="考级地点" min-width="70"> </el-table-column>
             <el-table-column prop="recordTime" label="备案时间" min-width="90"> </el-table-column>
-            <el-table-column label="操作" align="right" fixed="right" min-width="240">
+            <el-table-column label="操作" align="right" fixed="right" min-width="140">
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>查看</el-button>
                     <el-button @click="checkRow(row)" type="warning" size="mini" plain>检查记录</el-button>
-                    <el-button
-                        @click="openRoom(row)"
-                        type="primary"
-                        size="mini"
-                        plain
-                        v-if="currentTime <= row.examinationEndTime"
-                        >考场监控</el-button
-                    >
-                    <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
             </el-table-column>
         </el-table>

+ 1 - 8
src/main/vue/src/views/record/RecordRegulationList.vue

@@ -75,14 +75,7 @@
                 <template slot-scope="{ row }">
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>查看</el-button>
                     <el-button @click="checkRow(row)" type="warning" size="mini" plain>检查记录</el-button>
-                    <el-button
-                        @click="openRoom(row)"
-                        type="primary"
-                        size="mini"
-                        plain
-                        v-if="currentTime <= row.examinationEndTime"
-                        >考场监控</el-button
-                    >
+                    <el-button @click="openRoom(row)" type="primary" size="mini" plain>考场监控</el-button>
                     <!-- <el-button @click="deleteRow(row)" type="danger" size="mini" plain>删除</el-button> -->
                 </template>
             </el-table-column>

+ 14 - 7
src/main/vue/src/views/record/VideoList.vue

@@ -13,7 +13,7 @@
             </el-col>
             <el-col :span="8">
                 <el-form-item label="考级地址">
-                    <el-select v-model="district" clearable placeholder="请选择区县" @change="getRecord">
+                    <el-select v-model="district" clearable placeholder="请选择区县">
                         <el-option
                             v-for="item in districts"
                             :key="item.id"
@@ -36,8 +36,8 @@
             <el-col :span="8">
                 <el-form-item label="监控视频状态">
                     <el-select v-model="status" clearable placeholder="请选择监控视频状态">
-                        <el-option label="在线"></el-option>
-                        <el-option label="离线"></el-option>
+                        <el-option label="在线" value="1"></el-option>
+                        <el-option label="离线" value="0"></el-option>
                     </el-select>
                 </el-form-item>
             </el-col>
@@ -66,7 +66,9 @@
                     :device="item.deviceSerial"
                     :key="item.id"
                     :organizer="item.organizer"
-                    :orgname="item.name"
+                    :address="item.examinationAddress"
+                    :owner="item.examOwner"
+                    :phone="item.examOwnerPhone"
                     :name="`video_${item.id}`"
                 ></video-grid>
             </div>
@@ -107,9 +109,9 @@ export default {
             });
     },
     mounted() {
-        this.getTime();
+        // this.getTime();
         this.getVideo();
-        this.getRecord();
+        // this.getRecord();
     },
     methods: {
         getTime() {
@@ -155,10 +157,15 @@ export default {
                 .get('ezvizToken/getToken')
                 .then(res => {
                     this.token = res;
-                    return this.$http.post('/examRoom/byToday', { district: this.district });
+                    return this.$http.post(
+                        '/examRoom/byToday',
+                        { size: 100, query: { examinationTime: format(new Date(), 'yyyy-MM-dd') } },
+                        { body: 'json' }
+                    );
                 })
                 .then(res => {
                     this.list = res;
+                    console.log(res);
                     this.$nextTick(() => {
                         if (res.length > 0) {
                             res.forEach((item, index) => {

+ 2 - 0
src/test/java/com/izouma/wenlvju/service/ExamRoomServiceTest.java

@@ -2,6 +2,7 @@ package com.izouma.wenlvju.service;
 
 import com.izouma.wenlvju.ApplicationTests;
 import com.izouma.wenlvju.domain.ExamRoom;
+import com.izouma.wenlvju.dto.PageQuery;
 import com.izouma.wenlvju.repo.ExamRoomRepo;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +45,7 @@ public class ExamRoomServiceTest extends ApplicationTests {
     public void showVideo() {
 //        List<ExamRoom> show = examRoomService.byToday(8L, null);
 //        show.forEach(System.out::println);
+        System.out.println(examRoomService.byToday(new PageQuery(), null));
     }
 
 }