BJQ6075 设备控制类

This commit is contained in:
2025-11-06 10:39:12 +08:00
parent 1dc3386284
commit c7ff118bfe
12 changed files with 421 additions and 145 deletions

View File

@ -28,6 +28,7 @@ public class TestController extends BaseController {
private final DeviceBJQBizService appDeviceService; private final DeviceBJQBizService appDeviceService;
/** /**
* 上传设备logo图片 * 上传设备logo图片
*/ */

View File

@ -0,0 +1,120 @@
package com.fuyuanshen.app.controller.device.bjq;
import com.fuyuanshen.app.domain.bo.AppPersonnelInfoBo;
import com.fuyuanshen.app.domain.dto.AppDeviceLogoUploadDto;
import com.fuyuanshen.app.domain.dto.DeviceInstructDto;
import com.fuyuanshen.app.domain.vo.AppDeviceDetailVo;
import com.fuyuanshen.common.core.domain.R;
import com.fuyuanshen.common.core.validate.AddGroup;
import com.fuyuanshen.common.ratelimiter.annotation.FunctionAccessAnnotation;
import com.fuyuanshen.common.ratelimiter.annotation.FunctionAccessBatcAnnotation;
import com.fuyuanshen.common.web.core.BaseController;
import com.fuyuanshen.equipment.domain.dto.AppDeviceSendMsgBo;
import com.fuyuanshen.web.service.device.DeviceBJQBizService;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* BJQ6075 设备控制类
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/app/bjq6075/device")
public class AppDeviceBJQ6075Controller extends BaseController {
private final DeviceBJQBizService appDeviceService;
/**
* 获取设备详细信息
*
* @param id 主键
*/
@GetMapping("/{id}")
public R<AppDeviceDetailVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(appDeviceService.getInfo(id));
}
/**
* 人员信息登记
*/
@PostMapping(value = "/registerPersonInfo")
// @FunctionAccessAnnotation("registerPersonInfo")
public R<Void> registerPersonInfo(@Validated(AddGroup.class) @RequestBody AppPersonnelInfoBo bo) {
return toAjax(appDeviceService.registerPersonInfo(bo));
}
/**
* 发送信息
*/
@PostMapping(value = "/sendMessage")
@FunctionAccessBatcAnnotation(value = "sendMessage", timeOut = 30, batchMaxTimeOut = 40)
public R<Void> sendMessage(@RequestBody AppDeviceSendMsgBo bo) {
return toAjax(appDeviceService.sendMessage(bo));
}
/**
* 发送报警信息
*/
@PostMapping(value = "/sendAlarmMessage")
@FunctionAccessBatcAnnotation(value = "sendAlarmMessage", timeOut = 5, batchMaxTimeOut = 10)
public R<Void> sendAlarmMessage(@RequestBody AppDeviceSendMsgBo bo) {
return toAjax(appDeviceService.sendAlarmMessage(bo));
}
/**
* 上传设备logo图片
*/
@PostMapping("/uploadLogo")
@FunctionAccessAnnotation("uploadLogo")
public R<Void> upload(@Validated @ModelAttribute AppDeviceLogoUploadDto bo) {
MultipartFile file = bo.getFile();
if (file.getSize() > 1024 * 1024 * 2) {
return R.warn("图片不能大于2M");
}
appDeviceService.uploadDeviceLogo(bo);
return R.ok();
}
/**
* 灯光模式
* 0关灯1强光模式2弱光模式, 3爆闪模式, 4泛光模式
*/
// @FunctionAccessAnnotation("lightModeSettings")
@PostMapping("/lightModeSettings")
public R<Void> lightModeSettings(@RequestBody DeviceInstructDto params) {
// params 转 JSONObject
appDeviceService.lightModeSettings(params);
return R.ok();
}
/**
* 灯光亮度设置
*/
// @FunctionAccessAnnotation("lightBrightnessSettings")
@PostMapping("/lightBrightnessSettings")
public R<Void> lightBrightnessSettings(@RequestBody DeviceInstructDto params) {
appDeviceService.lightBrightnessSettings(params);
return R.ok();
}
/**
* 激光模式设置
*/
@PostMapping("/laserModeSettings")
// @FunctionAccessAnnotation("laserModeSettings")
public R<Void> laserModeSettings(@RequestBody DeviceInstructDto params) {
appDeviceService.laserModeSettings(params);
return R.ok();
}
}

View File

@ -11,8 +11,9 @@ public class AppDeviceLogoUploadDto {
private Long deviceId; private Long deviceId;
private String deviceImei; private String deviceImei;
/** /**
* 文件 * 文件
*/ */
private MultipartFile file; private MultipartFile file;
@ -25,4 +26,5 @@ public class AppDeviceLogoUploadDto {
private List<Long> deviceIds; private List<Long> deviceIds;
private Integer chunkSize; private Integer chunkSize;
} }

View File

@ -21,6 +21,8 @@ public class MqttRuleEngine {
private ThreadPoolTaskExecutor threadPoolTaskExecutor; private ThreadPoolTaskExecutor threadPoolTaskExecutor;
private final LinkedHashMap<String, MqttMessageRule> rulesMap = new LinkedHashMap<>(); private final LinkedHashMap<String, MqttMessageRule> rulesMap = new LinkedHashMap<>();
public MqttRuleEngine(List<MqttMessageRule> rules) { public MqttRuleEngine(List<MqttMessageRule> rules) {
// 按优先级排序 // 按优先级排序
rules.sort(Comparator.comparing(MqttMessageRule::getPriority)); rules.sort(Comparator.comparing(MqttMessageRule::getPriority));
@ -28,14 +30,16 @@ public class MqttRuleEngine {
); );
} }
/** /**
* 执行匹配 * 执行匹配
*
* @param context 处理上下文 * @param context 处理上下文
* @return * @return
*/ */
public boolean executeRule(MqttRuleContext context) { public boolean executeRule(MqttRuleContext context) {
int commandType = context.getCommandType(); int commandType = context.getCommandType();
MqttMessageRule mqttMessageRule = rulesMap.get("Light_"+commandType); MqttMessageRule mqttMessageRule = rulesMap.get("Light_" + commandType);
if (mqttMessageRule != null) { if (mqttMessageRule != null) {
threadPoolTaskExecutor.execute(() -> mqttMessageRule.execute(context)); threadPoolTaskExecutor.execute(() -> mqttMessageRule.execute(context));
return true; return true;
@ -43,4 +47,5 @@ public class MqttRuleEngine {
return false; return false;
} }
} }

View File

@ -3,7 +3,6 @@ package com.fuyuanshen.global.mqtt.constants;
public interface MqttConstants { public interface MqttConstants {
/** /**
* 全局发布消息的key * 全局发布消息的key
*/ */
@ -13,4 +12,5 @@ public interface MqttConstants {
* 全局订阅消息的key * 全局订阅消息的key
*/ */
String GLOBAL_SUB_KEY = "A/"; String GLOBAL_SUB_KEY = "A/";
} }

View File

@ -25,6 +25,8 @@ import java.util.Objects;
import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_KEY_PREFIX; import static com.fuyuanshen.global.mqtt.constants.DeviceRedisKeyConstants.DEVICE_KEY_PREFIX;
/** /**
* 6075
*
* @author: 默苍璃 * @author: 默苍璃
* @date: 2025-11-05 17:41 * @date: 2025-11-05 17:41
*/ */

View File

@ -28,6 +28,7 @@ public class DeviceBJQController extends BaseController {
private final DeviceBJQBizService appDeviceService; private final DeviceBJQBizService appDeviceService;
/** /**
* 获取设备详细信息 * 获取设备详细信息
* *
@ -35,10 +36,11 @@ public class DeviceBJQController extends BaseController {
*/ */
@GetMapping("/{id}") @GetMapping("/{id}")
public R<AppDeviceDetailVo> getInfo(@NotNull(message = "主键不能为空") public R<AppDeviceDetailVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) { @PathVariable Long id) {
return R.ok(appDeviceService.getInfo(id)); return R.ok(appDeviceService.getInfo(id));
} }
/** /**
* 人员信息登记 * 人员信息登记
*/ */
@ -74,7 +76,7 @@ public class DeviceBJQController extends BaseController {
public R<Void> upload(@Validated @ModelAttribute AppDeviceLogoUploadDto bo) { public R<Void> upload(@Validated @ModelAttribute AppDeviceLogoUploadDto bo) {
MultipartFile file = bo.getFile(); MultipartFile file = bo.getFile();
if(file.getSize()>1024*1024*2){ if (file.getSize() > 1024 * 1024 * 2) {
return R.warn("图片不能大于2M"); return R.warn("图片不能大于2M");
} }
appDeviceService.uploadDeviceLogo(bo); appDeviceService.uploadDeviceLogo(bo);
@ -90,7 +92,7 @@ public class DeviceBJQController extends BaseController {
public R<Void> batchUploadLogo(@Validated @ModelAttribute AppDeviceLogoUploadDto bo) { public R<Void> batchUploadLogo(@Validated @ModelAttribute AppDeviceLogoUploadDto bo) {
MultipartFile file = bo.getFile(); MultipartFile file = bo.getFile();
if(file.getSize()>1024*1024*2){ if (file.getSize() > 1024 * 1024 * 2) {
return R.warn("图片不能大于2M"); return R.warn("图片不能大于2M");
} }
appDeviceService.batchUploadLogo(bo); appDeviceService.batchUploadLogo(bo);
@ -112,7 +114,6 @@ public class DeviceBJQController extends BaseController {
/** /**
* 灯光亮度设置 * 灯光亮度设置
*
*/ */
// @FunctionAccessAnnotation("lightBrightnessSettings") // @FunctionAccessAnnotation("lightBrightnessSettings")
@PostMapping("/lightBrightnessSettings") @PostMapping("/lightBrightnessSettings")
@ -123,7 +124,6 @@ public class DeviceBJQController extends BaseController {
/** /**
* 激光模式设置 * 激光模式设置
*
*/ */
@PostMapping("/laserModeSettings") @PostMapping("/laserModeSettings")
// @FunctionAccessAnnotation("laserModeSettings") // @FunctionAccessAnnotation("laserModeSettings")

View File

@ -29,7 +29,7 @@ import java.util.Map;
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/api/device") @RequestMapping("/api/device")
public class DeviceControlCenterController extends BaseController { public class DeviceControlCenterController extends BaseController {
private final DeviceBizService appDeviceService; private final DeviceBizService appDeviceService;
@ -42,6 +42,7 @@ public class DeviceControlCenterController extends BaseController {
return appDeviceService.queryWebDeviceList(bo, pageQuery); return appDeviceService.queryWebDeviceList(bo, pageQuery);
} }
/** /**
* 绑定设备 * 绑定设备
*/ */
@ -59,6 +60,7 @@ public class DeviceControlCenterController extends BaseController {
return toAjax(appDeviceService.unBindDevice(id)); return toAjax(appDeviceService.unBindDevice(id));
} }
/** /**
* 查询设备类型列表 * 查询设备类型列表
*/ */
@ -68,6 +70,7 @@ public class DeviceControlCenterController extends BaseController {
return R.ok(typeList); return R.ok(typeList);
} }
/** /**
* 重命名设备 * 重命名设备
* *
@ -100,7 +103,7 @@ public class DeviceControlCenterController extends BaseController {
*/ */
@GetMapping("/instructionRecord") @GetMapping("/instructionRecord")
public TableDataInfo<InstructionRecordVo> getInstructionRecord(InstructionRecordDto dto, PageQuery pageQuery) { public TableDataInfo<InstructionRecordVo> getInstructionRecord(InstructionRecordDto dto, PageQuery pageQuery) {
return appDeviceService.getInstructionRecord(dto,pageQuery); return appDeviceService.getInstructionRecord(dto, pageQuery);
} }
/** /**
@ -111,7 +114,7 @@ public class DeviceControlCenterController extends BaseController {
pageQuery.setPageNum(1); pageQuery.setPageNum(1);
pageQuery.setPageSize(2000); pageQuery.setPageSize(2000);
TableDataInfo<InstructionRecordVo> instructionRecord = appDeviceService.getInstructionRecord(dto, pageQuery); TableDataInfo<InstructionRecordVo> instructionRecord = appDeviceService.getInstructionRecord(dto, pageQuery);
if(instructionRecord.getRows() == null){ if (instructionRecord.getRows() == null) {
return; return;
} }
ExcelUtil.exportExcel(instructionRecord.getRows(), "设备操作日志", InstructionRecordVo.class, response); ExcelUtil.exportExcel(instructionRecord.getRows(), "设备操作日志", InstructionRecordVo.class, response);
@ -123,7 +126,7 @@ public class DeviceControlCenterController extends BaseController {
*/ */
@GetMapping("/locationHistory") @GetMapping("/locationHistory")
public TableDataInfo<LocationHistoryVo> getLocationHistory(InstructionRecordDto dto, PageQuery pageQuery) { public TableDataInfo<LocationHistoryVo> getLocationHistory(InstructionRecordDto dto, PageQuery pageQuery) {
return appDeviceService.getLocationHistory(dto,pageQuery); return appDeviceService.getLocationHistory(dto, pageQuery);
} }
/** /**
@ -134,7 +137,7 @@ public class DeviceControlCenterController extends BaseController {
pageQuery.setPageNum(1); pageQuery.setPageNum(1);
pageQuery.setPageSize(2000); pageQuery.setPageSize(2000);
TableDataInfo<LocationHistoryVo> result = appDeviceService.getLocationHistory(dto, pageQuery); TableDataInfo<LocationHistoryVo> result = appDeviceService.getLocationHistory(dto, pageQuery);
if(result.getRows() == null){ if (result.getRows() == null) {
return; return;
} }
ExcelUtil.exportExcel(result.getRows(), "历史轨迹记录", LocationHistoryVo.class, response); ExcelUtil.exportExcel(result.getRows(), "历史轨迹记录", LocationHistoryVo.class, response);
@ -147,4 +150,5 @@ public class DeviceControlCenterController extends BaseController {
public R<List<LocationHistoryDetailVo>> getLocationHistoryDetail(Long id) { public R<List<LocationHistoryDetailVo>> getLocationHistoryDetail(Long id) {
return R.ok(appDeviceService.getLocationHistoryDetail(id)); return R.ok(appDeviceService.getLocationHistoryDetail(id));
} }
} }

View File

@ -0,0 +1,140 @@
package com.fuyuanshen.web.controller.device.bjq;
import com.fuyuanshen.app.domain.bo.AppPersonnelInfoBo;
import com.fuyuanshen.app.domain.dto.AppDeviceLogoUploadDto;
import com.fuyuanshen.app.domain.dto.DeviceInstructDto;
import com.fuyuanshen.app.domain.vo.AppDeviceDetailVo;
import com.fuyuanshen.common.core.domain.R;
import com.fuyuanshen.common.core.validate.AddGroup;
import com.fuyuanshen.common.ratelimiter.annotation.FunctionAccessAnnotation;
import com.fuyuanshen.common.ratelimiter.annotation.FunctionAccessBatcAnnotation;
import com.fuyuanshen.common.web.core.BaseController;
import com.fuyuanshen.equipment.domain.dto.AppDeviceSendMsgBo;
import com.fuyuanshen.web.service.device.DeviceBJQBizService;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* web后台:设备控制类
* 6075
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/bjq6075/device")
public class DeviceBJQ6075Controller extends BaseController {
private final DeviceBJQBizService appDeviceService;
/**
* 获取设备详细信息
*
* @param id 主键
*/
@GetMapping("/{id}")
public R<AppDeviceDetailVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(appDeviceService.getInfo(id));
}
/**
* 人员信息登记
*/
@PostMapping(value = "/registerPersonInfo")
// @FunctionAccessAnnotation("registerPersonInfo")
public R<Void> registerPersonInfo(@Validated(AddGroup.class) @RequestBody AppPersonnelInfoBo bo) {
return toAjax(appDeviceService.registerPersonInfo(bo));
}
/**
* 发送信息
*/
@PostMapping(value = "/sendMessage")
@FunctionAccessBatcAnnotation(value = "sendMessage", timeOut = 30, batchMaxTimeOut = 40)
public R<Void> sendMessage(@RequestBody AppDeviceSendMsgBo bo) {
return toAjax(appDeviceService.sendMessage(bo));
}
/**
* 发送报警信息
*/
@PostMapping(value = "/sendAlarmMessage")
@FunctionAccessBatcAnnotation(value = "sendAlarmMessage", timeOut = 5, batchMaxTimeOut = 10)
public R<Void> sendAlarmMessage(@RequestBody AppDeviceSendMsgBo bo) {
return toAjax(appDeviceService.sendAlarmMessage(bo));
}
/**
* 上传设备logo图片
*/
@PostMapping("/uploadLogo")
@FunctionAccessAnnotation("uploadLogo")
public R<Void> upload(@Validated @ModelAttribute AppDeviceLogoUploadDto bo) {
MultipartFile file = bo.getFile();
if (file.getSize() > 1024 * 1024 * 2) {
return R.warn("图片不能大于2M");
}
appDeviceService.uploadDeviceLogo(bo);
return R.ok();
}
/**
* 批量上传设备logo图片
*/
@PostMapping("/batchUploadLogo")
@FunctionAccessAnnotation("batchUploadLogo")
public R<Void> batchUploadLogo(@Validated @ModelAttribute AppDeviceLogoUploadDto bo) {
MultipartFile file = bo.getFile();
if (file.getSize() > 1024 * 1024 * 2) {
return R.warn("图片不能大于2M");
}
appDeviceService.batchUploadLogo(bo);
return R.ok();
}
/**
* 灯光模式
* 0关灯1强光模式2弱光模式, 3爆闪模式, 4泛光模式
*/
// @FunctionAccessAnnotation("lightModeSettings")
@PostMapping("/lightModeSettings")
public R<Void> lightModeSettings(@RequestBody DeviceInstructDto params) {
// params 转 JSONObject
appDeviceService.lightModeSettings(params);
return R.ok();
}
/**
* 灯光亮度设置
*/
// @FunctionAccessAnnotation("lightBrightnessSettings")
@PostMapping("/lightBrightnessSettings")
public R<Void> lightBrightnessSettings(@RequestBody DeviceInstructDto params) {
appDeviceService.lightBrightnessSettings(params);
return R.ok();
}
/**
* 激光模式设置
*/
@PostMapping("/laserModeSettings")
// @FunctionAccessAnnotation("laserModeSettings")
public R<Void> laserModeSettings(@RequestBody DeviceInstructDto params) {
appDeviceService.laserModeSettings(params);
return R.ok();
}
}

View File

@ -69,8 +69,8 @@ public class DeviceBJQBizService {
if (device == null) { if (device == null) {
throw new ServiceException("设备不存在" + deviceId); throw new ServiceException("设备不存在" + deviceId);
} }
if(getDeviceStatus(device.getDeviceImei())){ if (getDeviceStatus(device.getDeviceImei())) {
throw new ServiceException(device.getDeviceName()+",设备已断开连接"); throw new ServiceException(device.getDeviceName() + ",设备已断开连接");
} }
try { try {
ClassPathResource resource = new ClassPathResource("image/background.png"); ClassPathResource resource = new ClassPathResource("image/background.png");
@ -78,26 +78,26 @@ public class DeviceBJQBizService {
byte[] largeData = ImageWithTextGenerate.generate160x80ImageWithText2(bo.getSendMsg(), inputStream, 25600); byte[] largeData = ImageWithTextGenerate.generate160x80ImageWithText2(bo.getSendMsg(), inputStream, 25600);
int[] ints = convertHexToDecimal(largeData); int[] ints = convertHexToDecimal(largeData);
RedisUtils.setCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + ":app_send_message_data" , Arrays.toString(ints), Duration.ofSeconds(5 * 60L)); RedisUtils.setCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + ":app_send_message_data", Arrays.toString(ints), Duration.ofSeconds(5 * 60L));
String data = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + ":app_send_message_data"); String data = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + ":app_send_message_data");
byte[] arr = ImageToCArrayConverter.convertStringToByteArray(data); byte[] arr = ImageToCArrayConverter.convertStringToByteArray(data);
byte[] specificChunk = ImageToCArrayConverter.getChunk(arr, 0, 512); byte[] specificChunk = ImageToCArrayConverter.getChunk(arr, 0, 512);
log.info("发送信息第0块数据大小: {} 字节",specificChunk.length); log.info("发送信息第0块数据大小: {} 字节", specificChunk.length);
ArrayList<Integer> intData = new ArrayList<>(); ArrayList<Integer> intData = new ArrayList<>();
intData.add(6); intData.add(6);
intData.add(1); intData.add(1);
ImageToCArrayConverter.buildArr(convertHexToDecimal(specificChunk),intData); ImageToCArrayConverter.buildArr(convertHexToDecimal(specificChunk), intData);
intData.add(0); intData.add(0);
intData.add(0); intData.add(0);
intData.add(0); intData.add(0);
intData.add(0); intData.add(0);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("instruct", intData); map.put("instruct", intData);
mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(), 1 , JSON.toJSONString(map)); mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), 1, JSON.toJSONString(map));
log.info("发送信息点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(),JSON.toJSONString(map)); log.info("发送信息点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), JSON.toJSONString(map));
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", deviceId) updateWrapper.eq("id", deviceId)
@ -106,10 +106,10 @@ public class DeviceBJQBizService {
recordDeviceLog(deviceId, device.getDeviceName(), "发送信息", bo.getSendMsg(), AppLoginHelper.getUserId()); recordDeviceLog(deviceId, device.getDeviceName(), "发送信息", bo.getSendMsg(), AppLoginHelper.getUserId());
} catch (Exception e) { } catch (Exception e) {
log.info("发送信息设备发送信息失败:{}" ,deviceId); log.info("发送信息设备发送信息失败:{}", deviceId);
throw new ServiceException("发送指令失败"); throw new ServiceException("发送指令失败");
} }
//发送消息 // 发送消息
messageSending(device.getDeviceImei()); messageSending(device.getDeviceImei());
} }
@ -119,11 +119,12 @@ public class DeviceBJQBizService {
/** /**
* 记录设备操作日志 * 记录设备操作日志
*
* @param deviceId 设备ID * @param deviceId 设备ID
* @param content 日志内容 * @param content 日志内容
* @param operator 操作人 * @param operator 操作人
*/ */
private void recordDeviceLog(Long deviceId,String deviceName, String deviceAction, String content, Long operator) { private void recordDeviceLog(Long deviceId, String deviceName, String deviceAction, String content, Long operator) {
try { try {
// 创建设备日志实体 // 创建设备日志实体
com.fuyuanshen.equipment.domain.DeviceLog deviceLog = new com.fuyuanshen.equipment.domain.DeviceLog(); com.fuyuanshen.equipment.domain.DeviceLog deviceLog = new com.fuyuanshen.equipment.domain.DeviceLog();
@ -171,62 +172,62 @@ public class DeviceBJQBizService {
AppPersonnelInfoVo personnelInfoVo = MapstructUtils.convert(appPersonnelInfo, AppPersonnelInfoVo.class); AppPersonnelInfoVo personnelInfoVo = MapstructUtils.convert(appPersonnelInfo, AppPersonnelInfoVo.class);
vo.setPersonnelInfo(personnelInfoVo); vo.setPersonnelInfo(personnelInfoVo);
} }
//设备在线状态 // 设备在线状态
String onlineStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei()+ DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX); String onlineStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX);
//设备在线状态 // 设备在线状态
if("1".equals(onlineStatus)){ if ("1".equals(onlineStatus)) {
vo.setOnlineStatus(1); vo.setOnlineStatus(1);
}else if("2".equals(onlineStatus)){ } else if ("2".equals(onlineStatus)) {
vo.setOnlineStatus(2); vo.setOnlineStatus(2);
}else{ } else {
vo.setOnlineStatus(0); vo.setOnlineStatus(0);
} }
String deviceStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_STATUS_KEY_PREFIX); String deviceStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_STATUS_KEY_PREFIX);
// 获取电量 // 获取电量
if(StringUtils.isNotBlank(deviceStatus)){ if (StringUtils.isNotBlank(deviceStatus)) {
JSONObject jsonObject = JSONObject.parseObject(deviceStatus); JSONObject jsonObject = JSONObject.parseObject(deviceStatus);
vo.setMainLightMode(jsonObject.getString("mainLightMode")); vo.setMainLightMode(jsonObject.getString("mainLightMode"));
vo.setLaserLightMode(jsonObject.getString("laserLightMode")); vo.setLaserLightMode(jsonObject.getString("laserLightMode"));
vo.setBatteryPercentage(jsonObject.getString("batteryPercentage")); vo.setBatteryPercentage(jsonObject.getString("batteryPercentage"));
vo.setChargeState(jsonObject.getString("chargeState")); vo.setChargeState(jsonObject.getString("chargeState"));
vo.setBatteryRemainingTime(jsonObject.getString("batteryRemainingTime")); vo.setBatteryRemainingTime(jsonObject.getString("batteryRemainingTime"));
}else{ } else {
vo.setBatteryPercentage("0"); vo.setBatteryPercentage("0");
} }
String lightModeStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LIGHT_MODE_KEY_PREFIX); String lightModeStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LIGHT_MODE_KEY_PREFIX);
// 获取电量 // 获取电量
if(StringUtils.isNotBlank(deviceStatus)){ if (StringUtils.isNotBlank(deviceStatus)) {
vo.setMainLightMode(lightModeStatus); vo.setMainLightMode(lightModeStatus);
} }
String lightBrightnessStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX); String lightBrightnessStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX);
if(StringUtils.isNotBlank(lightBrightnessStatus)){ if (StringUtils.isNotBlank(lightBrightnessStatus)) {
vo.setLightBrightness(lightBrightnessStatus); vo.setLightBrightness(lightBrightnessStatus);
} }
String laserLightMode = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LASER_MODE_KEY_PREFIX); String laserLightMode = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LASER_MODE_KEY_PREFIX);
if(StringUtils.isNotBlank(laserLightMode)){ if (StringUtils.isNotBlank(laserLightMode)) {
vo.setLaserLightMode(laserLightMode); vo.setLaserLightMode(laserLightMode);
} }
// 获取经度纬度 // 获取经度纬度
String locationKey = GlobalConstants.GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LOCATION_KEY_PREFIX; String locationKey = GlobalConstants.GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_LOCATION_KEY_PREFIX;
String locationInfo = RedisUtils.getCacheObject(locationKey); String locationInfo = RedisUtils.getCacheObject(locationKey);
if(StringUtils.isNotBlank(locationInfo)){ if (StringUtils.isNotBlank(locationInfo)) {
JSONObject jsonObject = JSONObject.parseObject(locationInfo); JSONObject jsonObject = JSONObject.parseObject(locationInfo);
vo.setLongitude(jsonObject.get("longitude").toString()); vo.setLongitude(jsonObject.get("longitude").toString());
vo.setLatitude(jsonObject.get("latitude").toString()); vo.setLatitude(jsonObject.get("latitude").toString());
vo.setAddress((String)jsonObject.get("address")); vo.setAddress((String) jsonObject.get("address"));
} }
String alarmStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY +DEVICE_KEY_PREFIX+ device.getDeviceImei()+ DEVICE_ALARM_KEY_PREFIX); String alarmStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DEVICE_ALARM_KEY_PREFIX);
if(StringUtils.isNotBlank(alarmStatus)){ if (StringUtils.isNotBlank(alarmStatus)) {
vo.setAlarmStatus(alarmStatus); vo.setAlarmStatus(alarmStatus);
} }
String lightBrightness = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY +DEVICE_KEY_PREFIX+ device.getDeviceImei()+ DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX); String lightBrightness = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DEVICE_LIGHT_BRIGHTNESS_KEY_PREFIX);
if(StringUtils.isNotBlank(lightBrightness)){ if (StringUtils.isNotBlank(lightBrightness)) {
vo.setLightBrightness(lightBrightness); vo.setLightBrightness(lightBrightness);
} }
@ -234,15 +235,14 @@ public class DeviceBJQBizService {
} }
public boolean registerPersonInfo(AppPersonnelInfoBo bo) { public boolean registerPersonInfo(AppPersonnelInfoBo bo) {
Long deviceId = bo.getDeviceId(); Long deviceId = bo.getDeviceId();
Device deviceObj = deviceMapper.selectById(deviceId); Device deviceObj = deviceMapper.selectById(deviceId);
if (deviceObj == null) { if (deviceObj == null) {
throw new RuntimeException("请先将设备入库!!!"); throw new RuntimeException("请先将设备入库!!!");
} }
if(getDeviceStatus(deviceObj.getDeviceImei())){ if (getDeviceStatus(deviceObj.getDeviceImei())) {
throw new ServiceException(deviceObj.getDeviceName()+",设备已断开连接"); throw new ServiceException(deviceObj.getDeviceName() + ",设备已断开连接");
} }
QueryWrapper<AppPersonnelInfo> qw = new QueryWrapper<AppPersonnelInfo>() QueryWrapper<AppPersonnelInfo> qw = new QueryWrapper<AppPersonnelInfo>()
.eq("device_id", deviceId); .eq("device_id", deviceId);
@ -266,7 +266,7 @@ public class DeviceBJQBizService {
map.put("instruct", intData); map.put("instruct", intData);
mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + deviceObj.getDeviceImei(), 1, JSON.toJSONString(map)); mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + deviceObj.getDeviceImei(), 1, JSON.toJSONString(map));
log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + deviceObj.getDeviceImei(), bo); log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + deviceObj.getDeviceImei(), bo);
String logContent = "单位:"+bo.getUnitName()+",职位:"+bo.getPosition()+",姓名:"+bo.getName()+",ID"+bo.getCode(); String logContent = "单位:" + bo.getUnitName() + ",职位:" + bo.getPosition() + ",姓名:" + bo.getName() + ",ID" + bo.getCode();
recordDeviceLog(deviceId, deviceObj.getDeviceName(), "人员信息登记", logContent, AppLoginHelper.getUserId()); recordDeviceLog(deviceId, deviceObj.getDeviceName(), "人员信息登记", logContent, AppLoginHelper.getUserId());
if (ObjectUtils.length(appPersonnelInfoVos) == 0) { if (ObjectUtils.length(appPersonnelInfoVos) == 0) {
AppPersonnelInfo appPersonnelInfo = MapstructUtils.convert(bo, AppPersonnelInfo.class); AppPersonnelInfo appPersonnelInfo = MapstructUtils.convert(bo, AppPersonnelInfo.class);
@ -297,6 +297,7 @@ public class DeviceBJQBizService {
} }
return true; return true;
} }
public void uploadDeviceLogo2(AppDeviceLogoUploadDto bo) { public void uploadDeviceLogo2(AppDeviceLogoUploadDto bo) {
try { try {
Device device = deviceMapper.selectById(bo.getDeviceId()); Device device = deviceMapper.selectById(bo.getDeviceId());
@ -322,25 +323,26 @@ public class DeviceBJQBizService {
// Map<String, Object> map = new HashMap<>(); // Map<String, Object> map = new HashMap<>();
// map.put("instruct", combinedData); // map.put("instruct", combinedData);
String[] specificChunk = ImageToCArrayConverter.getChunk2(hexArray, 0, bo.getChunkSize()); String[] specificChunk = ImageToCArrayConverter.getChunk2(hexArray, 0, bo.getChunkSize());
mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(), 1 , Arrays.toString(specificChunk)); mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), 1, Arrays.toString(specificChunk));
log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(),Arrays.toString(specificChunk)); log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), Arrays.toString(specificChunk));
recordDeviceLog(device.getId(), device.getDeviceName(), "上传开机画面", "上传开机画面", AppLoginHelper.getUserId()); recordDeviceLog(device.getId(), device.getDeviceName(), "上传开机画面", "上传开机画面", AppLoginHelper.getUserId());
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new ServiceException("发送指令失败"); throw new ServiceException("发送指令失败");
} }
} }
public void uploadDeviceLogo(AppDeviceLogoUploadDto bo) { public void uploadDeviceLogo(AppDeviceLogoUploadDto bo) {
try { try {
Device device = deviceMapper.selectById(bo.getDeviceId()); Device device = deviceMapper.selectById(bo.getDeviceId());
if (device == null) { if (device == null) {
throw new ServiceException("设备不存在"); throw new ServiceException("设备不存在");
} }
if(getDeviceStatus(device.getDeviceImei())){ if (getDeviceStatus(device.getDeviceImei())) {
// throw new ServiceException(device.getDeviceName()+",设备已断开连接"); // throw new ServiceException(device.getDeviceName()+",设备已断开连接");
log.info(device.getDeviceName()+",设备已断开连接"); log.info(device.getDeviceName() + ",设备已断开连接");
recordDeviceLog(device.getId(), device.getDeviceName(), "上传开机画面", device.getDeviceName()+",设备已断开连接", AppLoginHelper.getUserId()); recordDeviceLog(device.getId(), device.getDeviceName(), "上传开机画面", device.getDeviceName() + ",设备已断开连接", AppLoginHelper.getUserId());
return; return;
} }
MultipartFile file = bo.getFile(); MultipartFile file = bo.getFile();
@ -351,9 +353,9 @@ public class DeviceBJQBizService {
log.info("原始数据大小: {} 字节", largeData.length); log.info("原始数据大小: {} 字节", largeData.length);
int[] ints = convertHexToDecimal(largeData); int[] ints = convertHexToDecimal(largeData);
RedisUtils.setCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() +DEVICE_BOOT_LOGO_KEY_PREFIX, Arrays.toString(ints), Duration.ofSeconds(5 * 60L)); RedisUtils.setCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DEVICE_BOOT_LOGO_KEY_PREFIX, Arrays.toString(ints), Duration.ofSeconds(5 * 60L));
String data = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + device.getDeviceImei() + DEVICE_BOOT_LOGO_KEY_PREFIX); String data = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + device.getDeviceImei() + DEVICE_BOOT_LOGO_KEY_PREFIX);
byte[] arr = ImageToCArrayConverter.convertStringToByteArray(data); byte[] arr = ImageToCArrayConverter.convertStringToByteArray(data);
byte[] specificChunk = ImageToCArrayConverter.getChunk(arr, 0, 512); byte[] specificChunk = ImageToCArrayConverter.getChunk(arr, 0, 512);
@ -363,18 +365,18 @@ public class DeviceBJQBizService {
ArrayList<Integer> intData = new ArrayList<>(); ArrayList<Integer> intData = new ArrayList<>();
intData.add(3); intData.add(3);
intData.add(1); intData.add(1);
ImageToCArrayConverter.buildArr(convertHexToDecimal(specificChunk),intData); ImageToCArrayConverter.buildArr(convertHexToDecimal(specificChunk), intData);
intData.add(0); intData.add(0);
intData.add(0); intData.add(0);
intData.add(0); intData.add(0);
intData.add(0); intData.add(0);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("instruct", intData); map.put("instruct", intData);
mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(), 1 , JSON.toJSONString(map)); mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), 1, JSON.toJSONString(map));
log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(),JSON.toJSONString(map)); log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), JSON.toJSONString(map));
recordDeviceLog(device.getId(), device.getDeviceName(), "上传开机画面", "上传开机画面", AppLoginHelper.getUserId()); recordDeviceLog(device.getId(), device.getDeviceName(), "上传开机画面", "上传开机画面", AppLoginHelper.getUserId());
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new ServiceException("发送指令失败"); throw new ServiceException("发送指令失败");
} }
@ -389,13 +391,13 @@ public class DeviceBJQBizService {
try { try {
Long deviceId = params.getDeviceId(); Long deviceId = params.getDeviceId();
Device device = deviceMapper.selectById(deviceId); Device device = deviceMapper.selectById(deviceId);
if(device == null){ if (device == null) {
throw new ServiceException("设备不存在"); throw new ServiceException("设备不存在");
} }
if(getDeviceStatus(device.getDeviceImei())){ if (getDeviceStatus(device.getDeviceImei())) {
throw new ServiceException(device.getDeviceName()+",设备已断开连接"); throw new ServiceException(device.getDeviceName() + ",设备已断开连接");
} }
Integer instructValue = Integer.parseInt(params.getInstructValue()); Integer instructValue = Integer.parseInt(params.getInstructValue());
ArrayList<Integer> intData = new ArrayList<>(); ArrayList<Integer> intData = new ArrayList<>();
intData.add(1); intData.add(1);
intData.add(instructValue); intData.add(instructValue);
@ -404,26 +406,26 @@ public class DeviceBJQBizService {
intData.add(0); intData.add(0);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("instruct", intData); map.put("instruct", intData);
mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(), 1 , JSON.toJSONString(map)); mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), 1, JSON.toJSONString(map));
log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(),JSON.toJSONString(map)); log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), JSON.toJSONString(map));
LightModeEnum modeEnum = LightModeEnum.getByCode(instructValue); LightModeEnum modeEnum = LightModeEnum.getByCode(instructValue);
recordDeviceLog(device.getId(), device.getDeviceName(), "灯光模式", modeEnum!=null?modeEnum.getName():null, AppLoginHelper.getUserId()); recordDeviceLog(device.getId(), device.getDeviceName(), "灯光模式", modeEnum != null ? modeEnum.getName() : null, AppLoginHelper.getUserId());
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new ServiceException("发送指令失败"); throw new ServiceException("发送指令失败");
} }
} }
//灯光亮度设置 // 灯光亮度设置
public void lightBrightnessSettings(DeviceInstructDto params) { public void lightBrightnessSettings(DeviceInstructDto params) {
try { try {
Long deviceId = params.getDeviceId(); Long deviceId = params.getDeviceId();
Device device = deviceMapper.selectById(deviceId); Device device = deviceMapper.selectById(deviceId);
if(device == null){ if (device == null) {
throw new ServiceException("设备不存在"); throw new ServiceException("设备不存在");
} }
if(getDeviceStatus(device.getDeviceImei())){ if (getDeviceStatus(device.getDeviceImei())) {
throw new ServiceException(device.getDeviceName()+",设备已断开连接"); throw new ServiceException(device.getDeviceName() + ",设备已断开连接");
} }
String instructValue = params.getInstructValue(); String instructValue = params.getInstructValue();
ArrayList<Integer> intData = new ArrayList<>(); ArrayList<Integer> intData = new ArrayList<>();
@ -431,10 +433,10 @@ public class DeviceBJQBizService {
String[] values = instructValue.split("\\."); String[] values = instructValue.split("\\.");
String value1 = values[0]; String value1 = values[0];
String value2 = values[1]; String value2 = values[1];
if(StringUtils.isNoneBlank(value1)){ if (StringUtils.isNoneBlank(value1)) {
intData.add(Integer.parseInt(value1)); intData.add(Integer.parseInt(value1));
} }
if(StringUtils.isNoneBlank(value2)){ if (StringUtils.isNoneBlank(value2)) {
intData.add(Integer.parseInt(value2)); intData.add(Integer.parseInt(value2));
} }
intData.add(0); intData.add(0);
@ -442,25 +444,25 @@ public class DeviceBJQBizService {
intData.add(0); intData.add(0);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("instruct", intData); map.put("instruct", intData);
mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(), 1 , JSON.toJSONString(map)); mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), 1, JSON.toJSONString(map));
log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(),JSON.toJSONString(map)); log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), JSON.toJSONString(map));
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new ServiceException("发送指令失败"); throw new ServiceException("发送指令失败");
} }
} }
//激光模式设置 // 激光模式设置
public void laserModeSettings(DeviceInstructDto params) { public void laserModeSettings(DeviceInstructDto params) {
try { try {
Long deviceId = params.getDeviceId(); Long deviceId = params.getDeviceId();
Device device = deviceMapper.selectById(deviceId); Device device = deviceMapper.selectById(deviceId);
if(device == null){ if (device == null) {
throw new ServiceException("设备不存在"); throw new ServiceException("设备不存在");
} }
if(getDeviceStatus(device.getDeviceImei())){ if (getDeviceStatus(device.getDeviceImei())) {
throw new ServiceException(device.getDeviceName()+",设备已断开连接"); throw new ServiceException(device.getDeviceName() + ",设备已断开连接");
} }
Integer instructValue = Integer.parseInt(params.getInstructValue()); Integer instructValue = Integer.parseInt(params.getInstructValue());
ArrayList<Integer> intData = new ArrayList<>(); ArrayList<Integer> intData = new ArrayList<>();
@ -471,15 +473,15 @@ public class DeviceBJQBizService {
intData.add(0); intData.add(0);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("instruct", intData); map.put("instruct", intData);
mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(), 1 , JSON.toJSONString(map)); mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), 1, JSON.toJSONString(map));
log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(),JSON.toJSONString(map)); log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), JSON.toJSONString(map));
// 1代表开启激光灯此时主灯关闭主灯控件为关机状态为0代表关闭激光灯 // 1代表开启激光灯此时主灯关闭主灯控件为关机状态为0代表关闭激光灯
if("1".equals(params.getInstructValue())){ if ("1".equals(params.getInstructValue())) {
recordDeviceLog(device.getId(), device.getDeviceName(), "激光模式设置", "开启激光灯", AppLoginHelper.getUserId()); recordDeviceLog(device.getId(), device.getDeviceName(), "激光模式设置", "开启激光灯", AppLoginHelper.getUserId());
}else{ } else {
recordDeviceLog(device.getId(), device.getDeviceName(), "激光模式设置", "关闭激光灯", AppLoginHelper.getUserId()); recordDeviceLog(device.getId(), device.getDeviceName(), "激光模式设置", "关闭激光灯", AppLoginHelper.getUserId());
} }
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new ServiceException("发送指令失败"); throw new ServiceException("发送指令失败");
} }
@ -489,7 +491,7 @@ public class DeviceBJQBizService {
QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("device_imei", params.getDeviceImei()); queryWrapper.eq("device_imei", params.getDeviceImei());
List<Device> devices = deviceMapper.selectList(queryWrapper); List<Device> devices = deviceMapper.selectList(queryWrapper);
if(ObjectUtils.length( devices) ==0){ if (ObjectUtils.length(devices) == 0) {
throw new ServiceException("设备不存在"); throw new ServiceException("设备不存在");
} }
return RedisUtils.getCacheObject("device:location:" + devices.get(0).getDeviceImei()); return RedisUtils.getCacheObject("device:location:" + devices.get(0).getDeviceImei());
@ -507,8 +509,8 @@ public class DeviceBJQBizService {
if (device == null) { if (device == null) {
throw new ServiceException("设备不存在" + deviceId); throw new ServiceException("设备不存在" + deviceId);
} }
if(getDeviceStatus(device.getDeviceImei())){ if (getDeviceStatus(device.getDeviceImei())) {
throw new ServiceException(device.getDeviceName()+",设备已断开连接"); throw new ServiceException(device.getDeviceName() + ",设备已断开连接");
} }
try { try {
@ -521,39 +523,39 @@ public class DeviceBJQBizService {
intData.add(0); intData.add(0);
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("instruct", intData); map.put("instruct", intData);
mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(), 1 , JSON.toJSONString(map)); mqttGateway.sendMsgToMqtt(MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), 1, JSON.toJSONString(map));
log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY+device.getDeviceImei(),JSON.toJSONString(map)); log.info("发送点阵数据到设备消息=>topic:{},payload:{}", MqttConstants.GLOBAL_PUB_KEY + device.getDeviceImei(), JSON.toJSONString(map));
UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>(); UpdateWrapper<Device> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", deviceId) updateWrapper.eq("id", deviceId)
.set("send_msg", bo.getSendMsg()); .set("send_msg", bo.getSendMsg());
deviceMapper.update(updateWrapper); deviceMapper.update(updateWrapper);
if("0".equals(bo.getInstructValue())){ if ("0".equals(bo.getInstructValue())) {
recordDeviceLog(device.getId(), device.getDeviceName(), "解除告警信息", "关闭设备", AppLoginHelper.getUserId()); recordDeviceLog(device.getId(), device.getDeviceName(), "解除告警信息", "关闭设备", AppLoginHelper.getUserId());
}else{ } else {
recordDeviceLog(device.getId(), device.getDeviceName(), "发送告警信息", bo.getSendMsg(), AppLoginHelper.getUserId()); recordDeviceLog(device.getId(), device.getDeviceName(), "发送告警信息", bo.getSendMsg(), AppLoginHelper.getUserId());
} }
} catch (Exception e) { } catch (Exception e) {
log.info("设备发送告警信息信息失败:{}" ,deviceId); log.info("设备发送告警信息信息失败:{}", deviceId);
throw new ServiceException("设备发送告警信息信息失败"); throw new ServiceException("设备发送告警信息信息失败");
} }
messageSending(device.getDeviceImei()); messageSending(device.getDeviceImei());
} }
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
throw new ServiceException("发送告警信息指令失败"); throw new ServiceException("发送告警信息指令失败");
} }
return 1; return 1;
} }
private void messageSending(String deviceImei){ private void messageSending(String deviceImei) {
String sendMessageIng = GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX + deviceImei + ":messageSending"; String sendMessageIng = GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + deviceImei + ":messageSending";
RedisUtils.setCacheObject(sendMessageIng, "1", Duration.ofDays(1)); RedisUtils.setCacheObject(sendMessageIng, "1", Duration.ofDays(1));
} }
private boolean getDeviceStatus(String deviceImei) { private boolean getDeviceStatus(String deviceImei) {
String deviceOnlineStatusRedisKey = GlobalConstants.GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX+ deviceImei + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX ; String deviceOnlineStatusRedisKey = GlobalConstants.GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + deviceImei + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX;
return RedisUtils.getCacheObject(deviceOnlineStatusRedisKey) == null; return RedisUtils.getCacheObject(deviceOnlineStatusRedisKey) == null;
} }

View File

@ -59,8 +59,8 @@ public class DeviceBizService {
private final RealTimeStatusEngine realTimeStatusEngine; private final RealTimeStatusEngine realTimeStatusEngine;
private final DeviceLogMapper deviceLogMapper; private final DeviceLogMapper deviceLogMapper;
private final AppDeviceShareMapper appDeviceShareMapper; private final AppDeviceShareMapper appDeviceShareMapper;
private final AppUserMapper appUserMapper;; private final AppUserMapper appUserMapper;
;
public List<APPDeviceTypeVo> getTypeList() { public List<APPDeviceTypeVo> getTypeList() {
@ -84,37 +84,37 @@ public class DeviceBizService {
} }
Page<AppDeviceVo> result = deviceMapper.queryAppBindDeviceList(pageQuery.build(), bo); Page<AppDeviceVo> result = deviceMapper.queryAppBindDeviceList(pageQuery.build(), bo);
List<AppDeviceVo> records = result.getRecords(); List<AppDeviceVo> records = result.getRecords();
if(records != null && !records.isEmpty()){ if (records != null && !records.isEmpty()) {
records.forEach(item -> { records.forEach(item -> {
if(item.getCommunicationMode()!=null && item.getCommunicationMode() == 0){ if (item.getCommunicationMode() != null && item.getCommunicationMode() == 0) {
//设备在线状态 // 设备在线状态
String onlineStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX+ item.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX); String onlineStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + item.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX);
if("1".equals(onlineStatus)){ if ("1".equals(onlineStatus)) {
item.setOnlineStatus(1); item.setOnlineStatus(1);
}else if("2".equals(onlineStatus)){ } else if ("2".equals(onlineStatus)) {
item.setOnlineStatus(2); item.setOnlineStatus(2);
}else{ } else {
item.setOnlineStatus(0); item.setOnlineStatus(0);
} }
String deviceStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX+ item.getDeviceImei() + DEVICE_STATUS_KEY_PREFIX); String deviceStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + item.getDeviceImei() + DEVICE_STATUS_KEY_PREFIX);
// 获取电量 // 获取电量
if(StringUtils.isNotBlank(deviceStatus)){ if (StringUtils.isNotBlank(deviceStatus)) {
JSONObject jsonObject = JSONObject.parseObject(deviceStatus); JSONObject jsonObject = JSONObject.parseObject(deviceStatus);
item.setBattery(jsonObject.getString("batteryPercentage")); item.setBattery(jsonObject.getString("batteryPercentage"));
}else{ } else {
item.setBattery("0"); item.setBattery("0");
} }
String location = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY +DEVICE_KEY_PREFIX+ item.getDeviceImei()+ DEVICE_LOCATION_KEY_PREFIX); String location = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + item.getDeviceImei() + DEVICE_LOCATION_KEY_PREFIX);
if(StringUtils.isNotBlank(location)){ if (StringUtils.isNotBlank(location)) {
JSONObject jsonObject = JSONObject.parseObject(location); JSONObject jsonObject = JSONObject.parseObject(location);
item.setLatitude(jsonObject.getString("latitude")); item.setLatitude(jsonObject.getString("latitude"));
item.setLongitude(jsonObject.getString("longitude")); item.setLongitude(jsonObject.getString("longitude"));
} }
String alarmStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY +DEVICE_KEY_PREFIX+ item.getDeviceImei()+ DEVICE_ALARM_KEY_PREFIX); String alarmStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + item.getDeviceImei() + DEVICE_ALARM_KEY_PREFIX);
if(StringUtils.isNotBlank(alarmStatus)){ if (StringUtils.isNotBlank(alarmStatus)) {
item.setAlarmStatus(alarmStatus); item.setAlarmStatus(alarmStatus);
} }
} }
@ -126,11 +126,11 @@ public class DeviceBizService {
public TableDataInfo<WebDeviceVo> queryWebDeviceList(DeviceQueryCriteria bo, PageQuery pageQuery) { public TableDataInfo<WebDeviceVo> queryWebDeviceList(DeviceQueryCriteria bo, PageQuery pageQuery) {
Page<WebDeviceVo> result = deviceMapper.queryWebDeviceList(pageQuery.build(), bo); Page<WebDeviceVo> result = deviceMapper.queryWebDeviceList(pageQuery.build(), bo);
List<WebDeviceVo> records = result.getRecords(); List<WebDeviceVo> records = result.getRecords();
if(records != null && !records.isEmpty()){ if (records != null && !records.isEmpty()) {
records.forEach(item -> { records.forEach(item -> {
if(item.getCommunicationMode()!=null && Ints.asList(0, 2).contains(item.getCommunicationMode())){ if (item.getCommunicationMode() != null && Ints.asList(0, 2).contains(item.getCommunicationMode())) {
//设备在线状态 // 设备在线状态
// String onlineStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX+ item.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX); // String onlineStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX+ item.getDeviceImei() + DeviceRedisKeyConstants.DEVICE_ONLINE_STATUS_KEY_PREFIX);
// if("1".equals(onlineStatus)){ // if("1".equals(onlineStatus)){
// item.setOnlineStatus(1); // item.setOnlineStatus(1);
@ -139,24 +139,24 @@ public class DeviceBizService {
// }else{ // }else{
// item.setOnlineStatus(0); // item.setOnlineStatus(0);
// } // }
String deviceStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX+ item.getDeviceImei() + DEVICE_STATUS_KEY_PREFIX); String deviceStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + item.getDeviceImei() + DEVICE_STATUS_KEY_PREFIX);
// 获取电量 // 获取电量
if(StringUtils.isNotBlank(deviceStatus)){ if (StringUtils.isNotBlank(deviceStatus)) {
JSONObject jsonObject = JSONObject.parseObject(deviceStatus); JSONObject jsonObject = JSONObject.parseObject(deviceStatus);
item.setBattery(jsonObject.getString("batteryPercentage")); item.setBattery(jsonObject.getString("batteryPercentage"));
}else{ } else {
item.setBattery("0"); item.setBattery("0");
} }
String location = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY +DEVICE_KEY_PREFIX+ item.getDeviceImei()+ DEVICE_LOCATION_KEY_PREFIX); String location = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + item.getDeviceImei() + DEVICE_LOCATION_KEY_PREFIX);
if(StringUtils.isNotBlank(location)){ if (StringUtils.isNotBlank(location)) {
JSONObject jsonObject = JSONObject.parseObject(location); JSONObject jsonObject = JSONObject.parseObject(location);
item.setLatitude(jsonObject.getString("latitude")); item.setLatitude(jsonObject.getString("latitude"));
item.setLongitude(jsonObject.getString("longitude")); item.setLongitude(jsonObject.getString("longitude"));
} }
String alarmStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY +DEVICE_KEY_PREFIX+ item.getDeviceImei()+ DEVICE_ALARM_KEY_PREFIX); String alarmStatus = RedisUtils.getCacheObject(GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + item.getDeviceImei() + DEVICE_ALARM_KEY_PREFIX);
if(StringUtils.isNotBlank(alarmStatus)){ if (StringUtils.isNotBlank(alarmStatus)) {
item.setAlarmStatus(alarmStatus); item.setAlarmStatus(alarmStatus);
} }
} }
@ -165,6 +165,7 @@ public class DeviceBizService {
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
public int bindDevice(AppDeviceBo bo) { public int bindDevice(AppDeviceBo bo) {
Integer mode = bo.getCommunicationMode(); Integer mode = bo.getCommunicationMode();
Long userId = AppLoginHelper.getUserId(); Long userId = AppLoginHelper.getUserId();
@ -274,7 +275,7 @@ public class DeviceBizService {
if (count == 0) { if (count == 0) {
throw new RuntimeException("请先绑定设备!!!"); throw new RuntimeException("请先绑定设备!!!");
} }
if(count<2){ if (count < 2) {
UpdateWrapper<Device> deviceUpdateWrapper = new UpdateWrapper<>(); UpdateWrapper<Device> deviceUpdateWrapper = new UpdateWrapper<>();
deviceUpdateWrapper.eq("id", device.getId()) deviceUpdateWrapper.eq("id", device.getId())
.set("binding_user_id", null) .set("binding_user_id", null)
@ -291,7 +292,7 @@ public class DeviceBizService {
appDeviceBindRecordMapper.deleteById(appDeviceBindRecord.getId())); appDeviceBindRecordMapper.deleteById(appDeviceBindRecord.getId()));
} }
AppUserVo appUserVo = appUserMapper.selectVoById(userId); AppUserVo appUserVo = appUserMapper.selectVoById(userId);
if(appUserVo != null){ if (appUserVo != null) {
QueryWrapper<AppDeviceShare> appDeviceShareQueryWrapper = new QueryWrapper<>(); QueryWrapper<AppDeviceShare> appDeviceShareQueryWrapper = new QueryWrapper<>();
appDeviceShareQueryWrapper.eq("device_id", device.getId()); appDeviceShareQueryWrapper.eq("device_id", device.getId());
appDeviceShareQueryWrapper.eq("phonenumber", appUserVo.getPhonenumber()); appDeviceShareQueryWrapper.eq("phonenumber", appUserVo.getPhonenumber());
@ -301,7 +302,7 @@ public class DeviceBizService {
appDeviceShareMapper.deleteById(appDeviceShare.getId())); appDeviceShareMapper.deleteById(appDeviceShare.getId()));
} }
} }
}else{ } else {
QueryWrapper<AppDeviceBindRecord> bindRecordQueryWrapper = new QueryWrapper<>(); QueryWrapper<AppDeviceBindRecord> bindRecordQueryWrapper = new QueryWrapper<>();
bindRecordQueryWrapper.eq("device_id", device.getId()); bindRecordQueryWrapper.eq("device_id", device.getId());
Long count = appDeviceBindRecordMapper.selectCount(bindRecordQueryWrapper); Long count = appDeviceBindRecordMapper.selectCount(bindRecordQueryWrapper);
@ -341,7 +342,7 @@ public class DeviceBizService {
QueryWrapper<Device> queryWrapper = new QueryWrapper<>(); QueryWrapper<Device> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("device_imei", params.getDeviceImei()); queryWrapper.eq("device_imei", params.getDeviceImei());
List<Device> devices = deviceMapper.selectList(queryWrapper); List<Device> devices = deviceMapper.selectList(queryWrapper);
if(ObjectUtils.length( devices) ==0){ if (ObjectUtils.length(devices) == 0) {
throw new ServiceException("设备不存在"); throw new ServiceException("设备不存在");
} }
return RedisUtils.getCacheObject("device:location:" + devices.get(0).getDeviceImei()); return RedisUtils.getCacheObject("device:location:" + devices.get(0).getDeviceImei());
@ -350,12 +351,12 @@ public class DeviceBizService {
public Map<String, Object> getRealTimeStatus(AppRealTimeStatusDto statusDto) { public Map<String, Object> getRealTimeStatus(AppRealTimeStatusDto statusDto) {
try { try {
// String commandType = statusDto.getTypeName()+"_" + statusDto.getFunctionMode();"FunctionAccessBatchStatusRule" // String commandType = statusDto.getTypeName()+"_" + statusDto.getFunctionMode();"FunctionAccessBatchStatusRule"
DeviceStatusRule rule = realTimeStatusEngine.getDeviceStatusRule(statusDto.getTypeName()); DeviceStatusRule rule = realTimeStatusEngine.getDeviceStatusRule(statusDto.getTypeName());
if(rule == null){ if (rule == null) {
throw new ServiceException("未匹配到处理命令"); throw new ServiceException("未匹配到处理命令");
} }
return rule.getStatus(statusDto); return rule.getStatus(statusDto);
} catch (Exception e){ } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
return null; return null;
@ -393,7 +394,7 @@ public class DeviceBizService {
long endTime = today.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); long endTime = today.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
String deviceImei = device.getDeviceImei(); String deviceImei = device.getDeviceImei();
String a = GLOBAL_REDIS_KEY+ DEVICE_KEY_PREFIX+ deviceImei + DEVICE_LOCATION_KEY_PREFIX + ":history"; String a = GLOBAL_REDIS_KEY + DEVICE_KEY_PREFIX + deviceImei + DEVICE_LOCATION_KEY_PREFIX + ":history";
Collection<String> list = RedisUtils.zRangeByScoreDesc(a, startTime, endTime); Collection<String> list = RedisUtils.zRangeByScoreDesc(a, startTime, endTime);
if (CollectionUtil.isEmpty(list)) { if (CollectionUtil.isEmpty(list)) {
return null; return null;
@ -401,12 +402,12 @@ public class DeviceBizService {
Map<String, List<JSONObject>> map = new LinkedHashMap<>(); Map<String, List<JSONObject>> map = new LinkedHashMap<>();
for (String obj : list){ for (String obj : list) {
JSONObject jsonObject = JSONObject.parseObject(obj); JSONObject jsonObject = JSONObject.parseObject(obj);
Long timestamp = jsonObject.getLong("timestamp"); Long timestamp = jsonObject.getLong("timestamp");
LocalDate date = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault()).toLocalDate(); LocalDate date = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.systemDefault()).toLocalDate();
String address = jsonObject.getString("address"); String address = jsonObject.getString("address");
if(StringUtils.isBlank( address) || "[]".equals(address)){ if (StringUtils.isBlank(address) || "[]".equals(address)) {
continue; continue;
} }
if (map.containsKey(date.toString())) { if (map.containsKey(date.toString())) {
@ -424,7 +425,7 @@ public class DeviceBizService {
detailVo.setDate(entry.getKey()); detailVo.setDate(entry.getKey());
detailVo.setDeviceName(device.getDeviceName()); detailVo.setDeviceName(device.getDeviceName());
detailVo.setStartLocation(entry.getValue().get(0).getString("address")); detailVo.setStartLocation(entry.getValue().get(0).getString("address"));
detailVo.setEndLocation(entry.getValue().get(entry.getValue().size()-1).getString("address")); detailVo.setEndLocation(entry.getValue().get(entry.getValue().size() - 1).getString("address"));
String jsonString = JSONArray.toJSONString(entry.getValue()); String jsonString = JSONArray.toJSONString(entry.getValue());
List<Object> strings = JSONArray.parseArray(jsonString); List<Object> strings = JSONArray.parseArray(jsonString);
detailVo.setDetailList(strings); detailVo.setDetailList(strings);

View File

@ -58,7 +58,6 @@ public class WebDeviceVo implements Serializable {
*/ */
private Integer deviceStatus; private Integer deviceStatus;
/**绑定状态 /**绑定状态
* 0 未绑定 * 0 未绑定
* 1 已绑定 * 1 已绑定