Jelajahi Sumber

Merge remote-tracking branch 'origin/master'

李进 2 tahun lalu
induk
melakukan
0bcf0a01f6

+ 83 - 0
device-api-service-merc-mini/src/main/java/com/xy/controller/MercMiniDeviceEventController.java

@@ -0,0 +1,83 @@
+package com.xy.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
+import cn.hutool.core.util.BooleanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.xy.annotate.RestMappingController;
+import com.xy.dto.DeviceEventMsgDto;
+import com.xy.entity.DeviceEventMsg;
+import com.xy.entity.SysCodeConfigureRedis;
+import com.xy.error.CommRuntimeException;
+import com.xy.service.DeviceEventMsgServiceImpl;
+import com.xy.utils.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import static com.xy.utils.PlusBeans.toIPage;
+import static com.xy.utils.PlusBeans.toPageBean;
+
+
+@RestMappingController("merc-mini/device-event")
+@AllArgsConstructor
+@Api(tags = "小程序-设备事件")
+public class MercMiniDeviceEventController {
+
+    private DeviceEventMsgServiceImpl deviceEventMsgService;
+
+    @ApiOperation("设备事件分页")
+    @PostMapping("page")
+    public R<PageBean<DeviceEventMsgDto.Vo>> page(@RequestBody DeviceEventMsgDto.Page page) {
+        Long deviceId = page.getDeviceId();
+        if (deviceId == null) {
+            throw new CommRuntimeException("设备ID不可为空!");
+        }
+        PageBean<DeviceEventMsgDto.Vo> voPageBean = new PageBean<>();
+        Long mercId = MercAuthUtils.getMercId();
+        page.setMercId(mercId);
+        ArrayList<String> deviceCodes = CollUtil.newArrayList("D01", "M01");
+        Map<String, SysCodeConfigureRedis> deviceCodeMap = MapUtil.newHashMap();
+        deviceCodes.forEach(code -> {
+            Map<String, SysCodeConfigureRedis> childrenByParentCode = SysCodeConfigureUtils.getChildrenByParentCode(code);
+            deviceCodeMap.putAll(childrenByParentCode);
+        });
+        //获取可展示给商户的设备事件
+        List<String> codes = new ArrayList<>();
+        deviceCodeMap.forEach((k, v) -> {
+            String expand = v.getExpand();
+            if (StrUtil.isNotEmpty(expand)) {
+                Boolean expShow2Merc = SysCodeConfigureUtils.getExpShow2Merc(expand);
+                if (BooleanUtil.isTrue(expShow2Merc)) {
+                    codes.add(k);
+                }
+            }
+        });
+
+        if (CollUtil.isEmpty(codes)) {
+            //没有可展示给商户看的内容
+            return R.ok(voPageBean);
+        }
+
+        PageBean pageBean = page.getPage();
+        LambdaQueryWrapper<DeviceEventMsg> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, DeviceEventMsg.class)
+                .in(DeviceEventMsg::getCode, codes)
+                .build()
+                .ge(ObjectUtil.isNotEmpty(page.getBeginCreateTime()), DeviceEventMsg::getCreateTime, page.getBeginCreateTime())
+                .le(ObjectUtil.isNotEmpty(page.getEndCreateTime()), DeviceEventMsg::getCreateTime, page.getEndCreateTime())
+                .orderByDesc(!Emptys.check(pageBean.getOrders()), DeviceEventMsg::getCreateTime);
+        IPage<DeviceEventMsg> iPage = deviceEventMsgService.page(toIPage(pageBean), lambdaQueryWrapper);
+        voPageBean = toPageBean(DeviceEventMsgDto.Vo.class, iPage);
+        return R.ok(voPageBean);
+    }
+
+}

+ 37 - 15
device-api-service/src/main/java/com/xy/consumer/device/push/msg/DevicePushMsgConsumer.java

@@ -20,6 +20,7 @@ import com.xy.entity.DeviceInfo;
 import com.xy.entity.SysCodeConfigureRedis;
 import com.xy.enums.ChannelType;
 import com.xy.enums.MsgType;
+import com.xy.enums.SysCodeConfigureEnum;
 import com.xy.service.*;
 import com.xy.service.be.MercFeignService;
 import com.xy.utils.R;
@@ -63,7 +64,23 @@ public class DevicePushMsgConsumer implements MqttConsumer {
             Long mercId = deviceEventMsg.getMercId();
             LocalDateTime createTime = deviceEventMsg.getCreateTime();
             String msg = deviceEventMsg.getMsg();
-            SysCodeConfigureRedis sysCodeConfigureRedis = SysCodeConfigureUtils.get(deviceEventMsg.getCode());
+            String code = deviceEventMsg.getCode();
+            SysCodeConfigureRedis sysCodeConfigureRedis = SysCodeConfigureUtils.get(code);
+            String expand = sysCodeConfigureRedis.getExpand();
+            if (StrUtil.isEmpty(expand)) {
+                return true;
+            }
+            String paterCode = sysCodeConfigureRedis.getPaterCode();
+            SysCodeConfigureEnum sysCodeConfigureEnum = SysCodeConfigureEnum.valueOf(paterCode);
+            String eventType = sysCodeConfigureEnum.getMsg();
+            String title = sysCodeConfigureRedis.getTitle();
+            //是否展示给商户
+            boolean expShow2Merc = SysCodeConfigureUtils.getExpShow2Merc(expand);
+            //是否推送给商户
+            boolean expPush2Merc = SysCodeConfigureUtils.getExpPush2Merc(expand);
+            //是否推送时间段
+            boolean expCanPush = SysCodeConfigureUtils.getExpCanPush(expand);
+
             Long configId = 12L;
             MsgConfigDto.Vo msgConfig = R.feignCheckData(msgSendApiService.getMsgConfig(new MsgConfigDto.Vo().setId(configId)));
             List<MsgConfigTestDto.BizParam> bizParams = R.feignCheckData(msgSendApiService.getBizParamByMsgConfig(new MsgConfigTestDto.MsgConfig().setConfigId(configId)));
@@ -106,19 +123,23 @@ public class DevicePushMsgConsumer implements MqttConsumer {
                         .append(DateUtil.format(createTime, DatePattern.NORM_DATETIME_PATTERN));
                 //查询userinfo表的mpOpenId
                 List<UserInfoDto.Vo> userInfoList = R.feignCheckData(userInfoService.list(new UserInfoDto.SelectListDto().setUserIds(userInfoIdList)));
-                userInfoList.forEach(u -> {
-                    String name = u.getName();
-                    //系统消息
-                    MsgSysMonitorNoticeDto.Save msgSys = new MsgSysMonitorNoticeDto.Save();
-                    msgSys.setUserId(u.getAuthorizeUserId());
-                    msgSys.setMsgType(MsgType.TYPE6.getCode()).setContent(sbMsg.toString())
-                            .setPubTime(LocalDateTime.now()).setPubState(2)
-                            .setSendTargets(name)
-                            .setPriority(msgConfig.getPriority())
-                            .setTitle(msgConfig.getTitle())
-                            .setPubUserId(-1).setTitle(MsgType.TYPE6.getDescription());
-                    msgSysMonitorNoticeService.save(msgSys);
-                });
+                //配置了展示给商户才生成数据
+                if (expShow2Merc) {
+                    userInfoList.forEach(u -> {
+                        String name = u.getName();
+                        //系统消息
+                        MsgSysMonitorNoticeDto.Save msgSys = new MsgSysMonitorNoticeDto.Save();
+                        msgSys.setUserId(u.getAuthorizeUserId());
+                        msgSys.setMsgType(MsgType.TYPE6.getCode()).setContent(sbMsg.toString())
+                                .setPubTime(LocalDateTime.now()).setPubState(2)
+                                .setSendTargets(name)
+                                .setPriority(msgConfig.getPriority())
+                                .setTitle(eventType + "-" + title)
+                                .setPubUserId(-1).setTitle(MsgType.TYPE6.getDescription());
+                        msgSysMonitorNoticeService.save(msgSys);
+                    });
+                }
+
 
                 for (MsgConfigTestDto.BizData b : bizDataList) {
                     String channelType = b.getChannelType();
@@ -154,7 +175,8 @@ public class DevicePushMsgConsumer implements MqttConsumer {
                         sendList.add(b);
                     }
                 }
-                if (CollUtil.isNotEmpty(sendList)) {
+                //是否可推送条件
+                if (CollUtil.isNotEmpty(sendList) && expPush2Merc && expCanPush) {
                     msgSendApiService.sendByMsgConfig(new MsgConfigTestDto.SendByMsgConfig().setConfigId(configId).setBizDataList(sendList));
                 }
 

+ 20 - 3
device-api-service/src/main/java/com/xy/service/DeviceConfigServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xy.service;
 
+import cn.hutool.core.collection.CollUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.dto.DeviceConfigDto;
 import com.xy.entity.DeviceConfig;
@@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 
 /**
@@ -27,15 +29,30 @@ import java.time.LocalDateTime;
  */
 @Service
 @AllArgsConstructor
-@Api(tags = "设备配置表")
+@Api(tags = "设备温度告警设置")
 public class DeviceConfigServiceImpl extends ServiceImpl<DeviceConfigMapper, DeviceConfig> implements DeviceConfigService {
 
     @PostMapping("update")
-    @ApiOperation("修改")
+    @ApiOperation("设备温度告警阈值设置")
     public R update(@RequestBody @Validated DeviceConfigDto.Update update) {
         DeviceConfig deviceConfig = Beans.copy(DeviceConfig.class, update)
                 .setUpdateTime(LocalDateTime.now());
         updateById(deviceConfig);
         return R.ok();
     }
-}
+
+    @PostMapping("batchUpdate")
+    @ApiOperation("设备温度告警阈值批量设置")
+    public R batchUpdate(@RequestBody @Validated DeviceConfigDto.BatchUpdate batchUpdate) {
+        List<Long> deviceIds = batchUpdate.getDeviceIds();
+        List<DeviceConfig> deviceConfigs = this.listByIds(deviceIds);
+        if (CollUtil.isNotEmpty(deviceConfigs)) {
+            deviceConfigs.forEach(d -> {
+                d.setTempMin(batchUpdate.getTempMin());
+                d.setTempMax(batchUpdate.getTempMax());
+            });
+            this.saveOrUpdateBatch(deviceConfigs);
+        }
+        return R.ok();
+    }
+}

+ 19 - 1
device-api-service/src/main/java/com/xy/service/factory/device/impl/open/OpenDeviceFactoryImpl.java

@@ -1,5 +1,6 @@
 package com.xy.service.factory.device.impl.open;
 
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -246,13 +247,30 @@ public class OpenDeviceFactoryImpl implements DeviceFactory {
                             .setFaultLevel(Integer.valueOf(sysCodeConfigureRedis.getExpand()));
                     deviceInfoService.updateById(updateDeviceInfo);
                     //设备故障消息推送
-                    devicePushMsgProducer.sendToMqtt(JSONUtil.toJsonStr(deviceEventMsg), DevicePushMsgMqttConfiguration.TOPIC, 1);
+                    sendMsg(deviceEventMsg);
                 }
             }
+            if (sysCodeConfigureRedis.getPaterCode().equals(SysCodeConfigureEnum.M01.getCode())) {
+                //设备消息消息推送
+                sendMsg(deviceEventMsg);
+            }
         }
         return R.ok();
     }
 
+    /**
+     * 设备事件推送
+     *
+     * @param deviceEventMsg 设备事件味精
+     */
+    private void sendMsg(DeviceEventMsg deviceEventMsg) {
+        String code = deviceEventMsg.getCode();
+        if (StrUtil.isEmpty(code)) {
+            return;
+        }
+        devicePushMsgProducer.sendToMqtt(JSONUtil.toJsonStr(deviceEventMsg), DevicePushMsgMqttConfiguration.TOPIC, 1);
+    }
+
     @Override
     public R busyStatus(MercMiniDeviceDto.BusySate busySate) {
         DeviceInfo updateDeviceInfo = new DeviceInfo()

+ 31 - 1
device-api/src/main/java/com/xy/dto/DeviceConfigDto.java

@@ -5,8 +5,10 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * <p>
@@ -20,13 +22,41 @@ public class DeviceConfigDto {
 
     @Data
     @Accessors(chain = true)
-    public static class Update extends Vo {
+    public static class Update {
 
         @NotNull(message = "deviceId不能为空")
         @ApiModelProperty(value = "设备id")
         private Long deviceId;
+
+        @NotNull(message = "最大温度告警值不能为空")
+        @ApiModelProperty(value = "最大温度告警值")
+        private Integer tempMax;
+
+        @NotNull(message = "最小温度告警值不能为空")
+        @ApiModelProperty(value = "最小温度告警值")
+        private Integer tempMin;
+
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class BatchUpdate {
+
+        @NotEmpty(message = "deviceId不能为空")
+        @ApiModelProperty(value = "设备id")
+        private List<Long> deviceIds;
+
+        @NotNull(message = "最大温度告警值不能为空")
+        @ApiModelProperty(value = "最大温度告警值")
+        private Integer tempMax;
+
+        @NotNull(message = "最小温度告警值不能为空")
+        @ApiModelProperty(value = "最小温度告警值")
+        private Integer tempMin;
+
+    }
+
+
     @Data
     @Accessors(chain = true)
     public static class Vo {