Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/master'

李进 1 gadu atpakaļ
vecāks
revīzija
9e9bf3637a

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

@@ -0,0 +1,47 @@
+package com.xy.controller;
+
+import cn.hutool.core.collection.CollUtil;
+import com.xy.annotate.RestMappingController;
+import com.xy.dto.DeviceDataDto;
+import com.xy.service.DeviceDataServiceImpl;
+import com.xy.utils.MercAuthUtils;
+import com.xy.utils.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import javax.validation.Valid;
+import java.util.List;
+
+/**
+ * 商户PC端首页数据统计
+ *
+ * @author 谭斌
+ * @date 2023/12/12
+ */
+@RestMappingController("merc-pc/homePage/data")
+@RequiredArgsConstructor
+@Api(tags = "商户PC端首页数据统计")
+public class MercHomePageController {
+
+    private final DeviceDataServiceImpl deviceDataService;
+    private final MercMiniDeviceController mercMiniDeviceController;
+
+
+    @ApiOperation("设备统计")
+    @PostMapping("device")
+    public R<DeviceDataDto.MercHomePageCountVO> device(@RequestBody @Valid DeviceDataDto.MercHomePageCount dto) {
+
+        List<Long> myDevices = mercMiniDeviceController.getMyDevices();
+        if (CollUtil.isEmpty(myDevices)) {
+            R.ok();
+        }
+        dto.setMercId(MercAuthUtils.getMercId());
+        dto.setMyDeviceIds(myDevices);
+        return R.ok(deviceDataService.deviceCount(dto));
+    }
+
+
+}

+ 54 - 0
device-api-service/src/main/java/com/xy/service/DeviceDataServiceImpl.java

@@ -1,6 +1,7 @@
 package com.xy.service;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -11,9 +12,12 @@ import com.xy.collections.map.JConcurrentHashMap;
 import com.xy.collections.map.JHashMap;
 import com.xy.collections.map.JMap;
 import com.xy.device.EnumDeviceDataType;
+import com.xy.device.EnumDeviceOnlineStatus;
 import com.xy.dto.DeviceDataDto;
 import com.xy.dto.DeviceInfoDto;
 import com.xy.entity.DeviceData;
+import com.xy.entity.DeviceInfo;
+import com.xy.entity.DeviceStatus;
 import com.xy.entity.SysDictRedis;
 import com.xy.mapper.DeviceDataMapper;
 import com.xy.utils.*;
@@ -53,6 +57,56 @@ import static com.xy.utils.PlusBeans.toPageBean;
 public class DeviceDataServiceImpl extends ServiceImpl<DeviceDataMapper, DeviceData> implements DeviceDataService {
 
     private final DeviceInfoServiceImpl deviceInfoService;
+    private final DeviceStatusServiceImpl deviceStatusService;
+
+    /**
+     * 设备统计
+     *
+     * @param dto
+     * @return {@link DeviceDataDto.MercHomePageCountVO}
+     */
+    public DeviceDataDto.MercHomePageCountVO deviceCount(@RequestBody @Valid DeviceDataDto.MercHomePageCount dto) {
+        DeviceDataDto.MercHomePageCountVO vo = new DeviceDataDto.MercHomePageCountVO()
+                .setOfflineNum(0).setOnlineNum(0).setUnActiveNum(0).setOutOfServiceNum(0);
+        Long mercId = dto.getMercId();
+        List<Long> myDeviceIds = dto.getMyDeviceIds();
+        if (mercId != null && CollUtil.isEmpty(myDeviceIds)) {
+            //指定商户查询用,平台查询预留逻辑
+            List<DeviceInfoDto.Vo> vos = R.feignCheckData(deviceInfoService.list(new DeviceInfoDto.ListDto().setMercId(mercId)));
+            if (CollUtil.isEmpty(vos)) {
+                return vo;
+            }
+            myDeviceIds = vos.stream().map(DeviceInfoDto.Vo::getDeviceId).collect(Collectors.toList());
+        }
+        List<DeviceInfo> mercDevices = deviceInfoService.listByIds(myDeviceIds);
+        if (CollUtil.isEmpty(mercDevices)) {
+            return vo;
+        }
+        //待激活数量
+        Long unActiveNum = mercDevices.stream()
+                .filter(device -> device.getActiveState() == 2)
+                .count();
+        //停运状态数量
+        Long outOfServiceNum = mercDevices.stream()
+                .filter(device -> device.getBusyState() == 2)
+                .count();
+        vo.setOutOfServiceNum(outOfServiceNum.intValue());
+        vo.setUnActiveNum(unActiveNum.intValue());
+
+        List<DeviceStatus> deviceStatuses = deviceStatusService.listByIds(myDeviceIds);
+        //分组统计
+        Map<Integer, Long> countNetstateMap = deviceStatuses.stream().collect(Collectors
+                .groupingBy(DeviceStatus::getNetState, Collectors.counting()));
+        Integer onlineDictValue = SysDictUtils.getValue(EnumDeviceOnlineStatus.Code.CODE.getCode(), EnumDeviceOnlineStatus.CONNECTED.getCode(), Integer.class);
+        Integer offlineDictValue = SysDictUtils.getValue(EnumDeviceOnlineStatus.Code.CODE.getCode(), EnumDeviceOnlineStatus.DISCONNECT.getCode(), Integer.class);
+
+        int onlineNum = countNetstateMap.get(onlineDictValue) == null ? 0 : countNetstateMap.get(onlineDictValue).intValue();
+        int offlineNum = countNetstateMap.get(offlineDictValue) == null ? 0 : countNetstateMap.get(offlineDictValue).intValue();
+        vo.setOnlineNum(onlineNum);
+        vo.setOfflineNum(offlineNum);
+
+        return vo;
+    }
 
     @PostMapping("sumPage")
     @ApiOperation("设备销售统计")

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

@@ -911,6 +911,8 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
         if (CollUtil.isEmpty(mercDevices)) {
             return R.ok(mercHomeStatisticalVO);
         }
+     
+
         //在线、离线
         List<DeviceStatus> deviceStatuses = deviceStatusService.listByIds(myDeviceIds);
         //分组统计

+ 26 - 0
device-api/src/main/java/com/xy/dto/DeviceDataDto.java

@@ -25,6 +25,32 @@ import java.util.List;
  */
 public class DeviceDataDto {
 
+    @Data
+    @Accessors(chain = true)
+    public static class MercHomePageCountVO {
+        @ApiModelProperty(value = "在线设备数")
+        private Integer onlineNum;
+
+        @ApiModelProperty(value = "离线设备数")
+        private Integer offlineNum;
+
+        @ApiModelProperty(value = "待激活数量")
+        private Integer unActiveNum;
+
+        @ApiModelProperty(value = "停运数量")
+        private Integer outOfServiceNum;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class MercHomePageCount {
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+        @ApiModelProperty(value = "拥有的设备ID", hidden = true)
+        private List<Long> myDeviceIds;
+    }
+
+
     @Data
     @Accessors(chain = true)
     public static class DayChartDto {