Преглед на файлове

改为查询多商户设备在线数统计

hechunping преди 2 години
родител
ревизия
f6691ede43

+ 1 - 1
device-api-service/src/main/java/com/xy/mapper/DeviceInfoMapper.java

@@ -36,5 +36,5 @@ public interface DeviceInfoMapper extends BaseMapper<DeviceInfo> {
      */
     List<DeviceInfoDto.MercHomeCountVO> merHomeCountList(@Param("query") DeviceInfoDto.MercHomeQueryDTO queryDTO);
 
-    List<DeviceInfoDto.NetStateCount> netStateCount(@Param("mercId") Long mercId);
+    List<DeviceInfoDto.NetStateCount> netStateCount(@Param("mercIdList") List<Long> mercIdList);
 }

+ 24 - 12
device-api-service/src/main/java/com/xy/service/DeviceInfoServiceImpl.java

@@ -96,20 +96,32 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
 
     @Override
     @ApiOperation("设备在线数查询")
-    public R<DeviceInfoDto.NetStateCountVo> netStateCount(DeviceInfoDto.NetStateCountDto dto) {
-        List<DeviceInfoDto.NetStateCount> netStateCountList = baseMapper.netStateCount(dto.getMercId());
-        Integer count = 0;
-        DeviceInfoDto.NetStateCountVo vo = new DeviceInfoDto.NetStateCountVo();
-        for (DeviceInfoDto.NetStateCount i : netStateCountList) {
-            count += i.getCount();
-            if ("1".equals(i.getNetState())) {
-                vo.setOnLineCount(i.getCount());
-            } else if ("2".equals(i.getNetState())) {
-                vo.setOffLineCount(i.getCount());
+    public R<Map<Long, DeviceInfoDto.NetStateCountVo>> netStateCount(DeviceInfoDto.NetStateCountDto dto) {
+        List<DeviceInfoDto.NetStateCount> netStateCountList = baseMapper.netStateCount(dto.getMercIdList());
+        List<Long> netStateCountMercList = netStateCountList.stream().map(DeviceInfoDto.NetStateCount::getMercId).distinct().collect(Collectors.toList());
+        Map<Long, DeviceInfoDto.NetStateCountVo> voMap = new HashMap<>();
+        List<Long> mercIdList = Emptys.check(dto.getMercIdList())?dto.getMercIdList():netStateCountMercList;
+        if(!Emptys.check(mercIdList)){
+            return R.ok();
+        }
+        for (Long mercId : mercIdList) {
+            Integer count = 0;
+            Integer offline = 0;
+            DeviceInfoDto.NetStateCountVo vo = new DeviceInfoDto.NetStateCountVo().setMercId(mercId);
+            for (DeviceInfoDto.NetStateCount i : netStateCountList) {
+                if (Objects.equals(i.getMercId(), mercId)) {
+                    count += i.getCount();
+                    if ("1".equals(i.getNetState())) {
+                        vo.setOnLineCount(i.getCount());
+                    } else {
+                        offline += i.getCount();
+                    }
+                }
             }
+            vo.setCount(count).setOffLineCount(offline);
+            voMap.put(mercId, vo);
         }
-        vo.setCount(count);
-        return R.ok(vo);
+        return R.ok(voMap);
     }
 
     @Override

+ 9 - 5
device-api-service/src/main/resources/mapper/DeviceInfoMapper.xml

@@ -318,15 +318,19 @@
         group by place_line_id
     </select>
     <select id="netStateCount" resultType="com.xy.dto.DeviceInfoDto$NetStateCount">
-        SELECT net_state, count(*) as count
+        SELECT d.merc_id,net_state, count(*) as count
         FROM device_info d
                  LEFT JOIN device_status s ON s.device_id = d.device_id
         <where>
-            active_state = '1'
-            <if test="mercId != null">
-                and merc_id = #{mercId}
+            d.active_state = '1'
+            <if test="mercIdList != null and mercIdList.size()>0">
+                AND d.merc_id IN
+                <foreach collection="mercIdList" item="mercId" index="index"
+                         open="(" close=")" separator=",">
+                    #{mercId}
+                </foreach>
             </if>
         </where>
-        GROUP BY net_state
+        GROUP BY d.merc_id,s.net_state
     </select>
 </mapper>

+ 6 - 1
device-api/src/main/java/com/xy/dto/DeviceInfoDto.java

@@ -41,6 +41,9 @@ public class DeviceInfoDto {
     @Data
     @Accessors(chain = true)
     public static class NetStateCount {
+        @ApiModelProperty("商户ID")
+        private Long mercId;
+
         @ApiModelProperty("网络状态")
         private String netState;
 
@@ -52,12 +55,14 @@ public class DeviceInfoDto {
     @Accessors(chain = true)
     public static class NetStateCountDto {
         @ApiModelProperty("商户ID")
-        private Long mercId;
+        private List<Long> mercIdList;
     }
 
     @Data
     @Accessors(chain = true)
     public static class NetStateCountVo {
+        @ApiModelProperty("商户ID")
+        private Long mercId;
         @ApiModelProperty("总数")
         private Integer count = 0;
         @ApiModelProperty("在线数")

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

@@ -24,7 +24,7 @@ import java.util.Map;
 public interface DeviceInfoService {
 
     @PostMapping("netStateCount")
-    R<DeviceInfoDto.NetStateCountVo> netStateCount(@RequestBody DeviceInfoDto.NetStateCountDto dto);
+    R<Map<Long,DeviceInfoDto.NetStateCountVo>> netStateCount(@RequestBody DeviceInfoDto.NetStateCountDto dto);
     /**
      * 查询对象
      *