Bläddra i källkod

完善流程,执法设备开关机信号。

Memory_LG 8 månader sedan
förälder
incheckning
10bbc1f247

+ 51 - 0
src/main/java/com/sooka/sponest/lawenforcement/device/controller/DeviceController.java

@@ -0,0 +1,51 @@
+package com.sooka.sponest.lawenforcement.device.controller;
+
+import com.ruoyi.common.core.web.controller.BaseController;
+import com.ruoyi.common.core.web.domain.AjaxResult;
+import com.sooka.sponest.lawenforcement.device.domain.DeviceBO;
+import com.sooka.sponest.lawenforcement.device.service.IDeviceService;
+import com.sooka.sponest.lawenforcement.record.service.ILawenforcementRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author LG
+ */
+@RestController
+@RequestMapping("/device")
+public class DeviceController extends BaseController {
+
+    @Autowired
+    private ILawenforcementRecordService recordService;
+
+    @Autowired
+    private IDeviceService deviceService;
+
+    @PostMapping("/open")
+    public AjaxResult open(@RequestBody DeviceBO bo) {
+        deviceService.open(bo);
+        return AjaxResult.success();
+    }
+
+    // 可以添加其他方法来停止定时任务,例如:
+    @PostMapping("/stop/{deviceCode}")
+    public AjaxResult stopDevice(@PathVariable String deviceCode) {
+        deviceService.cancelTask(deviceCode);
+        return AjaxResult.success();
+    }
+
+    @GetMapping("/getTaskList")
+    public AjaxResult getTaskList(){
+        return AjaxResult.success(deviceService.getTaskList());
+    }
+
+    @PostMapping("/close")
+    public AjaxResult close(@RequestBody DeviceBO bo){
+        System.out.println(" 设备关闭 ");
+        //设备关机先尝试删除定时任务
+        deviceService.cancelTask(bo.getDeviceCode());
+        //设置任务结束时间和任务状态为完成
+        recordService.updateRecordLogEndTime(bo);
+        return AjaxResult.success();
+    }
+}

+ 10 - 0
src/main/java/com/sooka/sponest/lawenforcement/device/domain/DeviceBO.java

@@ -0,0 +1,10 @@
+package com.sooka.sponest.lawenforcement.device.domain;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Setter
+@Getter
+public class DeviceBO {
+    private String deviceCode;
+}

+ 14 - 0
src/main/java/com/sooka/sponest/lawenforcement/device/service/IDeviceService.java

@@ -0,0 +1,14 @@
+package com.sooka.sponest.lawenforcement.device.service;
+
+import com.sooka.sponest.lawenforcement.device.domain.DeviceBO;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ScheduledFuture;
+
+public interface IDeviceService {
+    void open(DeviceBO bo);
+
+    void cancelTask(String deviceCode);
+
+    ConcurrentHashMap<String, ScheduledFuture<?>> getTaskList();
+}

+ 51 - 0
src/main/java/com/sooka/sponest/lawenforcement/device/service/impl/DeviceServiceImpl.java

@@ -0,0 +1,51 @@
+package com.sooka.sponest.lawenforcement.device.service.impl;
+
+import com.sooka.sponest.lawenforcement.device.domain.DeviceBO;
+import com.sooka.sponest.lawenforcement.device.service.IDeviceService;
+import org.springframework.stereotype.Service;
+
+import java.util.concurrent.*;
+
+@Service
+public class DeviceServiceImpl implements IDeviceService {
+
+    // 用于存储定时任务的Map,key为deviceCode
+    private final ConcurrentHashMap<String, ScheduledFuture<?>> scheduledTasks = new ConcurrentHashMap<>();
+    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);
+
+    @Override
+    public void open(DeviceBO bo) {
+        System.out.println("设备开启");
+        String deviceCode = bo.getDeviceCode();
+
+        // 先取消之前的任务(如果存在)
+        cancelTask(deviceCode);
+
+        // 创建一个新的定时任务
+        Runnable task = () -> {
+            System.out.println("设备开启超过六十分钟: " + deviceCode);
+            /*
+             *  此处发送开机未执法告警
+             */
+            cancelTask(deviceCode); // 确保任务只执行一次
+        };
+        // 延迟60分钟执行
+        ScheduledFuture<?> future = scheduler.schedule(task, 2, TimeUnit.MINUTES);
+        scheduledTasks.put(deviceCode, future);
+    }
+
+    @Override
+    // 取消定时任务的方法
+    public void cancelTask(String deviceCode) {
+        ScheduledFuture<?> future = scheduledTasks.get(deviceCode);
+        if (future != null && !future.isCancelled()) {
+            future.cancel(true); // 尝试取消任务
+            scheduledTasks.remove(deviceCode); // 从Map中移除
+        }
+    }
+
+    @Override
+    public ConcurrentHashMap<String, ScheduledFuture<?>> getTaskList() {
+        return scheduledTasks;
+    }
+}

+ 5 - 0
src/main/java/com/sooka/sponest/lawenforcement/record/mapper/LawenforcementRecordMapper.java

@@ -1,5 +1,6 @@
 package com.sooka.sponest.lawenforcement.record.mapper;
 
+import com.sooka.sponest.lawenforcement.device.domain.DeviceBO;
 import com.sooka.sponest.lawenforcement.record.domain.LawenforcementRecord;
 import com.sooka.sponest.lawenforcement.record.domain.LawenforcementRecordLog;
 
@@ -63,5 +64,9 @@ public interface LawenforcementRecordMapper {
 
     void addRecordLog(LawenforcementRecordLog recordLog);
 
+    void updateRecordLogEndTime(DeviceBO bo);
+
+    void updateRecordStatus(DeviceBO bo);
+
     Map<String, String> getPersonCode(String id);
 }

+ 3 - 0
src/main/java/com/sooka/sponest/lawenforcement/record/service/ILawenforcementRecordService.java

@@ -1,5 +1,6 @@
 package com.sooka.sponest.lawenforcement.record.service;
 
+import com.sooka.sponest.lawenforcement.device.domain.DeviceBO;
 import com.sooka.sponest.lawenforcement.record.domain.LawenforcementRecord;
 
 import java.util.List;
@@ -63,4 +64,6 @@ public interface ILawenforcementRecordService {
     List<Map<String, Object>> getDeviceList();
 
     int addRecordLog(LawenforcementRecord record);
+
+    void updateRecordLogEndTime(DeviceBO bo);
 }

+ 16 - 1
src/main/java/com/sooka/sponest/lawenforcement/record/service/impl/LawenforcementRecordServiceImpl.java

@@ -2,7 +2,8 @@ package com.sooka.sponest.lawenforcement.record.service.impl;
 
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.core.utils.uuid.IdUtils;
-import com.ruoyi.common.security.utils.SecurityUtils;
+import com.sooka.sponest.lawenforcement.device.domain.DeviceBO;
+import com.sooka.sponest.lawenforcement.device.service.IDeviceService;
 import com.sooka.sponest.lawenforcement.record.domain.LawenforcementRecord;
 import com.sooka.sponest.lawenforcement.record.domain.LawenforcementRecordLog;
 import com.sooka.sponest.lawenforcement.record.mapper.LawenforcementRecordMapper;
@@ -27,6 +28,9 @@ public class LawenforcementRecordServiceImpl implements ILawenforcementRecordSer
     @Autowired
     private LawenforcementRecordMapper lawenforcementRecordMapper;
 
+    @Autowired
+    private IDeviceService deviceService;
+
     /**
      * 查询任务数据
      *
@@ -108,6 +112,17 @@ public class LawenforcementRecordServiceImpl implements ILawenforcementRecordSer
         LawenforcementRecordLog lawenforcementRecordLog = new LawenforcementRecordLog(IdUtils.fastSimpleUUID(), MapUtils.getString(personCode, "personCode"),record.getId(),record.getDeviceId(),new Date(),null);
         //将工单执行记录,写入到日志表中:数据id、任务id、执法人编号、设备编号、开始时间
         lawenforcementRecordMapper.addRecordLog(lawenforcementRecordLog);
+        //绑定设备后关闭定时任务
+        deviceService.cancelTask(lawenforcementRecordLog.getDeviceId());
         return i;
     }
+
+    @Override
+    public void updateRecordLogEndTime(DeviceBO bo) {
+        //设置任务完成状态
+        lawenforcementRecordMapper.updateRecordStatus(bo);
+        //设置任务结束时间
+        lawenforcementRecordMapper.updateRecordLogEndTime(bo);
+    }
+
 }

+ 15 - 1
src/main/resources/mapper/lawenforcement/LawenforcementRecordMapper.xml

@@ -95,7 +95,7 @@
                is_cross_dept,
                device_id,
                device_name,
-               recordStatus
+               record_status
         from lawenforcement_record
     </sql>
 
@@ -294,4 +294,18 @@
     <select id="getPersonCode" parameterType="string" resultType="map">
         select person_code as personCode from lawenforcement_person where record_id = #{id} and main_person = 1
     </select>
+
+    <update id="updateRecordLogEndTime" parameterType="DeviceBO">
+        update lawenforcement_record_log set end_time = NOW() WHERE device_id = #{deviceCode} and end_time is null
+    </update>
+
+    <update id="updateRecordStatus" parameterType="DeviceBO">
+        update lawenforcement_record
+        set record_status = 'lawenforcement_type_2'
+        where id = (
+            select record_id
+            from lawenforcement_record_log
+            where device_id = #{deviceCode} and end_time is null
+        )
+    </update>
 </mapper>