李进 2 роки тому
батько
коміт
fc8925b715

+ 16 - 3
device-api-service/src/main/java/com/xy/config/ThreadPoolConfig.java

@@ -6,13 +6,27 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Component;
 
-import java.util.concurrent.ThreadPoolExecutor;
-
 @Component
 public class ThreadPoolConfig {
 
+    public static final String COMMON_POLL = "commonPoll";
+
     public static final String DEVICE_CREATE_IDS_SAVE = "deviceCreateIdsSave";
 
+    /**
+     * 公用线程池
+     */
+    @DynamicTp
+    @Bean(COMMON_POLL)
+    public ThreadPoolTaskExecutor commonPoll() {
+        return ThreadPoolUtils.newPoll()
+                .name(COMMON_POLL)
+                .coreSize(10)
+                .maxSize(200)
+                .keepAlive(60)
+                .builder();
+    }
+
     /**
      * 设备-机器ID生成线程池
      */
@@ -24,7 +38,6 @@ public class ThreadPoolConfig {
                 .coreSize(10)
                 .maxSize(200)
                 .keepAlive(30)
-                .rejected(new ThreadPoolExecutor.CallerRunsPolicy())
                 .builder();
     }
 

+ 16 - 0
device-api-service/src/main/java/com/xy/config/XyMqttConfig.java

@@ -0,0 +1,16 @@
+package com.xy.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "spring.mqtt")
+public class XyMqttConfig {
+
+    /**
+     * url
+     */
+    private String url;
+}

+ 3 - 0
device-api-service/src/main/java/com/xy/entity/MqttAcl.java

@@ -1,5 +1,7 @@
 package com.xy.entity;
 
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -13,6 +15,7 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class MqttAcl {
 
+    @TableId(type = IdType.AUTO)
     @ApiModelProperty("唯一标识")
     private Integer id;
 

+ 56 - 0
device-api-service/src/main/java/com/xy/service/impl/DeviceInfoServiceImpl.java

@@ -1,11 +1,29 @@
 package com.xy.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.config.ThreadPoolConfig;
+import com.xy.dto.DeviceInfoDto;
+import com.xy.dto.DeviceRegisterDto;
+import com.xy.dto.DeviceStatusDto;
+import com.xy.dto.DeviceSysinfoDto;
 import com.xy.entity.DeviceInfo;
 import com.xy.mapper.DeviceInfoMapper;
 import com.xy.service.DeviceInfoService;
+import com.xy.utils.Emptys;
+import com.xy.utils.MybatisPlusQuery;
+import com.xy.utils.R;
+import com.xy.utils.ThreadPoolUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
+import static com.xy.utils.PlusBeans.copy;
+
 /**
  * <p>
  * 设备-信息 服务实现类
@@ -15,6 +33,44 @@ import org.springframework.stereotype.Service;
  * @since 2022-12-23
  */
 @Service
+@RequiredArgsConstructor
+@Api(tags = "设备-信息")
 public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceInfo> implements DeviceInfoService {
 
+    private final DeviceSysinfoServiceImpl deviceSysinfoService;
+
+    private final DeviceStatusServiceImpl deviceStatusService;
+
+    private final DeviceRegisterServiceImpl deviceRegisterService;
+
+    @Override
+    @SneakyThrows
+    @ApiOperation("对象查询")
+    public R<DeviceInfoDto.Vo> obj(DeviceInfoDto.Obj obj) {
+        //设备信息
+        LambdaQueryWrapper<DeviceInfo> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(obj, DeviceInfo.class).build();
+        List<DeviceInfo> list = list(lambdaQueryWrapper);
+        if (!Emptys.check(list)) {
+            return R.ok();
+        }
+        DeviceInfoDto.Vo deviceInfo = copy(DeviceInfoDto.Vo.class, list.get(0));
+        ThreadPoolUtils.excPoll(ThreadPoolConfig.COMMON_POLL, 3)
+                .execute(() -> {
+                    //系统信息
+                    DeviceSysinfoDto.Vo deviceSysinfo = deviceSysinfoService.get(new DeviceSysinfoDto.Vo().setDeviceId(deviceInfo.getDeviceId())).getData();
+                    deviceInfo.setDeviceSysinfo(Emptys.check(deviceSysinfo) ? deviceSysinfo : null);
+                })
+                .execute(() -> {
+                    //状态信息
+                    DeviceStatusDto.Vo deviceStatus = deviceStatusService.obj(new DeviceStatusDto.Vo().setDeviceId(deviceInfo.getDeviceId())).getData();
+                    deviceInfo.setDeviceStatus(Emptys.check(deviceStatus) ? deviceStatus : null);
+                })
+                .execute(() -> {
+                    //注册信息
+                    DeviceRegisterDto.Vo deviceRegister = deviceRegisterService.obj(new DeviceRegisterDto.Vo().setDeviceId(deviceInfo.getDeviceId())).getData();
+                    deviceInfo.setDeviceRegister(Emptys.check(deviceRegister) ? deviceRegister : null);
+                })
+                .end();
+        return R.ok(deviceInfo);
+    }
 }

+ 26 - 0
device-api-service/src/main/java/com/xy/service/impl/DeviceRegisterServiceImpl.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.config.XyMqttConfig;
 import com.xy.dto.DeviceRegisterDto;
 import com.xy.entity.*;
 import com.xy.mapper.*;
@@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
 import java.time.LocalDateTime;
+import java.util.List;
 
 import static com.xy.utils.PlusBeans.*;
 
@@ -43,6 +45,10 @@ public class DeviceRegisterServiceImpl extends ServiceImpl<DeviceRegisterMapper,
 
     private DeviceStatusMapper deviceStatusMapper;
 
+    private MqttAclMapper mqttAclMapper;
+
+    private XyMqttConfig xyMqttConfig;
+
     @PostMapping("save")
     @ApiOperation("添加")
     @Transactional(rollbackFor = Exception.class)
@@ -86,6 +92,14 @@ public class DeviceRegisterServiceImpl extends ServiceImpl<DeviceRegisterMapper,
         );
         //新增设备-状态
         deviceStatusMapper.insert(new DeviceStatus().setDeviceId(deviceRegister.getDeviceId()));
+        //新增mqtt信息
+        String deviceId = deviceRegister.getDeviceId().toString();
+        mqttAclMapper.insert(new MqttAcl()
+                .setIpaddress(xyMqttConfig.getUrl())
+                .setUsername(deviceId)
+                .setClientid(deviceId)
+                .setTopic(deviceId + "-CMD")
+        );
         return R.ok();
     }
 
@@ -98,7 +112,19 @@ public class DeviceRegisterServiceImpl extends ServiceImpl<DeviceRegisterMapper,
                 .le(DeviceRegister::getCreateTime, page.getEndCreateTime())
                 .build()
                 .orderByDesc(!Emptys.check(pageBean.getOrders()), DeviceRegister::getCreateTime);
+        AuthUtils.authByData(lambdaQueryWrapper, DeviceRegister::getCreateUser);
         IPage<DeviceRegister> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
         return R.ok(toPageBean(DeviceRegisterDto.Vo.class, iPage));
     }
+
+    @PostMapping("obj")
+    @ApiOperation("对象查询")
+    public R<DeviceRegisterDto.Vo> obj(@RequestBody DeviceRegisterDto.Vo vo) {
+        LambdaQueryWrapper<DeviceRegister> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(vo, DeviceRegister.class).build();
+        List<DeviceRegister> list = list(lambdaQueryWrapper);
+        if (!Emptys.check(list)) {
+            return R.ok();
+        }
+        return R.ok(copy(DeviceRegisterDto.Vo.class, list.get(0)));
+    }
 }

+ 16 - 0
device-api-service/src/main/java/com/xy/service/impl/DeviceStatusServiceImpl.java

@@ -1,16 +1,21 @@
 package com.xy.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.xy.dto.DeviceStatusDto;
 import com.xy.entity.DeviceStatus;
 import com.xy.mapper.DeviceStatusMapper;
 import com.xy.service.DeviceStatusService;
+import com.xy.utils.Emptys;
+import com.xy.utils.MybatisPlusQuery;
 import com.xy.utils.R;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.stereotype.Service;
 import org.springframework.web.bind.annotation.PostMapping;
 
+import java.util.List;
+
 import static com.xy.utils.Beans.copy;
 
 /**
@@ -36,4 +41,15 @@ public class DeviceStatusServiceImpl extends ServiceImpl<DeviceStatusMapper, Dev
         updateById(deviceStatus);
         return R.ok();
     }
+
+    @PostMapping("obj")
+    @ApiOperation("对象查询")
+    public R<DeviceStatusDto.Vo> obj(DeviceStatusDto.Vo vo) {
+        LambdaQueryWrapper<DeviceStatus> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(vo, DeviceStatus.class).build();
+        List<DeviceStatus> list = list(lambdaQueryWrapper);
+        if (!Emptys.check(list)) {
+            return R.ok();
+        }
+        return R.ok(copy(DeviceStatusDto.Vo.class, list.get(0)));
+    }
 }

+ 3 - 6
device-api-service/src/main/java/com/xy/service/impl/DeviceSysinfoServiceImpl.java

@@ -30,13 +30,10 @@ import static com.xy.utils.Beans.copy;
 @Api(tags = "设备-系统信息")
 public class DeviceSysinfoServiceImpl extends ServiceImpl<DeviceSysinfoMapper, DeviceSysinfo> implements DeviceSysinfoService {
 
-    @Override
+    @PostMapping("get")
     @ApiOperation("查询对象")
-    public R<DeviceSysinfoDto.Vo> get(DeviceSysinfoDto.Select select) {
-        LambdaQueryWrapper<DeviceSysinfo> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(select, DeviceSysinfo.class)
-                .ge(DeviceSysinfo::getCreateTime, select.getBeginCreateTime())
-                .le(DeviceSysinfo::getCreateTime, select.getEndCreateTime())
-                .build();
+    public R<DeviceSysinfoDto.Vo> get(DeviceSysinfoDto.Vo vo) {
+        LambdaQueryWrapper<DeviceSysinfo> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(vo, DeviceSysinfo.class).build();
         List<DeviceSysinfo> list = list(lambdaQueryWrapper);
         if (!Emptys.check(list)) {
             return R.ok(new DeviceSysinfoDto.Vo());

+ 26 - 0
device-api-service/src/main/java/com/xy/utils/AuthUtils.java

@@ -0,0 +1,26 @@
+package com.xy.utils;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+
+public class AuthUtils {
+
+    /**
+     * 数据鉴权
+     * 如果非管理员查询条件则function=当前登录人
+     *
+     * @param lambdaQueryWrapper 查询构造器
+     * @param function           数据区分函数
+     * @param <T>
+     * @return
+     */
+    public static <T> boolean authByData(LambdaQueryWrapper<T> lambdaQueryWrapper, SFunction<T, ?> function) {
+        boolean dataAuth = AuthorizeUtils.authByData(AuthorizeUtils.getSysId(), AuthorizeUtils.getUri());
+        if (!dataAuth) {
+            lambdaQueryWrapper.eq(function, AuthorizeUtils.getLoginId(Long.class));
+            return false;
+        }
+        return true;
+    }
+
+}

+ 81 - 0
device-api/src/main/java/com/xy/dto/DeviceInfoDto.java

@@ -0,0 +1,81 @@
+package com.xy.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+@Data
+@Accessors(chain = true)
+public class DeviceInfoDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class Obj {
+
+        @ApiModelProperty("设备id")
+        private Long deviceId;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty("设备id")
+        private Long deviceId;
+
+        @ApiModelProperty("设备类型")
+        private Integer deviceType;
+
+        @ApiModelProperty("商户设备资产编号")
+        private String mercDeviceCode;
+
+        @ApiModelProperty("商户id")
+        private Long mercId;
+
+        @ApiModelProperty("商户编码")
+        private String mercCode;
+
+        @ApiModelProperty("点位id")
+        private Long placeId;
+
+        @ApiModelProperty("线路id")
+        private Long placeLineId;
+
+        @ApiModelProperty("区域id")
+        private Long districtId;
+
+        @ApiModelProperty("激活状态")
+        private Integer activeState;
+
+        @ApiModelProperty("激活时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime activeTime;
+
+        @ApiModelProperty("运营状态")
+        private Integer busyState;
+
+        @ApiModelProperty("设备图片")
+        private String deviceImg;
+
+        @ApiModelProperty("创建时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime createTime;
+
+        @ApiModelProperty("更新时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime updateTime;
+
+        @ApiModelProperty("系统信息")
+        private DeviceSysinfoDto.Vo deviceSysinfo;
+
+        @ApiModelProperty("状态信息")
+        private DeviceStatusDto.Vo deviceStatus;
+
+        @ApiModelProperty("注册信息")
+        private DeviceRegisterDto.Vo deviceRegister;
+    }
+
+}

+ 0 - 21
device-api/src/main/java/com/xy/dto/DeviceSysinfoDto.java

@@ -7,7 +7,6 @@ import lombok.Data;
 import lombok.experimental.Accessors;
 
 import javax.validation.constraints.NotNull;
-import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 @Data
@@ -15,26 +14,6 @@ import java.time.LocalDateTime;
 @Accessors(chain = true)
 public class DeviceSysinfoDto {
 
-    @Data
-    @Accessors(chain = true)
-    public static class Select extends Vo {
-        @JsonFormat(pattern = "yyyy-MM-dd")
-        @ApiModelProperty(value = "创建时间-起")
-        private LocalDate beginCreateTime;
-
-        @JsonFormat(pattern = "yyyy-MM-dd")
-        @ApiModelProperty(value = "创建时间-始")
-        private LocalDate endCreateTime;
-
-        public LocalDateTime getBeginCreateTime() {
-            return beginCreateTime == null ? null : beginCreateTime.atTime(0, 0, 0);
-        }
-
-        public LocalDateTime getEndCreateTime() {
-            return endCreateTime == null ? null : endCreateTime.atTime(23, 59, 59);
-        }
-    }
-
     @Data
     @Accessors(chain = true)
     public static class Up extends Vo {

+ 12 - 0
device-api/src/main/java/com/xy/service/DeviceInfoService.java

@@ -1,6 +1,10 @@
 package com.xy.service;
 
 import com.xy.annotate.RestMappingController;
+import com.xy.dto.DeviceInfoDto;
+import com.xy.utils.R;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
@@ -13,4 +17,12 @@ import com.xy.annotate.RestMappingController;
 @RestMappingController("device-info")
 public interface DeviceInfoService {
 
+    /**
+     * 查询对象
+     *
+     * @param obj
+     * @return
+     */
+    @PostMapping("obj")
+    R<DeviceInfoDto.Vo> obj(@RequestBody DeviceInfoDto.Obj obj);
 }

+ 0 - 13
device-api/src/main/java/com/xy/service/DeviceSysinfoService.java

@@ -1,10 +1,6 @@
 package com.xy.service;
 
 import com.xy.annotate.RestMappingController;
-import com.xy.dto.DeviceSysinfoDto;
-import com.xy.utils.R;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
 
 /**
  * <p>
@@ -17,13 +13,4 @@ import org.springframework.web.bind.annotation.RequestBody;
 @RestMappingController("device-sysinfo")
 public interface DeviceSysinfoService {
 
-    /**
-     * 查询对象
-     *
-     * @param select
-     * @return
-     */
-    @PostMapping("get")
-    R<DeviceSysinfoDto.Vo> get(@RequestBody DeviceSysinfoDto.Select select);
-
 }