From 81e5429ee9b512a69e623a174d86cc2cadcef3f6 Mon Sep 17 00:00:00 2001 From: mi9688 Date: Tue, 10 Dec 2024 09:13:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E5=A4=87=E4=B8=8A=E7=94=B5=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E5=9F=BA=E6=9C=AC=E4=BF=A1=E6=81=AF=E4=B8=8A=E6=8A=A5?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E9=80=BB=E8=BE=91=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/core/domain/AjaxResultPro.java | 210 ++++++++++++++++++ .../framework/config/SecurityConfig.java | 1 + .../data/controller/gis/mqtt/MqttTest.java | 37 +++ .../sse/DeviceReportSSEController.java | 75 +++++++ .../fastbee/data/controller/sse/Message.java | 16 ++ .../fastbee/iot/domain/DeviceReportInfo.java | 78 ++++--- .../impl/DeviceReportInfoServiceImpl.java | 4 + .../mapper/iot/DeviceReportInfoMapper.xml | 12 +- .../service/impl/ProjectServiceImpl.java | 1 - 9 files changed, 398 insertions(+), 36 deletions(-) create mode 100644 fastbee-common/src/main/java/com/fastbee/common/core/domain/AjaxResultPro.java create mode 100644 fastbee-open-api/src/main/java/com/fastbee/data/controller/gis/mqtt/MqttTest.java create mode 100644 fastbee-open-api/src/main/java/com/fastbee/data/controller/sse/DeviceReportSSEController.java create mode 100644 fastbee-open-api/src/main/java/com/fastbee/data/controller/sse/Message.java diff --git a/fastbee-common/src/main/java/com/fastbee/common/core/domain/AjaxResultPro.java b/fastbee-common/src/main/java/com/fastbee/common/core/domain/AjaxResultPro.java new file mode 100644 index 0000000..5aeb1f4 --- /dev/null +++ b/fastbee-common/src/main/java/com/fastbee/common/core/domain/AjaxResultPro.java @@ -0,0 +1,210 @@ +package com.fastbee.common.core.domain; + +import com.fastbee.common.constant.HttpStatus; +import com.fastbee.common.utils.StringUtils; + +import java.util.HashMap; + +/** + * 操作消息提醒 + * + * @author ruoyi + */ +public class AjaxResultPro extends HashMap +{ + private static final long serialVersionUID = 1L; + + /** 状态码 */ + public static final String CODE_TAG = "code"; + + /** 返回内容 */ + public static final String MSG_TAG = "msg"; + + /** 数据对象 */ + public static final String DATA_TAG = "data"; + + /** + * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。 + */ + public AjaxResultPro() + { + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + */ + public AjaxResultPro(int code, String msg) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + } + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + * @param data 数据对象 + */ + public AjaxResultPro(int code, String msg, Object data) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + super.put(DATA_TAG, data); + } + + + /** + * 初始化一个新创建的 AjaxResult 对象 + * + * @param code 状态码 + * @param msg 返回内容 + * @param data 数据对象 + */ + public AjaxResultPro(int code, String msg, Object data, int total) + { + super.put(CODE_TAG, code); + super.put(MSG_TAG, msg); + + super.put(DATA_TAG, data); + super.put("total",total); + } + + /** + * 返回成功消息 + * + * @return 成功消息 + */ + public static AjaxResultPro success() + { + return AjaxResultPro.success("操作成功"); + } + + /** + * 返回成功数据 + * + * @return 成功消息 + */ + public static AjaxResultPro success(Object data) + { + return AjaxResultPro.success("操作成功", data); + } + + /** + * 返回成功数据 + * + * @return 成功消息 + */ + public static AjaxResultPro success(Object data, int total) + { + return new AjaxResultPro(HttpStatus.SUCCESS, "操作成功", data,total); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @return 成功消息 + */ + public static AjaxResultPro success(String msg) + { + return AjaxResultPro.success(msg, null); + } + + /** + * 返回成功消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 成功消息 + */ + public static AjaxResultPro success(String msg, Object data) + { + return new AjaxResultPro(HttpStatus.SUCCESS, msg, data); + } + + /** + * 返回警告消息 + * + * @param msg 返回内容 + * @return 警告消息 + */ + public static AjaxResultPro warn(String msg) + { + return AjaxResultPro.warn(msg, null); + } + + /** + * 返回警告消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 警告消息 + */ + public static AjaxResultPro warn(String msg, Object data) + { + return new AjaxResultPro(HttpStatus.WARN, msg, data); + } + + /** + * 返回错误消息 + * + * @return 错误消息 + */ + public static AjaxResultPro error() + { + return AjaxResultPro.error("操作失败"); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @return 错误消息 + */ + public static AjaxResultPro error(String msg) + { + return AjaxResultPro.error(msg, null); + } + + /** + * 返回错误消息 + * + * @param msg 返回内容 + * @param data 数据对象 + * @return 错误消息 + */ + public static AjaxResultPro error(String msg, Object data) + { + return new AjaxResultPro(HttpStatus.ERROR, msg, data); + } + + /** + * 返回错误消息 + * + * @param code 状态码 + * @param msg 返回内容 + * @return 错误消息 + */ + public static AjaxResultPro error(int code, String msg) + { + return new AjaxResultPro(code, msg, null); + } + + /** + * 方便链式调用 + * + * @param key 键 + * @param value 值 + * @return 数据对象 + */ + @Override + public AjaxResultPro put(String key, Object value) + { + super.put(key, value); + return this; + } +} diff --git a/fastbee-framework/src/main/java/com/fastbee/framework/config/SecurityConfig.java b/fastbee-framework/src/main/java/com/fastbee/framework/config/SecurityConfig.java index c4dd17b..8fa1074 100644 --- a/fastbee-framework/src/main/java/com/fastbee/framework/config/SecurityConfig.java +++ b/fastbee-framework/src/main/java/com/fastbee/framework/config/SecurityConfig.java @@ -133,6 +133,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers("/test/**/*").permitAll() .antMatchers("/prod-api/**").permitAll() .antMatchers("/system/district/tree").permitAll() + .antMatchers("/sse/**").permitAll() // 除上面外的所有请求全部需要鉴权认证 .anyRequest().authenticated() diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/controller/gis/mqtt/MqttTest.java b/fastbee-open-api/src/main/java/com/fastbee/data/controller/gis/mqtt/MqttTest.java new file mode 100644 index 0000000..3102826 --- /dev/null +++ b/fastbee-open-api/src/main/java/com/fastbee/data/controller/gis/mqtt/MqttTest.java @@ -0,0 +1,37 @@ +package com.fastbee.data.controller.gis.mqtt; + +import com.fastbee.mqttclient.PubMqttCallBack; +import com.fastbee.mqttclient.PubMqttClient; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/mqtt") +public class MqttTest { + + @Autowired + private PubMqttClient pubMqttClient; + + @Autowired + private PubMqttCallBack pubMqttCallBack; + + /** + * 测试平台mqtt发布消息 + */ + @GetMapping("/publish") + public String test(){ + pubMqttClient.publish(1,true,"/topic/test","mqtt测试主题发布消息!"); + return "test"; + } + /** + * 测试创建mqtt客户端 + */ + @GetMapping("/subscribe") + public String test2(){ +// pubMqttClient + return "test2"; + } + +} diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/controller/sse/DeviceReportSSEController.java b/fastbee-open-api/src/main/java/com/fastbee/data/controller/sse/DeviceReportSSEController.java new file mode 100644 index 0000000..c33a812 --- /dev/null +++ b/fastbee-open-api/src/main/java/com/fastbee/data/controller/sse/DeviceReportSSEController.java @@ -0,0 +1,75 @@ +package com.fastbee.data.controller.sse; + +import cn.hutool.json.JSONUtil; +import com.fastbee.common.core.controller.BaseController; +import com.fastbee.common.core.domain.AjaxResult; +import com.fastbee.common.core.domain.AjaxResultPro; +import com.fastbee.iot.domain.DeviceReportInfo; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; +import java.io.IOException; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +@RestController +@RequestMapping("/sse") +@Slf4j +@CrossOrigin(origins = "*") +public class DeviceReportSSEController extends BaseController { + private final Map emitters = new ConcurrentHashMap<>();//用户消息推送集合 + + /** + * 与客户端建立http长链接 + */ + @PostMapping(value = "/device/init",produces = MediaType.TEXT_EVENT_STREAM_VALUE) + public SseEmitter getReport() throws IOException { + SseEmitter emitter= new SseEmitter(0L); + emitters.put("device-init",emitter); + emitter.send(JSONUtil.toJsonStr(Message.builder().event(1).content("连接成功!").build())); + return emitter; + } + + @PostMapping("/device/init/new") + public AjaxResultPro sendMsg(@RequestBody DeviceReportInfo reportInfo) { + try{ + SseEmitter emitter = emitters.get("device-init"); + if(emitter==null){ + return AjaxResultPro.error("审核员离线!请到管理后台打开设备初始化页面!"); + } + emitter.send(JSONUtil.toJsonStr(Message.builder().event(2).content("新的消息").data(reportInfo).build())); + return AjaxResultPro.success(); + }catch (Exception e){ + log.error("发送消息失败",e); + return AjaxResultPro.error("系统错误!"); + } + } + + @PostMapping("/device/init/new/remove") + public AjaxResultPro removeMsg() { + emitters.clear(); + return AjaxResultPro.success(); + } + + @PostMapping("/device/init/new/text") + public void sendMsgText(@RequestBody DeviceReportInfo reportInfo) throws IOException { + SseEmitter emitter = emitters.get("device-init"); + DeviceReportInfo deviceReportInfo = new DeviceReportInfo(); + deviceReportInfo.setImei("10086"); + deviceReportInfo.setIccid("10086"); + deviceReportInfo.setMcuId("wqewqewq"); + deviceReportInfo.setBspType("iwqjriqw"); + deviceReportInfo.setLteType("rui"); + deviceReportInfo.setMcuType("mcu"); + deviceReportInfo.setMcuFw("1.0.0"); + deviceReportInfo.setLteFw("opodaojdao"); + deviceReportInfo.setLcdManufacturer(1L); + deviceReportInfo.setVoiceManufacturer(1L); + deviceReportInfo.setFramModel("BTOOO"); + deviceReportInfo.setReplaceManufacturer(1L); + deviceReportInfo.setTestRecord("test"); + if(emitter!=null){ + emitter.send(JSONUtil.toJsonStr(Message.builder().event(2).content("新的消息").data(deviceReportInfo).build())); + } + } +} diff --git a/fastbee-open-api/src/main/java/com/fastbee/data/controller/sse/Message.java b/fastbee-open-api/src/main/java/com/fastbee/data/controller/sse/Message.java new file mode 100644 index 0000000..8af271e --- /dev/null +++ b/fastbee-open-api/src/main/java/com/fastbee/data/controller/sse/Message.java @@ -0,0 +1,16 @@ +package com.fastbee.data.controller.sse; + +import com.fastbee.iot.domain.DeviceReportInfo; +import lombok.Builder; +import lombok.Data; + +/** + * @author mijiupro + */ +@Data +@Builder +public class Message { + private String content; + private Integer event; + private DeviceReportInfo data; +} diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/DeviceReportInfo.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/DeviceReportInfo.java index 5fa3bd5..add5695 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/DeviceReportInfo.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/domain/DeviceReportInfo.java @@ -13,86 +13,96 @@ import com.fastbee.common.core.domain.BaseEntity; * 设备上电审核前上报的基础信息对象 iot_device_report_info * * @author kerwincui - * @date 2024-12-05 + * @date 2024-12-09 */ @ApiModel(value = "DeviceReportInfo",description = "设备上电审核前上报的基础信息 iot_device_report_info") @Data @EqualsAndHashCode(callSuper = true) public class DeviceReportInfo extends BaseEntity - { -private static final long serialVersionUID = 1L; +{ + private static final long serialVersionUID = 1L; - /** $column.columnComment */ + /** */ private Long id; /** 模组IMEI号 */ - @Excel(name = "模组IMEI号") - @ApiModelProperty("模组IMEI号") + @Excel(name = "模组IMEI号") + @ApiModelProperty("模组IMEI号") private String imei; /** 流量卡iccid */ - @Excel(name = "流量卡iccid") - @ApiModelProperty("流量卡iccid") + @Excel(name = "流量卡iccid") + @ApiModelProperty("流量卡iccid") private String iccid; /** MCU唯一id */ - @Excel(name = "MCU唯一id") - @ApiModelProperty("MCU唯一id") + @Excel(name = "MCU唯一id") + @ApiModelProperty("MCU唯一id") private String mcuId; /** 硬件板型 */ - @Excel(name = "硬件板型") - @ApiModelProperty("硬件板型") + @Excel(name = "硬件板型") + @ApiModelProperty("硬件板型") private String bspType; /** 模组型号 */ - @Excel(name = "模组型号") - @ApiModelProperty("模组型号") + @Excel(name = "模组型号") + @ApiModelProperty("模组型号") private String lteType; /** MCU型号 */ - @Excel(name = "MCU型号") - @ApiModelProperty("MCU型号") + @Excel(name = "MCU型号") + @ApiModelProperty("MCU型号") private String mcuType; /** MCU固件,包含了固件的名称和版本 */ - @Excel(name = "MCU固件,包含了固件的名称和版本") - @ApiModelProperty("MCU固件,包含了固件的名称和版本") + @Excel(name = "MCU固件,包含了固件的名称和版本") + @ApiModelProperty("MCU固件,包含了固件的名称和版本") private String mcuFw; /** 模组固件,包含了固件的名称和版本 */ - @Excel(name = "模组固件,包含了固件的名称和版本") - @ApiModelProperty("模组固件,包含了固件的名称和版本") + @Excel(name = "模组固件,包含了固件的名称和版本") + @ApiModelProperty("模组固件,包含了固件的名称和版本") private String lteFw; /** 显示屏厂家,上报1,2,3等类似的数值,通过后台进行录入数值和显示屏厂家对应关系例:1对应GT2116 */ - @Excel(name = "显示屏厂家,上报1,2,3等类似的数值,通过后台进行录入数值和显示屏厂家对应关系例:1对应GT2116") - @ApiModelProperty("显示屏厂家,上报1,2,3等类似的数值,通过后台进行录入数值和显示屏厂家对应关系例:1对应GT2116") + @Excel(name = "显示屏厂家,上报1,2,3等类似的数值,通过后台进行录入数值和显示屏厂家对应关系例:1对应GT2116") + @ApiModelProperty("显示屏厂家,上报1,2,3等类似的数值,通过后台进行录入数值和显示屏厂家对应关系例:1对应GT2116") private Long lcdManufacturer; /** 语音厂家,上报1,2,3等类似的数值,通过后台进行录入数值和语音厂家对应关系例:1对应 */ - @Excel(name = "语音厂家,上报1,2,3等类似的数值,通过后台进行录入数值和语音厂家对应关系例:1对应") - @ApiModelProperty("语音厂家,上报1,2,3等类似的数值,通过后台进行录入数值和语音厂家对应关系例:1对应") + @Excel(name = "语音厂家,上报1,2,3等类似的数值,通过后台进行录入数值和语音厂家对应关系例:1对应") + @ApiModelProperty("语音厂家,上报1,2,3等类似的数值,通过后台进行录入数值和语音厂家对应关系例:1对应") private Long voiceManufacturer; /** FRAM型号 */ - @Excel(name = "FRAM型号") - @ApiModelProperty("FRAM型号") + @Excel(name = "FRAM型号") + @ApiModelProperty("FRAM型号") private String framModel; /** 代工厂家,上报1,2,3等类似的数值,通过后台进行录入数值和代工厂家对应关系例:1对应 */ - @Excel(name = "代工厂家,上报1,2,3等类似的数值,通过后台进行录入数值和代工厂家对应关系例:1对应") - @ApiModelProperty("代工厂家,上报1,2,3等类似的数值,通过后台进行录入数值和代工厂家对应关系例:1对应") + @Excel(name = "代工厂家,上报1,2,3等类似的数值,通过后台进行录入数值和代工厂家对应关系例:1对应") + @ApiModelProperty("代工厂家,上报1,2,3等类似的数值,通过后台进行录入数值和代工厂家对应关系例:1对应") private Long replaceManufacturer; /** 记录测试的过程,包括了测试脉冲次数、第一次上电时间等待补充信息 */ - @Excel(name = "记录测试的过程,包括了测试脉冲次数、第一次上电时间等待补充信息") - @ApiModelProperty("记录测试的过程,包括了测试脉冲次数、第一次上电时间等待补充信息") + @Excel(name = "记录测试的过程,包括了测试脉冲次数、第一次上电时间等待补充信息") + @ApiModelProperty("记录测试的过程,包括了测试脉冲次数、第一次上电时间等待补充信息") private String testRecord; - /** 批号 */ - @Excel(name = "批号") - @ApiModelProperty("批号") - private Long batchNumber; + /** 批号 */ + @Excel(name = "批号") + @ApiModelProperty("批号") + private Long batchNumber; + + /** 设备编号 */ + @Excel(name = "设备编号") + @ApiModelProperty("设备编号") + private String serialNumber; + + /** 二维码 */ + @Excel(name = "二维码") + @ApiModelProperty("二维码") + private String qrCode; } diff --git a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceReportInfoServiceImpl.java b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceReportInfoServiceImpl.java index f7c3a60..5be348d 100644 --- a/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceReportInfoServiceImpl.java +++ b/fastbee-service/fastbee-iot-service/src/main/java/com/fastbee/iot/service/impl/DeviceReportInfoServiceImpl.java @@ -19,6 +19,10 @@ public class DeviceReportInfoServiceImpl implements IDeviceReportInfoService @Autowired private DeviceReportInfoMapper deviceReportInfoMapper; + + + + /** * 查询设备上电审核前上报的基础信息 * diff --git a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/DeviceReportInfoMapper.xml b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/DeviceReportInfoMapper.xml index 6274c31..054dca8 100644 --- a/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/DeviceReportInfoMapper.xml +++ b/fastbee-service/fastbee-iot-service/src/main/resources/mapper/iot/DeviceReportInfoMapper.xml @@ -20,10 +20,12 @@ + + - select id, imei, iccid, mcu_id, bsp_type, lte_type, mcu_type, mcu_fw, lte_fw, lcd_manufacturer, voice_manufacturer, fram_model, replace_manufacturer, test_record, batch_number from iot_device_report_info + select id, imei, iccid, mcu_id, bsp_type, lte_type, mcu_type, mcu_fw, lte_fw, lcd_manufacturer, voice_manufacturer, fram_model, replace_manufacturer, test_record, batch_number, serial_number, qr_code from iot_device_report_info @@ -68,6 +72,8 @@ replace_manufacturer, test_record, batch_number, + serial_number, + qr_code, #{imei}, @@ -84,6 +90,8 @@ #{replaceManufacturer}, #{testRecord}, #{batchNumber}, + #{serialNumber}, + #{qrCode}, @@ -104,6 +112,8 @@ replace_manufacturer = #{replaceManufacturer}, test_record = #{testRecord}, batch_number = #{batchNumber}, + serial_number = #{serialNumber}, + qr_code = #{qrCode}, where id = #{id} diff --git a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java index ef9cb93..be7489b 100644 --- a/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java +++ b/fastbee-service/fastbee-project-service/src/main/java/com/fastbee/project/service/impl/ProjectServiceImpl.java @@ -69,7 +69,6 @@ public class ProjectServiceImpl implements IProjectService this.toolService = toolService; } - /** * 根据主键查询项目 *