Commit ce84d7a6 authored by tangwei's avatar tangwei

Merge branch 'developer' of http://172.16.10.76/moa/amos-boot-biz into developer

parents 62cfc63d 97d116aa
...@@ -125,15 +125,18 @@ public class MetaHandler implements MetaObjectHandler { ...@@ -125,15 +125,18 @@ public class MetaHandler implements MetaObjectHandler {
*/ */
@Override @Override
public void updateFill(MetaObject metaObject) { public void updateFill(MetaObject metaObject) {
String userId = RequestContext.getExeUserId(); Class clazz = metaObject.getOriginalObject().getClass();
ReginParams reginParams = FillCommonUserField annotation = (FillCommonUserField) clazz.getAnnotation(FillCommonUserField.class);
JSONObject.parseObject(null != redisUtils.get(RedisKey.buildReginKey(userId, getToken())) ? if (annotation == null || annotation.isAutoFill()) {
redisUtils.get(RedisKey.buildReginKey(userId, getToken())).toString() : null, ReginParams.class); String userId = RequestContext.getExeUserId();
if (ObjectUtils.isEmpty(reginParams)) { ReginParams reginParams =
return; JSONObject.parseObject(null != redisUtils.get(RedisKey.buildReginKey(userId, getToken())) ?
redisUtils.get(RedisKey.buildReginKey(userId, getToken())).toString() : null, ReginParams.class);
if (ObjectUtils.isEmpty(reginParams)) {
return;
}
AgencyUserModel agencyUserModel = reginParams.getUserModel();
recInfoUpdate(metaObject, agencyUserModel);
} }
AgencyUserModel agencyUserModel = reginParams.getUserModel();
recInfoUpdate(metaObject, agencyUserModel);
} }
} }
\ No newline at end of file
...@@ -17,5 +17,5 @@ import java.util.List; ...@@ -17,5 +17,5 @@ import java.util.List;
*/ */
public interface ControllerMapper extends BaseMapper<Controller> { public interface ControllerMapper extends BaseMapper<Controller> {
public List<ControllerDto> getCurrentStationController(@Param("sequenceNbr") Long sequenceNbr); List<ControllerDto> getCurrentStationController(@Param("sequenceNbr") Long sequenceNbr);
} }
...@@ -3,19 +3,14 @@ package com.yeejoin.amos.boot.module.jcs.biz.controller; ...@@ -3,19 +3,14 @@ package com.yeejoin.amos.boot.module.jcs.biz.controller;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.jcs.api.dto.ControllerDto; import com.yeejoin.amos.boot.module.jcs.api.dto.ControllerDto;
import com.yeejoin.amos.boot.module.jcs.api.entity.Controller; import com.yeejoin.amos.boot.module.jcs.api.entity.Controller;
import com.yeejoin.amos.boot.module.jcs.api.entity.ControllerLog;
import com.yeejoin.amos.boot.module.jcs.api.enums.ControllerGroupEnum; import com.yeejoin.amos.boot.module.jcs.api.enums.ControllerGroupEnum;
import com.yeejoin.amos.boot.module.jcs.api.enums.ControllerTypeEnum; import com.yeejoin.amos.boot.module.jcs.api.enums.ControllerTypeEnum;
import com.yeejoin.amos.boot.module.jcs.biz.service.impl.ControllerEquipServiceImpl;
import com.yeejoin.amos.boot.module.jcs.biz.service.impl.ControllerLogServiceImpl;
import com.yeejoin.amos.boot.module.jcs.biz.service.impl.ControllerServiceImpl; import com.yeejoin.amos.boot.module.jcs.biz.service.impl.ControllerServiceImpl;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.foundation.enumeration.UserType; import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation; import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper; import org.typroject.tyboot.core.restful.utils.ResponseHelper;
...@@ -41,7 +36,7 @@ public class ControllerController extends BaseController { ...@@ -41,7 +36,7 @@ public class ControllerController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation(httpMethod = "POST", value = "更新联动控制器状态", notes = "更新联动控制器状态") @ApiOperation(httpMethod = "POST", value = "更新联动控制器状态", notes = "更新联动控制器状态")
@PostMapping(value = "/updateControllerState") @PostMapping(value = "/updateControllerState")
public ResponseModel<Object> updateControllerState(@RequestBody Controller[] controllers) { public ResponseModel<Object> updateControllerState(@RequestBody ControllerDto[] controllers) {
return ResponseHelper.buildResponse(controllerServiceImpl.changeControllerState(controllers)); return ResponseHelper.buildResponse(controllerServiceImpl.changeControllerState(controllers));
} }
...@@ -66,6 +61,7 @@ public class ControllerController extends BaseController { ...@@ -66,6 +61,7 @@ public class ControllerController extends BaseController {
BeanUtils.copyProperties(controller, controllerDto); BeanUtils.copyProperties(controller, controllerDto);
controllerDto.setTypeEnum(anEnum); controllerDto.setTypeEnum(anEnum);
controllerDto.setTypeDescription(anEnum.getName()); controllerDto.setTypeDescription(anEnum.getName());
controllerDto.setState("0");
controllerDtos.add(controllerDto); controllerDtos.add(controllerDto);
} }
}); });
......
package com.yeejoin.amos.boot.module.jcs.biz.controller; package com.yeejoin.amos.boot.module.jcs.biz.controller;
import com.yeejoin.amos.boot.biz.common.controller.BaseController; import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.jcs.api.dto.ControllerEquipDto;
import com.yeejoin.amos.boot.module.jcs.api.entity.ControllerEquip; import com.yeejoin.amos.boot.module.jcs.api.entity.ControllerEquip;
import com.yeejoin.amos.boot.module.jcs.biz.service.impl.ControllerEquipServiceImpl; import com.yeejoin.amos.boot.module.jcs.biz.service.impl.ControllerEquipServiceImpl;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
......
package com.yeejoin.amos.boot.module.jcs.biz.service.impl; package com.yeejoin.amos.boot.module.jcs.biz.service.impl;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yeejoin.amos.boot.module.common.api.feign.JcsControlServerClient; import com.yeejoin.amos.boot.module.common.api.feign.JcsControlServerClient;
import com.yeejoin.amos.boot.module.jcs.api.dto.ControllerDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.ControllerEquipDto;
import com.yeejoin.amos.boot.module.jcs.api.entity.Controller; import com.yeejoin.amos.boot.module.jcs.api.entity.Controller;
import com.yeejoin.amos.boot.module.jcs.api.entity.ControllerEquip;
import com.yeejoin.amos.boot.module.jcs.api.entity.ControllerLog;
import com.yeejoin.amos.boot.module.jcs.api.mapper.ControllerEquipMapper;
import com.yeejoin.amos.boot.module.jcs.api.service.IControllerEquipService; import com.yeejoin.amos.boot.module.jcs.api.service.IControllerEquipService;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import com.yeejoin.amos.boot.module.jcs.api.dto.ControllerEquipDto; import java.util.Date;
import com.yeejoin.amos.boot.module.jcs.api.entity.ControllerEquip; import java.util.List;
import com.yeejoin.amos.boot.module.jcs.api.mapper.ControllerEquipMapper;
/** /**
* <pre> * <pre>
...@@ -26,10 +32,17 @@ import com.yeejoin.amos.boot.module.jcs.api.mapper.ControllerEquipMapper; ...@@ -26,10 +32,17 @@ import com.yeejoin.amos.boot.module.jcs.api.mapper.ControllerEquipMapper;
*/ */
@Service @Service
public class ControllerEquipServiceImpl extends BaseService<ControllerEquipDto, ControllerEquip, ControllerEquipMapper> implements IControllerEquipService { public class ControllerEquipServiceImpl extends BaseService<ControllerEquipDto, ControllerEquip, ControllerEquipMapper> implements IControllerEquipService {
public static final String CONTROLLER_STATE_CHANGED_TOPIC = "controllerStateChanged";
@Autowired @Autowired
JcsControlServerClient jcsControlServerClient; JcsControlServerClient jcsControlServerClient;
@Autowired
ControllerLogServiceImpl controllerLogServiceImpl;
@Autowired
private EmqKeeper emqKeeper;
public List<ControllerEquipDto> queryAllForList() { public List<ControllerEquipDto> queryAllForList() {
return this.queryForList("", false); return this.queryForList("", false);
} }
...@@ -38,8 +51,10 @@ public class ControllerEquipServiceImpl extends BaseService<ControllerEquipDto, ...@@ -38,8 +51,10 @@ public class ControllerEquipServiceImpl extends BaseService<ControllerEquipDto,
* 改变警铃状态 0关闭,1开启 * 改变警铃状态 0关闭,1开启
*/ */
@Async @Async
public void changeBell(Controller controller, String type) { public void changeBell(ControllerDto controller, String type) {
if (controller == null) return; if (controller == null) return;
controller.setState(type);
saveLog(controller);
List<ControllerEquip> list = getControllerEquips(controller); List<ControllerEquip> list = getControllerEquips(controller);
list.forEach(controllerEquip -> jcsControlServerClient.sendBellAction(controllerEquip.getNum(), type)); list.forEach(controllerEquip -> jcsControlServerClient.sendBellAction(controllerEquip.getNum(), type));
} }
...@@ -48,8 +63,10 @@ public class ControllerEquipServiceImpl extends BaseService<ControllerEquipDto, ...@@ -48,8 +63,10 @@ public class ControllerEquipServiceImpl extends BaseService<ControllerEquipDto,
* 改变广播状态 0关闭,1开启 * 改变广播状态 0关闭,1开启
*/ */
@Async @Async
public void changeBroadcast(Controller controller, String type) { public void changeBroadcast(ControllerDto controller, String type) {
if (controller == null) return; if (controller == null) return;
controller.setState(type);
saveLog(controller);
List<ControllerEquip> list = getControllerEquips(controller); List<ControllerEquip> list = getControllerEquips(controller);
list.forEach(controllerEquip -> jcsControlServerClient.sendFileAction(controllerEquip.getNum(), "")); list.forEach(controllerEquip -> jcsControlServerClient.sendFileAction(controllerEquip.getNum(), ""));
} }
...@@ -58,14 +75,35 @@ public class ControllerEquipServiceImpl extends BaseService<ControllerEquipDto, ...@@ -58,14 +75,35 @@ public class ControllerEquipServiceImpl extends BaseService<ControllerEquipDto,
* 改变车库门状态 0关闭,1开启 * 改变车库门状态 0关闭,1开启
*/ */
@Async @Async
public void changeDoor(Controller controller, String type) { public void changeDoor(ControllerDto controller, String type) {
if (controller == null) return; if (controller == null) return;
controller.setState(type);
saveLog(controller);
List<ControllerEquip> list = getControllerEquips(controller); List<ControllerEquip> list = getControllerEquips(controller);
list.forEach(controllerEquip -> jcsControlServerClient.writeStateAction(controller.getIp(), controller.getPort(), Integer.parseInt(controllerEquip.getNum()), type)); list.forEach(controllerEquip -> jcsControlServerClient.writeStateAction(controller.getIp(), controller.getPort(), Integer.parseInt(controllerEquip.getNum()), type));
} }
private List<ControllerEquip> getControllerEquips(Controller controller) { private List<ControllerEquip> getControllerEquips(ControllerDto controller) {
LambdaQueryWrapper<ControllerEquip> wrapper = new LambdaQueryWrapper<ControllerEquip>().eq(ControllerEquip::getControllerSeq, controller.getSequenceNbr()); LambdaQueryWrapper<ControllerEquip> wrapper = new LambdaQueryWrapper<ControllerEquip>().eq(ControllerEquip::getControllerSeq, controller.getSequenceNbr());
return list(wrapper); return list(wrapper);
} }
/**
* 保存操作日志
*/
private void saveLog(ControllerDto controller) {
if (controller == null) return;
ControllerLog controllerLog = new ControllerLog();
controllerLog.setControllerSeq(controller.getSequenceNbr());
controllerLog.setState(controller.getState());
controllerLog.setExecuteDate(new Date());
controllerLogServiceImpl.save(controllerLog);
// 分发状态变更通知
try {
String value = new ObjectMapper().writeValueAsString(controller);
emqKeeper.getMqttClient().publish(CONTROLLER_STATE_CHANGED_TOPIC, value.getBytes(), 2, true);
} catch (MqttException | JsonProcessingException e) {
e.printStackTrace();
}
}
} }
package com.yeejoin.amos.boot.module.jcs.biz.service.impl; package com.yeejoin.amos.boot.module.jcs.biz.service.impl;
import java.util.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.module.jcs.api.dto.ControllerDto;
import com.yeejoin.amos.boot.module.jcs.api.entity.ControllerLog; import com.yeejoin.amos.boot.module.jcs.api.entity.Controller;
import com.yeejoin.amos.boot.module.jcs.api.enums.ControllerTypeEnum; import com.yeejoin.amos.boot.module.jcs.api.enums.ControllerTypeEnum;
import com.yeejoin.amos.boot.module.jcs.api.mapper.ControllerMapper;
import com.yeejoin.amos.boot.module.jcs.api.service.IControllerService; import com.yeejoin.amos.boot.module.jcs.api.service.IControllerService;
import org.eclipse.paho.client.mqttv3.MqttException; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.component.emq.EmqKeeper;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import com.yeejoin.amos.boot.module.jcs.api.dto.ControllerDto; import java.util.*;
import com.yeejoin.amos.boot.module.jcs.api.entity.Controller; import java.util.concurrent.ConcurrentHashMap;
import com.yeejoin.amos.boot.module.jcs.api.mapper.ControllerMapper;
/** /**
* <pre> * <pre>
...@@ -26,12 +25,10 @@ import com.yeejoin.amos.boot.module.jcs.api.mapper.ControllerMapper; ...@@ -26,12 +25,10 @@ import com.yeejoin.amos.boot.module.jcs.api.mapper.ControllerMapper;
*/ */
@Service @Service
public class ControllerServiceImpl extends BaseService<ControllerDto, Controller, ControllerMapper> implements IControllerService { public class ControllerServiceImpl extends BaseService<ControllerDto, Controller, ControllerMapper> implements IControllerService {
/**
* 将延迟的任务存放在Hashtable中,以便在多个请求中控制任务的取消分享等操作 private final ConcurrentHashMap<Long, TimerTask> tasks = new ConcurrentHashMap<>();
*/ private final ConcurrentHashMap<Long, Long> bellStartTime = new ConcurrentHashMap<>();
private final Map<Long, TimerTask> tasks = new Hashtable<>();
private final Timer timer = new Timer(); private final Timer timer = new Timer();
public static final String CONTROLLER_STATE_CHANGED_TOPIC = "controllerStateChanged";
@Autowired @Autowired
ControllerMapper controllerMapper; ControllerMapper controllerMapper;
...@@ -39,12 +36,6 @@ public class ControllerServiceImpl extends BaseService<ControllerDto, Controller ...@@ -39,12 +36,6 @@ public class ControllerServiceImpl extends BaseService<ControllerDto, Controller
@Autowired @Autowired
ControllerEquipServiceImpl controllerEquipServiceImpl; ControllerEquipServiceImpl controllerEquipServiceImpl;
@Autowired
ControllerLogServiceImpl controllerLogServiceImpl;
@Autowired
private EmqKeeper emqKeeper;
public List<ControllerDto> queryAllForList() { public List<ControllerDto> queryAllForList() {
return this.queryForList("", false); return this.queryForList("", false);
...@@ -70,68 +61,80 @@ public class ControllerServiceImpl extends BaseService<ControllerDto, Controller ...@@ -70,68 +61,80 @@ public class ControllerServiceImpl extends BaseService<ControllerDto, Controller
* 1> 首先:消防警铃第一时间 响铃持续15s 后自动关闭。 * 1> 首先:消防警铃第一时间 响铃持续15s 后自动关闭。
* 2> 然后:警铃 响铃结束后,广播系统开启。广播 启动预制的 广播音频, 播放。 * 2> 然后:警铃 响铃结束后,广播系统开启。广播 启动预制的 广播音频, 播放。
*/ */
public boolean changeControllerState(Controller[] controllers) { public boolean changeControllerState(ControllerDto[] controllers) {
boolean isBatch = controllers.length > 1; //全部操作
if (isBatch) {//全部操作 if (controllers.length > 1) {
//分组 batchChange(controllers);
HashSet<String> groupTypes = new HashSet<>(); }
for (Controller controller : controllers) { //单个操作
groupTypes.add(controller.getStation()); else if (controllers.length == 1) {
ControllerDto controller = controllers[0];
//取消该controller的任务
TimerTask historyTask = tasks.get(controller.getSequenceNbr());
if (historyTask != null) {
historyTask.cancel();
tasks.remove(controller.getSequenceNbr());
} }
//按分组进行归类 String type = controller.getType();
List<Map<String, Controller>> groups = new ArrayList<>(); //关闭操作(只能关闭警铃)
groupTypes.forEach(groupType -> { if ("0".equals(controller.getState())) {
Map<String, Controller> group = new HashMap<>(); if (ControllerTypeEnum.BELL.getCode().equals(type)) {
for (Controller controller : controllers) { //取消该警铃的任务
if (groupType.equals(controller.getStation())) group.put(controller.getType(), controller); TimerTask stopBellTaskHistory = tasks.get(controller.getSequenceNbr());
if (stopBellTaskHistory != null) {
stopBellTaskHistory.cancel();
tasks.remove(controller.getSequenceNbr());
}
controllerEquipServiceImpl.changeBell(controller, "0");//关闭警铃
} }
groups.add(group); }
}); //启动操作
//开始处理 else {
startJob(groups); if (ControllerTypeEnum.BELL.getCode().equals(type)) {
} else {//单个操作 bellStartTime.put(controller.getSequenceNbr(), System.currentTimeMillis());
for (Controller controller : controllers) { controllerEquipServiceImpl.changeBell(controller, "1");//启动警铃
//保存日志 //开始计时15秒,15秒后关闭警铃
saveLog(controller); TimerTask timerTask = new TimerTask() {
String type = controller.getType(); @Override
// 打开警铃,并开始计时15秒,若15秒内启动广播,则播放完警铃后再播放广播 public void run() {
if ("0".equals(controller.getState())) {//关闭操作
if (ControllerTypeEnum.BELL.getCode().equals(type)) {
//取消该警铃的任务
TimerTask stopBellTaskHistory = tasks.get(controller.getSequenceNbr());
if (stopBellTaskHistory != null) {
stopBellTaskHistory.cancel();
tasks.remove(controller.getSequenceNbr());
}
controllerEquipServiceImpl.changeBell(controller, "0");//关闭警铃
} else if (ControllerTypeEnum.BROADCAST.getCode().equals(type)) {
//取消该广播的任务
TimerTask startBroadcastTaskHistory = tasks.get(controller.getSequenceNbr());
if (startBroadcastTaskHistory != null) {
startBroadcastTaskHistory.cancel();
tasks.remove(controller.getSequenceNbr()); tasks.remove(controller.getSequenceNbr());
controllerEquipServiceImpl.changeBell(controller, "0");//关闭警铃
} }
controllerEquipServiceImpl.changeBroadcast(controller, "0");//关闭广播 };
} else if (ControllerTypeEnum.DOOR.getCode().equals(type)) {//车库门不能关闭 tasks.put(controller.getSequenceNbr(), timerTask);
} timer.schedule(timerTask, 15000);
} else {//启动操作 } else if (ControllerTypeEnum.BROADCAST.getCode().equals(type)) {
if (ControllerTypeEnum.BELL.getCode().equals(type)) {//启动警铃 //开启广播前检测警铃是否开启,警铃开启的话,等待警铃15s结束后开启广播
controllerEquipServiceImpl.changeBell(controller, "1");//启动警铃 LambdaQueryWrapper<Controller> lambdaQueryWrapper = new LambdaQueryWrapper<Controller>()
//开始计时15秒,15秒后关闭警铃 .eq(Controller::getStation, controller.getStation())
.eq(Controller::getType, ControllerTypeEnum.BELL.getCode());
Controller bellController = controllerMapper.selectOne(lambdaQueryWrapper);
Long startTime = bellStartTime.get(bellController.getSequenceNbr());
// 警铃开启5秒内开启广播,广播均排队等待15s
if (startTime != null && (System.currentTimeMillis() - startTime) / 1000 < 3) {
TimerTask timerTask = new TimerTask() { TimerTask timerTask = new TimerTask() {
@Override @Override
public void run() { public void run() {
tasks.remove(controller.getSequenceNbr()); tasks.remove(controller.getSequenceNbr());
controllerEquipServiceImpl.changeBell(controller, "0");//关闭警铃 controllerEquipServiceImpl.changeBroadcast(controller, "1");//开启广播
} }
}; };
tasks.put(controller.getSequenceNbr(), timerTask); tasks.put(controller.getSequenceNbr(), timerTask);
timer.schedule(timerTask, 15000); timer.schedule(timerTask, 14000);
} else if (ControllerTypeEnum.BROADCAST.getCode().equals(type)) {//启动广播 } else {
//如果警铃启动,则先关闭警铃,后开启广播
TimerTask timerTask = tasks.get(bellController.getSequenceNbr());
if (timerTask != null) {
timerTask.cancel();
tasks.remove(bellController.getSequenceNbr());
ControllerDto controllerDto = new ControllerDto();
BeanUtils.copyProperties(bellController, controllerDto);
controllerEquipServiceImpl.changeBell(controllerDto, "0");//关闭警铃
}
controllerEquipServiceImpl.changeBroadcast(controller, "1");//开启广播 controllerEquipServiceImpl.changeBroadcast(controller, "1");//开启广播
} else if (ControllerTypeEnum.DOOR.getCode().equals(type)) {//启动车库门
controllerEquipServiceImpl.changeDoor(controller, "1");//开启车库门
} }
} else if (ControllerTypeEnum.DOOR.getCode().equals(type)) {
controllerEquipServiceImpl.changeDoor(controller, "1");//开启车库门
} }
} }
} }
...@@ -141,82 +144,95 @@ public class ControllerServiceImpl extends BaseService<ControllerDto, Controller ...@@ -141,82 +144,95 @@ public class ControllerServiceImpl extends BaseService<ControllerDto, Controller
/** /**
* 全部操作:启动警铃,启动车库门,15秒后关闭警铃,启动广播 * 全部操作:启动警铃,启动车库门,15秒后关闭警铃,启动广播
*/ */
public void startJob(List<Map<String, Controller>> groups) { public void batchChange(ControllerDto[] controllers) {
groups.forEach(group -> { //按大队分组
Controller bellController = group.get(ControllerTypeEnum.BELL.getCode()); Set<String> groupTypes = new LinkedHashSet<>();
Controller broadcastController = group.get(ControllerTypeEnum.BROADCAST.getCode()); for (ControllerDto controller : controllers) {
Controller doorController = group.get(ControllerTypeEnum.DOOR.getCode()); groupTypes.add(controller.getStation());
//保存操作日志 }
saveLog(bellController); //按大队进行归类
saveLog(broadcastController); List<Map<String, ControllerDto>> groups = new ArrayList<>();
saveLog(doorController); groupTypes.forEach(groupType -> {
if ("0".equals(bellController.getState())) {//全部关闭(车库们不能关闭) Map<String, ControllerDto> group = new HashMap<>();
//先查看是否有未执行的历史任务,如果有则取消任务 for (ControllerDto controller : controllers) {
TimerTask stopBellTaskHistory = tasks.get(bellController.getSequenceNbr()); if (groupType.equals(controller.getStation())) group.put(controller.getType(), controller);
if (stopBellTaskHistory != null) {
stopBellTaskHistory.cancel();
tasks.remove(bellController.getSequenceNbr());
}
if (broadcastController != null) {
TimerTask startBroadcastTaskHistory = tasks.get(broadcastController.getSequenceNbr());
if (startBroadcastTaskHistory != null) {
startBroadcastTaskHistory.cancel();
tasks.remove(broadcastController.getSequenceNbr());
}
}
controllerEquipServiceImpl.changeBell(bellController, "0");//关闭警铃
controllerEquipServiceImpl.changeBroadcast(broadcastController, "0");//关闭广播
} else {//全部打开
//立即启动警铃,打开车库门
controllerEquipServiceImpl.changeBell(bellController, "1");//开启警铃
controllerEquipServiceImpl.changeDoor(doorController, "1");//开启车库门
//15秒后关闭警铃,启动广播
TimerTask stopBellTask = new TimerTask() {
@Override
public void run() {
tasks.remove(bellController.getSequenceNbr());
controllerEquipServiceImpl.changeBell(bellController, "0");//关闭警铃
}
};
TimerTask startBroadcastTask = new TimerTask() {
@Override
public void run() {
tasks.remove(broadcastController.getSequenceNbr());
controllerEquipServiceImpl.changeBell(broadcastController, "1");//开启广播
}
};
//先查看是否有未执行的历史任务,如果有则取消任务
TimerTask stopBellTaskHistory = tasks.get(bellController.getSequenceNbr());
if (stopBellTaskHistory != null) stopBellTaskHistory.cancel();
TimerTask startBroadcastTaskHistory = tasks.get(broadcastController.getSequenceNbr());
if (startBroadcastTaskHistory != null) startBroadcastTaskHistory.cancel();
//保存新的任务至map中,同时开始调度新任务
tasks.put(bellController.getSequenceNbr(), stopBellTask);
tasks.put(broadcastController.getSequenceNbr(), startBroadcastTask);
timer.schedule(stopBellTask, 15000);
timer.schedule(startBroadcastTask, 16000);
} }
groups.add(group);
}); });
// 某大队全部操作
if (groups.size() == 1) {
Map<String, ControllerDto> group = groups.get(0);
ControllerDto bellController = group.get(ControllerTypeEnum.BELL.getCode());//警铃
ControllerDto broadcastController = group.get(ControllerTypeEnum.BROADCAST.getCode());//广播
ControllerDto doorController = group.get(ControllerTypeEnum.DOOR.getCode());//车库门
//取消该大队所有历史任务
TimerTask bellTask = tasks.get(bellController.getSequenceNbr());
TimerTask broadcastTask = tasks.get(broadcastController.getSequenceNbr());
if (bellTask != null) {
bellTask.cancel();
tasks.remove(bellController.getSequenceNbr());
}
if (broadcastTask != null) {
broadcastTask.cancel();
tasks.remove(broadcastController.getSequenceNbr());
}
batchOperation(bellController, broadcastController, doorController);
}
//所有大队操作
else {
//取消所有的历史任务
tasks.values().forEach(TimerTask::cancel);
tasks.clear();
groups.forEach(group -> {
ControllerDto bellController = group.get(ControllerTypeEnum.BELL.getCode());//警铃
ControllerDto broadcastController = group.get(ControllerTypeEnum.BROADCAST.getCode());//广播
ControllerDto doorController = group.get(ControllerTypeEnum.DOOR.getCode());//车库门
//关闭所有(广播,车库门不能关闭)
batchOperation(bellController, broadcastController, doorController);
});
}
} }
/** /**
* 保存操作日志 * 批量操作
*
* @param bellController 警铃
* @param broadcastController 广播
* @param doorController 车库门
*/ */
private void saveLog(Controller controller) { private void batchOperation(ControllerDto bellController, ControllerDto broadcastController, ControllerDto doorController) {
if (controller == null) return; //关闭所有(广播,车库门不能关闭)
boolean update = updateById(controller); if ("0".equals(bellController.getState())) {
if (update) { controllerEquipServiceImpl.changeBell(bellController, "0");//关闭警铃
ControllerLog controllerLog = new ControllerLog();
controllerLog.setControllerSeq(controller.getSequenceNbr());
controllerLog.setState(controller.getState());
controllerLog.setExecuteDate(new Date());
controllerLogServiceImpl.save(controllerLog);
} }
// 分发状态变更通知 //开启所有
try { else {
emqKeeper.getMqttClient().publish(CONTROLLER_STATE_CHANGED_TOPIC, "".getBytes(), 2, true); //立即启动警铃,打开车库门
} catch (MqttException e) { bellStartTime.put(bellController.getSequenceNbr(), System.currentTimeMillis());
e.printStackTrace(); controllerEquipServiceImpl.changeBell(bellController, "1");//开启警铃
controllerEquipServiceImpl.changeDoor(doorController, "1");//开启车库门
//15秒后关闭警铃
TimerTask stopBellTask = new TimerTask() {
@Override
public void run() {
tasks.remove(bellController.getSequenceNbr());
controllerEquipServiceImpl.changeBell(bellController, "0");//关闭警铃
}
};
//15秒后启动广播
TimerTask startBroadcastTask = new TimerTask() {
@Override
public void run() {
tasks.remove(broadcastController.getSequenceNbr());
controllerEquipServiceImpl.changeBell(broadcastController, "1");//开启广播
}
};
//保存新的任务至map中,同时开始调度新任务
tasks.put(bellController.getSequenceNbr(), stopBellTask);
tasks.put(broadcastController.getSequenceNbr(), startBroadcastTask);
timer.schedule(stopBellTask, 15000);
timer.schedule(startBroadcastTask, 16000);
} }
} }
} }
package com.yeejoin.amos.boot.module.jcs.biz.service.impl; package com.yeejoin.amos.boot.module.jcs.biz.service.impl;
import java.util.*; import java.util.*;
import java.util.function.Function;
import java.util.function.IntFunction;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.module.common.api.service.IDutyCarService; import com.yeejoin.amos.boot.module.common.api.service.IDutyCarService;
import com.yeejoin.amos.boot.module.jcs.api.dto.AircraftDto; import com.yeejoin.amos.boot.module.jcs.api.dto.*;
import com.yeejoin.amos.boot.module.jcs.api.entity.*; import com.yeejoin.amos.boot.module.jcs.api.entity.*;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
...@@ -35,17 +38,6 @@ import com.yeejoin.amos.boot.module.common.api.entity.FireTeam; ...@@ -35,17 +38,6 @@ import com.yeejoin.amos.boot.module.common.api.entity.FireTeam;
import com.yeejoin.amos.boot.module.common.api.feign.EquipFeignClient; import com.yeejoin.amos.boot.module.common.api.feign.EquipFeignClient;
import com.yeejoin.amos.boot.module.common.api.mapper.DynamicFormInstanceMapper; import com.yeejoin.amos.boot.module.common.api.mapper.DynamicFormInstanceMapper;
import com.yeejoin.amos.boot.module.common.biz.service.impl.DutyCarServiceImpl; import com.yeejoin.amos.boot.module.common.biz.service.impl.DutyCarServiceImpl;
import com.yeejoin.amos.boot.module.jcs.api.dto.AlertCalledObjsDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.AlertCalledRo;
import com.yeejoin.amos.boot.module.jcs.api.dto.CarStatusInfoDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.PowerCarCountDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.PowerCompanyCountDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.PowerTransferCompanyDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.PowerTransferCompanyResourcesDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.PowerTransferDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.PowerTransferResourceDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.PowerTransferSimpleDto;
import com.yeejoin.amos.boot.module.jcs.api.dto.ResourceStatisticsDto;
import com.yeejoin.amos.boot.module.jcs.api.enums.AlertFeedbackStatusEnum; import com.yeejoin.amos.boot.module.jcs.api.enums.AlertFeedbackStatusEnum;
import com.yeejoin.amos.boot.module.jcs.api.enums.DutyInfoEnum; import com.yeejoin.amos.boot.module.jcs.api.enums.DutyInfoEnum;
import com.yeejoin.amos.boot.module.jcs.api.enums.FireBrigadeTypeEnum; import com.yeejoin.amos.boot.module.jcs.api.enums.FireBrigadeTypeEnum;
...@@ -424,8 +416,9 @@ public class PowerTransferServiceImpl extends BaseService<PowerTransferDto, Powe ...@@ -424,8 +416,9 @@ public class PowerTransferServiceImpl extends BaseService<PowerTransferDto, Powe
List<AlertFormValue> alertFormValue = alertCalledObjsDto.getAlertFormValue(); List<AlertFormValue> alertFormValue = alertCalledObjsDto.getAlertFormValue();
String responseLevel = ""; String responseLevel = "";
List<AlertFormValue> list1 = alertFormValue.stream().filter(formValue -> formValue.getFieldCode().equals("responseLevel") ).collect(Collectors.toList());; List<AlertFormValue> list1 = alertFormValue.stream().filter(formValue -> formValue.getFieldCode().equals("responseLevel")).collect(Collectors.toList());
if(list1.size() > 0) { ;
if (list1.size() > 0) {
responseLevel = list1.get(0).getFieldValue(); responseLevel = list1.get(0).getFieldValue();
} }
...@@ -483,12 +476,17 @@ public class PowerTransferServiceImpl extends BaseService<PowerTransferDto, Powe ...@@ -483,12 +476,17 @@ public class PowerTransferServiceImpl extends BaseService<PowerTransferDto, Powe
powerTransferCompanyDto.setPowerTransferCompanyResourcesDtoList(resourcesDtoList); powerTransferCompanyDto.setPowerTransferCompanyResourcesDtoList(resourcesDtoList);
// 更新车辆状态 // 更新车辆状态
equipFeignService.updateCarStatus(carStatusInfoDtoList); equipFeignService.updateCarStatus(carStatusInfoDtoList);
// 警情力量调派时,点击【任务派发】后,如果被调派的 力量包含消防车,那么该消防车所在的 大队的警铃、广播自动 启动,消防车所在的车库门自动开启 // 警情力量调派时,点击【任务派发】后,如果被调派的 力量包含消防车,那么该消防车所在的 大队的警铃、广播自动 启动,消防车所在的车库门自动开启
try { try {
List<Controller> controllers = controllerServiceImpl.list(new LambdaQueryWrapper<Controller>().eq(Controller::getFireTeamSeq, powerTransferCompanyDto.getCompanyId())); List<Controller> controllers = controllerServiceImpl.list(new LambdaQueryWrapper<Controller>().eq(Controller::getFireTeamSeq, powerTransferCompanyDto.getCompanyId()));
if (controllers.size() > 0) { if (controllers.size() > 0) {
controllerServiceImpl.changeControllerState(controllers.toArray(new Controller[0])); ControllerDto[] controllerDtos = new ControllerDto[controllers.size()];
for (int i = 0; i < controllers.size(); i++) {
ControllerDto controllerDto = new ControllerDto();
BeanUtils.copyProperties(controllers.get(i), controllerDto);
controllerDtos[i] = controllerDto;
}
controllerServiceImpl.changeControllerState(controllerDtos);
} }
} catch (Exception e) { } catch (Exception e) {
log.error(e.getMessage()); log.error(e.getMessage());
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment