Explorar el Código

#ADD 设备详情 经营图表

谭斌 hace 2 años
padre
commit
6aa0fc5f66

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

@@ -185,5 +185,37 @@ public class DeviceDataServiceImpl extends ServiceImpl<DeviceDataMapper, DeviceD
         return copy(DeviceDataDto.Vo.class, data);
     }
 
+    /**
+     * 日范围内每天数据
+     *
+     * @param deviceId
+     * @param startDateValue
+     * @param endDateValue
+     * @return
+     */
+    public List<DeviceDataDto.Vo> getListByDay(Long deviceId, Integer startDateValue, Integer endDateValue) {
+        String type = SysDictUtils.getValue(DictEnum.DEVICE_DATA_TYPE.getKey(), DictSonEnum.DEVICE_DATA_TYPE_DAY.getKey(), String.class);
+        return getListData(type, deviceId, startDateValue, endDateValue);
+    }
+
+    /**
+     * 日期范围查询
+     *
+     * @param type
+     * @param deviceId
+     * @param startDateValue
+     * @param endDateValue
+     * @return
+     */
+    public List<DeviceDataDto.Vo> getListData(String type, Long deviceId, Integer startDateValue, Integer endDateValue) {
+        LambdaQueryWrapper<DeviceData> lambdaQueryWrapper = new LambdaQueryWrapper<>();
+        lambdaQueryWrapper.eq(DeviceData::getType, type);
+        lambdaQueryWrapper.eq(DeviceData::getDeviceId, deviceId);
+        lambdaQueryWrapper.between(DeviceData::getDateValue, startDateValue, endDateValue);
+        lambdaQueryWrapper.orderBy(true, true, DeviceData::getDateValue);
+        List<DeviceData> list = list(lambdaQueryWrapper);
+        return copy(DeviceDataDto.Vo.class, list);
+    }
+
 
 }

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

@@ -657,7 +657,70 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
      * @return
      */
     private DeviceInfoDto.DeviceDataCountVO dataCount2(DeviceInfoDto.DeviceDataCountDTO dto) {
+        Long deviceId = dto.getDeviceId();
+        //近一个月 (销售额,订单数,退款金额,退款数)
         DeviceInfoDto.DeviceDataCountVO vo = new DeviceInfoDto.DeviceDataCountVO();
+        DeviceInfoDto.BusinessChart businessChart = new DeviceInfoDto.BusinessChart();
+        List<String> categories = DataTime.dayListByLastDay(30);
+        List<Integer> dateList = new ArrayList<>(30);
+        businessChart.setCategories(categories);
+        categories.forEach(d -> {
+            dateList.add(Integer.valueOf(d.replaceAll(StrUtil.DASHED, StrUtil.EMPTY)));
+        });
+        Integer startDay = dateList.get(0);
+        Integer endDay = dateList.get(categories.size() - 1);
+
+
+        List<DeviceDataDto.Vo> listByDay = deviceDataService.getListByDay(deviceId, startDay, endDay);
+        if (CollUtil.isEmpty(listByDay)) {
+            return vo;
+        }
+
+        //每天的数据
+        Map<Integer, DeviceDataDto.Vo> dataDayMap = listByDay.stream().collect(Collectors.toMap(DeviceDataDto.Vo::getDateValue, i -> i));
+
+        List<DeviceInfoDto.MyChartSeries> series = new ArrayList<>();
+
+        String[] names = {"销售额", "订单数", "退款金额", "退款数"};
+        for (int i = 0; i < names.length; i++) {
+            DeviceInfoDto.MyChartSeries myChartSeries = new DeviceInfoDto.MyChartSeries();
+            //某个类型每天的数据
+            List<Integer> data = new ArrayList<>();
+            if (i == 0) {
+                //销售额
+                dateList.forEach(d -> {
+                    //每日数据填充
+                    DeviceDataDto.Vo deviceData = dataDayMap.get(d);
+                    data.add(deviceData == null ? 0 : deviceData.getSalesMoney());
+                });
+            } else if (i == 1) {
+                //订单数
+                dateList.forEach(d -> {
+                    //每日数据填充
+                    DeviceDataDto.Vo deviceData = dataDayMap.get(d);
+                    data.add(deviceData == null ? 0 : deviceData.getSalesCount());
+                });
+            } else if (i == 2) {
+                //退款金额
+                dateList.forEach(d -> {
+                    //每日数据填充
+                    DeviceDataDto.Vo deviceData = dataDayMap.get(d);
+                    data.add(deviceData == null ? 0 : deviceData.getRefundMoney());
+                });
+            } else if (i == 3) {
+                //退款数
+                dateList.forEach(d -> {
+                    //每日数据填充
+                    DeviceDataDto.Vo deviceData = dataDayMap.get(d);
+                    data.add(deviceData == null ? 0 : deviceData.getRefundCount());
+                });
+            }
+            myChartSeries.setName(names[i]);
+            myChartSeries.setData(data);
+            series.add(myChartSeries);
+        }
+        businessChart.setSeries(series);
+        vo.setBusinessChart(businessChart);
         return vo;
     }
 

+ 31 - 3
device-api/src/main/java/com/xy/dto/DeviceInfoDto.java

@@ -649,13 +649,41 @@ public class DeviceInfoDto {
     @Accessors(chain = true)
     public static class DeviceDataCountVO {
         @ApiModelProperty("(天)经营数据")
-        BusinessData dayBusinessData;
+        private BusinessData dayBusinessData;
 
         @ApiModelProperty("(月)经营数据")
-        BusinessData monthBusinessData;
+        private BusinessData monthBusinessData;
 
         @ApiModelProperty("商品统计数据")
-        GoodsData goodsData;
+        private GoodsData goodsData;
+
+        @ApiModelProperty("经营图表")
+        private BusinessChart businessChart;
+
+    }
+
+    /**
+     * 经营图表数据
+     */
+    @Data
+    @Accessors(chain = true)
+    public static class BusinessChart {
+        @ApiModelProperty("横坐标:日期最近一个月的")
+        private List<String> categories;
+
+        @ApiModelProperty("名称、数据")
+        private List<MyChartSeries> series;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class MyChartSeries {
+        @ApiModelProperty("数据")
+        private List<Integer> data;
+
+        @ApiModelProperty("名称")
+        private String name;
 
     }