Browse Source

设备流水统计

tanbin 1 năm trước cách đây
mục cha
commit
d4c0497d49

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

@@ -37,6 +37,7 @@ import com.xy.error.CommRuntimeException;
 import com.xy.mapper.DeviceInfoMapper;
 import com.xy.mapper.entity.DeviceInfoQueryPage;
 import com.xy.service.be.MercFeignService;
+import com.xy.service.be.MercService;
 import com.xy.service.common.MercPlaceService;
 import com.xy.service.common.MercRegionService;
 import com.xy.sys.EnumDataClearSize;
@@ -112,6 +113,7 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
     private final MercUserBindDeviceService mercUserBindDeviceService;
 
     private final DevicePartServiceImpl devicePartService;
+    private final MercService mercService;
 
 
     @Override
@@ -413,6 +415,54 @@ public class DeviceInfoServiceImpl extends ServiceImpl<DeviceInfoMapper, DeviceI
         return R.ok(toPageBean(DeviceInfoDto.Vo.class, iPage));
     }
 
+    @Override
+    @ApiOperation("设备流水统计分页")
+    public R<PageBean<DeviceDataDto.DeviceFlowCountVO>> deviceFlowCountPage(@RequestBody @Valid DeviceDataDto.DeviceFlowCountDTO dto) {
+        Long curMercId = dto.getCurMercId();
+        PageBean pageBean = dto.getPage();
+        List<Long> mercIds = new ArrayList<>();
+        Long chooseMercId = dto.getChooseMercId();
+        if (chooseMercId == null) {
+            //未指定商户 查下级商户含自身
+            mercIds = R.feignCheckData(mercService.getAllSubMercIds(new MercDto.QuerySubDTO().setParentMercID(curMercId)));
+        } else {
+            mercIds.add(chooseMercId);
+
+        }
+        LambdaQueryWrapper<DeviceInfo> lqw = new MybatisPlusQuery().eqWrapper(dto, DeviceInfo.class)
+                .ge(DeviceInfo::getActiveTime, dto.getActiveStartTime())
+                .le(DeviceInfo::getActiveTime, dto.getActiveEndStartTime())
+                .build().in(DeviceInfo::getMercId, mercIds).eq(DeviceInfo::getActiveState, DeviceActiveStateEnum.TRUE.getCode());
+        IPage<DeviceInfo> iPage = page(toIPage(pageBean), lqw);
+        PageBean<DeviceDataDto.DeviceFlowCountVO> dataPage = toPageBean(DeviceDataDto.DeviceFlowCountVO.class, iPage);
+
+        List<DeviceDataDto.DeviceFlowCountVO> records = dataPage.getRecords();
+        if (CollUtil.isNotEmpty(records)) {
+
+            List<Long> placeIds = records.stream().filter(s -> s.getPlaceId() == null).map(DeviceDataDto.DeviceFlowCountVO::getPlaceId).distinct().collect(Collectors.toList());
+
+            List<MercPlaceDto.Vo> merPlaceList = R.feignCheckData(mercPlaceService.list(new MercPlaceDto.ListDto().setIds(placeIds)));
+            if (Emptys.check(merPlaceList)) {
+                Map<Long, MercPlaceDto.Vo> placeMap = merPlaceList.stream().collect(Collectors.toMap(MercPlaceDto.Vo::getId, p -> p));
+
+                for (DeviceDataDto.DeviceFlowCountVO record : records) {
+                    Long placeId = record.getPlaceId();
+                    if (placeId == null) {
+                        continue;
+                    }
+                    //点位 区域 反显
+                    MercPlaceDto.Vo placeVo = placeMap.get(placeId);
+                    if (placeVo != null) {
+                        record.setDistrictName(placeVo.getRegionName());
+                        record.setPlaceName(placeVo.getPlaceName());
+                    }
+                }
+            }
+        }
+        return R.ok(dataPage);
+    }
+
+
     /**
      * 按商户分页查设备
      *

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

@@ -450,4 +450,120 @@ public class DeviceDataDto {
         @ApiModelProperty(value = "设备ID")
         private List<Long> deviceId;
     }
+
+
+    @Data
+    @Accessors(chain = true)
+    public static class DeviceFlowCountDTO {
+        @ApiModelProperty("分页对象")
+        private PageBean page;
+
+        @ApiModelProperty(value = "设备ID")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "月份-起")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime beginCreateTime;
+
+        @ApiModelProperty(value = "月份-止")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime endCreateTime;
+
+
+        @ApiModelProperty(value = "投放时间-起")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime activeStartTime;
+
+        @ApiModelProperty(value = "投放时间-止")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime activeEndStartTime;
+
+
+        @ApiModelProperty(value = "商户id")
+        private Long curMercId;
+
+        @ApiModelProperty(value = "指定商户id")
+        private Long chooseMercId;
+
+        @ApiModelProperty(value = "商户ID")
+        private List<Long> mercIds;
+
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class DeviceFlowCountVO {
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+        @ApiModelProperty(value = "设备ID")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "设备名称")
+        private String deviceName;
+
+        @ApiModelProperty(value = "区域")
+        private String districtName;
+
+        @ApiModelProperty(value = "商户")
+        private String placeName;
+
+
+        /**
+         * 点位id
+         */
+        private Long placeId;
+
+        @ApiModelProperty(value = "投放时间")
+        @JsonFormat(pattern = "yyyy-MM-dd")
+        private DateTime activeTime;
+
+        @ApiModelProperty(value = "月平均流水")
+        private Integer monthAvgMoney;
+
+        @ApiModelProperty(value = "总计流水")
+        private Integer totalMoney;
+
+        @ApiModelProperty(value = "月度流水列表")
+        List<DeviceFlowMonthVO> monthflowList;
+
+    }
+
+    /**
+     * 每月流水
+     */
+    @Data
+    @Accessors(chain = true)
+    public static class DeviceFlowMonthVO {
+        @ApiModelProperty(value = "设备ID")
+        private Long deviceId;
+        @ApiModelProperty(value = "月份")
+        private Integer month;
+        @ApiModelProperty(value = "当月流水")
+        private Integer monthMoney;
+
+    }
+
+    /**
+     * 流水明细
+     */
+    @Data
+    @Accessors(chain = true)
+    public static class DeviceFlowDetailVO {
+        @ApiModelProperty(value = "设备ID")
+        private Long deviceId;
+        @ApiModelProperty(value = "月份")
+        private Integer month;
+        @ApiModelProperty(value = "当月流水")
+        private Integer monthMoney;
+
+        @ApiModelProperty(value = "收入")
+        private Integer incomeMoney;
+
+        @ApiModelProperty(value = "支出")
+        private Integer expenditureMoney;
+
+    }
+
 }

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

@@ -1,6 +1,7 @@
 package com.xy.service;
 
 import com.xy.annotate.RestMappingController;
+import com.xy.dto.DeviceDataDto;
 import com.xy.dto.DeviceInfoDto;
 import com.xy.dto.DeviceSysinfoDto;
 import com.xy.utils.PageBean;
@@ -9,6 +10,7 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import javax.validation.Valid;
 import java.util.List;
 import java.util.Map;
 
@@ -26,6 +28,7 @@ public interface DeviceInfoService {
     /**
      * 简单商户设备分页
      * 只返回设备ID和名称
+     *
      * @param dto
      * @return
      */
@@ -109,6 +112,16 @@ public interface DeviceInfoService {
     @PostMapping("page")
     R<PageBean<DeviceInfoDto.Vo2>> page(@RequestBody DeviceInfoDto.Page page);
 
+    /**
+     * 设备流水统计
+     *
+     * @param dto
+     * @return
+     */
+    @PostMapping("deviceFlowCountPage")
+    R<PageBean<DeviceDataDto.DeviceFlowCountVO>> deviceFlowCountPage(@RequestBody @Valid DeviceDataDto.DeviceFlowCountDTO dto);
+
+
     /**
      * 更新商户点位
      *
@@ -218,6 +231,7 @@ public interface DeviceInfoService {
 
     @PostMapping("updateLonByPlaceId")
     R updateLonByPlaceId(@RequestBody @Validated DeviceInfoDto.UpdateLonByPlaceId dto);
+
     /**
      * 激活数量统计
      *