Ver código fonte

#MOD 商户小程序设备查询今日销售、库存统计数据

谭斌 2 anos atrás
pai
commit
b5385a57ba

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

@@ -13,4 +13,5 @@ import com.xy.entity.DeviceData;
  */
 public interface DeviceDataMapper extends BaseMapper<DeviceData> {
 
+ 
 }

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

@@ -113,4 +113,17 @@ public class DeviceDataServiceImpl extends ServiceImpl<DeviceDataMapper, DeviceD
         return R.ok();
     }
 
-}
+    /**
+     * 集合查询
+     *
+     * @param dto
+     * @return
+     */
+    public List<DeviceDataDto.Vo> list(DeviceDataDto.ListDTO dto) {
+        LambdaQueryWrapper<DeviceData> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(dto, DeviceData.class).build();
+        List<DeviceData> list = list(lambdaQueryWrapper);
+        return copy(DeviceDataDto.Vo.class, list);
+    }
+
+
+}

+ 64 - 14
device-api-service/src/main/java/com/xy/service/DeviceInfoServiceImpl.java

@@ -2,6 +2,8 @@ package com.xy.service;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.text.StrBuilder;
 import cn.hutool.core.util.BooleanUtil;
 import cn.hutool.core.util.StrUtil;
@@ -15,10 +17,7 @@ import com.xy.collections.list.JArrayList;
 import com.xy.collections.list.JList;
 import com.xy.config.DeviceThreadPoolConfig;
 import com.xy.consts.DictConsts;
-import com.xy.dto.DeviceInfoDto;
-import com.xy.dto.DeviceRegisterDto;
-import com.xy.dto.DeviceStatusDto;
-import com.xy.dto.DeviceSysinfoDto;
+import com.xy.dto.*;
 import com.xy.entity.DeviceErrorsRecord;
 import com.xy.entity.DeviceInfo;
 import com.xy.entity.DeviceStatus;
@@ -43,10 +42,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.xy.utils.PlusBeans.*;
@@ -71,6 +67,7 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
     private final DeviceRegisterServiceImpl deviceRegisterService;
 
     private final DeviceErrorsRecordServiceImpl deviceErrorsRecordService;
+    private final DeviceDataServiceImpl deviceDataService;
 
     private final RedisService<String> redisService;
 
@@ -437,7 +434,7 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
             return R.ok(Collections.emptyList());
         }
         List<DeviceInfoDto.MercHomeListVO> dataList = new ArrayList<>(list.size());
-        //获取通条件设备信息
+
         LambdaQueryWrapper<DeviceInfo> lqw = new LambdaQueryWrapper<>();
         lqw.eq(mercId != null, DeviceInfo::getMercId, mercId);
         lqw.eq(deviceId != null, DeviceInfo::getDeviceId, deviceId);
@@ -455,17 +452,44 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
             //线路下的设备列表
             List<DeviceInfoDto.MercHomeDeviceVo> deviceInfos = Beans.copy(DeviceInfoDto.MercHomeDeviceVo.class, deviceMap.get(placeLineId));
 
+            //设备销售统计
+            String type = SysDictUtils.getValue(DictEnum.DEVICE_DATA_TYPE.getKey(), DictSonEnum.DEVICE_DATA_TYPE_DAY.getKey(), String.class);
+            String todayDate = DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN);
+            List<Long> deviceIds = deviceInfos.stream().map(DeviceInfoDto.MercHomeDeviceVo::getDeviceId).collect(Collectors.toList());
+            //统计条件:当天
+            DeviceDataDto.ListDTO deviceDataListDTO = new DeviceDataDto.ListDTO()
+                    .setDeviceIds(deviceIds).setType(type).setDateValue(Integer.valueOf(todayDate)).setMercId(mercId);
+            List<DeviceDataDto.Vo> deviceDataList = deviceDataService.list(deviceDataListDTO);
+            Map<Long, DeviceDataDto.Vo> dataMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(deviceDataList)) {
+                dataMap = deviceDataList.stream().collect(Collectors.toMap(DeviceDataDto.Vo::getDeviceId, d -> d));
+
+            }
+
+            //设备状态查询
+            List<DeviceStatusDto.Vo> deviceStatusList = deviceStatusService.list(new DeviceStatusDto.SelectList().setDeviceIds(deviceIds)).getData();
+            Map<Long, DeviceStatusDto.Vo> datdeviceStatusMap = new HashMap<>();
+            if (CollUtil.isNotEmpty(deviceStatusList)) {
+                datdeviceStatusMap = deviceStatusList.stream().collect(Collectors.toMap(DeviceStatusDto.Vo::getDeviceId, d -> d));
+            }
+
+            Map<Long, DeviceDataDto.Vo> finalDataMap = dataMap;
+            Map<Long, DeviceStatusDto.Vo> finalDatdeviceStatusMap = datdeviceStatusMap;
             deviceInfos.forEach(device -> {
+                Long dId = device.getDeviceId();
                 //设备类型 反显
                 SysDictRedis dictDeviceType = SysDictUtils.get(DictConsts.DEVICE_TYPE, String.valueOf(device.getDeviceType()));
                 device.setDeviceTypeName(dictDeviceType.getMsg());
                 //运营状态 反显
                 SysDictRedis dictBusyState = SysDictUtils.get(DictConsts.DEVICE_BUSY_STATUS, String.valueOf(device.getBusyState()));
                 device.setBusyStateName(dictBusyState.getMsg());
-                //初始化数字
-                device.setDayOrderNum(0).setOnSaleNum(0).setFillNum(0).setDaySalesPrice("0");
-                //TODO: 数字统计
-                //可售库存
+                DeviceDataDto.Vo deviceData = finalDataMap.get(dId);
+                //今日销售、库存情况 反显
+                device.setDayOrderNum(deviceData != null ? deviceData.getSalesCount() : 0);
+                device.setDaySalesPrice(deviceData != null ? deviceData.getSalesMoney() : 0);
+                DeviceStatusDto.Vo deviceStatus = finalDatdeviceStatusMap.get(deviceId);
+                device.setOnSaleNum(deviceStatus != null ? deviceStatus.getStock() : 0);
+                device.setFillNum(deviceStatus != null ? deviceStatus.getAfterFillStock() : 0);
 
             });
             vo.setDeviceInfos(deviceInfos);
@@ -501,9 +525,35 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
                 return R.ok(new PageBean<>());
             }
             page.setDeviceIdList(deviceIdList);
-
         }
+
         PageBean<DeviceInfoDto.Vo2> pageBean = queryPage(page);
+        List<DeviceInfoDto.Vo2> records = pageBean.getRecords();
+        if (CollUtil.isNotEmpty(records)) {
+            List<Long> deviceIds = records.stream().map(DeviceInfoDto.Vo2::getDeviceId).collect(Collectors.toList());
+
+
+            String type = SysDictUtils.getValue(DictEnum.DEVICE_DATA_TYPE.getKey(), DictSonEnum.DEVICE_DATA_TYPE_DAY.getKey(), String.class);
+            String todayDate = DateUtil.format(new Date(), DatePattern.PURE_DATE_PATTERN);
+            //查询当天
+            DeviceDataDto.ListDTO dto = new DeviceDataDto.ListDTO()
+                    .setDeviceIds(deviceIds).setType(type).setDateValue(Integer.valueOf(todayDate)).setMercId(mercId);
+            List<DeviceDataDto.Vo> deviceDataList = deviceDataService.list(dto);
+            if (CollUtil.isNotEmpty(deviceDataList)) {
+                //统计数据反显
+                Map<Long, DeviceDataDto.Vo> dataMap = deviceDataList.stream().collect(Collectors.toMap(DeviceDataDto.Vo::getDeviceId, d -> d));
+                records.forEach(v -> {
+                    Long deviceId = v.getDeviceId();
+                    DeviceDataDto.Vo vo = dataMap.get(deviceId);
+                    //今日订单数
+                    v.setDayOrderNum(vo != null ? vo.getSalesCount() : 0);
+                    v.setDaySalesPrice(vo != null ? vo.getSalesMoney() : 0);
+                });
+                pageBean.setRecords(records);
+            }
+
+
+        }
         return R.ok(pageBean);
     }
 

+ 3 - 0
device-api-service/src/main/java/com/xy/utils/enums/DictSonEnum.java

@@ -28,6 +28,9 @@ public enum DictSonEnum {
     DEVICE_ONLINE_STATUS_DISCONNECT("disconnect", "设备-联网状态-离线"),
     DEVICE_BUSY_STATUS1("1", "设备-运营状态-运营中"),
     DEVICE_BUSY_STATUS2("2", "设备-运营状态-已停运"),
+    DEVICE_DATA_TYPE_YEAR("year", "设备统计数据-按年统计"),
+    DEVICE_DATA_TYPE_MONTH("month", "设备统计数据-按月统计"),
+    DEVICE_DATA_TYPE_DAY("day", "设备统计数据-按日统计"),
 
     ;
 

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

@@ -9,6 +9,7 @@ import lombok.experimental.Accessors;
 import javax.validation.constraints.NotNull;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * <p>
@@ -107,4 +108,51 @@ public class DeviceDataDto {
 
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class ListDTO {
+ 
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+        @ApiModelProperty(value = "设备ID")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "设备ID们")
+        private List<Long> deviceIds;
+
+        @ApiModelProperty(value = "统计类型;year|month|day")
+        private String type;
+
+        @ApiModelProperty(value = "统计日期;2022|202206|20220603")
+        private Integer dateValue;
+
+        @ApiModelProperty(value = "营业额;单位分")
+        private Integer salesMoney;
+
+        @ApiModelProperty(value = "销售笔数")
+        private Integer salesCount;
+
+        @ApiModelProperty(value = "销售商品数")
+        private Integer goodsCount;
+
+        @ApiModelProperty(value = "退款金额;单位分")
+        private Integer refundMoney;
+
+        @ApiModelProperty(value = "退款笔数")
+        private Integer refundCount;
+
+        @ApiModelProperty(value = "风险订单数")
+        private Integer riskCount;
+
+        @ApiModelProperty(value = "0元订单笔数")
+        private Integer zeroCount;
+
+        @ApiModelProperty(value = "设备故障数")
+        private Integer deviceFaultCount;
+
+
+    }
+
+
 }

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

@@ -322,6 +322,12 @@ public class DeviceInfoDto {
         @ApiModelProperty("区域名称")
         private String districtName;
 
+        @ApiModelProperty("今日订单数")
+        private Integer dayOrderNum;
+
+        @ApiModelProperty("今日销售额")
+        private Integer daySalesPrice;
+
 
     }
 
@@ -540,7 +546,7 @@ public class DeviceInfoDto {
         private Integer dayOrderNum;
 
         @ApiModelProperty("今日销售额")
-        private String daySalesPrice;
+        private Integer daySalesPrice;
 
 
         @ApiModelProperty("在售商品数")