Prechádzať zdrojové kódy

顶级商户-设备管理费明细

tanbin 1 rok pred
rodič
commit
9db97ac41a

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

@@ -26,4 +26,11 @@ public class DeviceChargingHistoryController {
         page.setMercId(MercAuthUtils.getMercId());
         return deviceChargingHistoryService.page(page);
     }
+
+    @PostMapping("pageByTopMerc")
+    @ApiOperation("顶级商户分页查询")
+    public R<PageBean<DeviceChargingHistoryDto.PageVo>> pageByTopMerc(@RequestBody @Validated DeviceChargingHistoryDto.PageByTopMerc page) {
+        page.setCurMercId(MercAuthUtils.getMercId());
+        return deviceChargingHistoryService.pageByTopMerc(page);
+    }
 }

+ 73 - 3
device-api-service/src/main/java/com/xy/service/DeviceChargingHistoryServiceImpl.java

@@ -1,5 +1,7 @@
 package com.xy.service;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.map.MapUtil;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.write.style.ColumnWidth;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -11,7 +13,9 @@ import com.xy.collections.list.JArrayList;
 import com.xy.collections.list.JList;
 import com.xy.config.DeviceThreadPoolConfig;
 import com.xy.config.FileConfig;
+import com.xy.dto.DeviceChargingConfigDto;
 import com.xy.dto.DeviceChargingHistoryDto;
+import com.xy.dto.DeviceInfoDto;
 import com.xy.dto.OrderMercManageDto;
 import com.xy.dto.be.MercDto;
 import com.xy.entity.DeviceChargingHistory;
@@ -38,6 +42,8 @@ import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import static com.xy.utils.Beans.copy;
 import static com.xy.utils.PlusBeans.toIPage;
@@ -64,6 +70,10 @@ public class DeviceChargingHistoryServiceImpl extends ServiceImpl<DeviceCharging
 
     private FileConfig fileConfig;
 
+    private DeviceChargingConfigServiceImpl deviceChargingConfigService;
+
+    private DeviceInfoService deviceInfoService;
+
     @Override
     @ApiOperation("分页查询")
     public R<PageBean<DeviceChargingHistoryDto.Vo>> page(DeviceChargingHistoryDto.Page page) {
@@ -87,6 +97,66 @@ public class DeviceChargingHistoryServiceImpl extends ServiceImpl<DeviceCharging
         return R.ok(pageBean);
     }
 
+    public R<PageBean<DeviceChargingHistoryDto.PageVo>> pageByTopMerc(DeviceChargingHistoryDto.PageByTopMerc page) {
+        Long curMercId = page.getCurMercId();
+        Long chooseMercId = page.getChooseMercId();
+        List<Long> mercIds = new ArrayList<>();
+        if (chooseMercId == null) {
+            mercIds = R.feignCheckData(mercService.getAllSubMercIds(new MercDto.QuerySubDTO().setParentMercID(curMercId)));
+        } else {
+            //指定商户ID
+            mercIds.add(chooseMercId);
+        }
+
+        DeviceChargingConfigDto.DeviceManagerFeeConfigVO deviceManagerFeeConfigVO = R.feignCheckData(deviceChargingConfigService.listByFeeConfig(new DeviceChargingConfigDto.ListByFeeConfigDTO().setMercId(curMercId)));
+        List<DeviceChargingConfigDto.DeviceManagerFeeMercVO> dmFeeMercs = deviceManagerFeeConfigVO.getDmFeeMercs();
+        Map<Integer, DeviceChargingConfigDto.DeviceManagerFeeMercVO> dfmMap = MapUtil.newHashMap();
+        if (CollUtil.isNotEmpty(dmFeeMercs)) {
+            dfmMap = dmFeeMercs.stream().collect(Collectors.toMap(DeviceChargingConfigDto.DeviceManagerFeeMercVO::getDeviceType, dfm -> dfm));
+        }
+        LambdaQueryWrapper<DeviceChargingHistory> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, DeviceChargingHistory.class)
+                .ge(DeviceChargingHistory::getCreateTime, page.getBeginCreateTime())
+                .le(DeviceChargingHistory::getCreateTime, page.getEndCreateTime())
+                .in(DeviceChargingHistory::getMercId, mercIds)
+                .build()
+                .orderByDesc(DeviceChargingHistory::getCreateTime);
+        IPage<DeviceChargingHistory> iPage = page(PlusBeans.toIPage(page.getPage()), lambdaQueryWrapper);
+        PageBean<DeviceChargingHistoryDto.PageVo> pageBean = toPageBean(DeviceChargingHistoryDto.PageVo.class, iPage);
+        List<DeviceChargingHistoryDto.PageVo> records = pageBean.getRecords();
+        if (Emptys.check(records)) {
+            copy(records)
+                    .target(() -> orderMercManageService.list(new OrderMercManageDto.SelectList().setId(new JArrayList<>(records).getProperty(DeviceChargingHistoryDto.PageVo::getOrderId))).getData()
+                            , DeviceChargingHistoryDto.PageVo::getOrderId, DeviceChargingHistoryDto.PageVo::getFiles, OrderMercManageDto.Vo::getId, OrderMercManageDto.Vo::getFiles
+                    )
+                    .target(() -> mercService.list(new MercDto.SelectList().setMercIds(new JArrayList<>(records).getProperty(DeviceChargingHistoryDto.PageVo::getMercId).comparing())).getData(),
+                            DeviceChargingHistoryDto.PageVo::getMercId, DeviceChargingHistoryDto.PageVo::getMercName, MercDto.Vo::getId, MercDto.Vo::getName)
+                    .builder();
+            List<Long> deviceIds = records.stream().map(DeviceChargingHistoryDto.PageVo::getDeviceId).distinct().collect(Collectors.toList());
+
+            List<DeviceInfoDto.Vo> deviceList = R.feignCheckData(deviceInfoService.listCommon(new DeviceInfoDto.ListCommon().setDeviceIds(deviceIds)));
+            Map<Long, DeviceInfoDto.Vo> devcieMap = deviceList.stream().collect(Collectors.toMap(DeviceInfoDto.Vo::getDeviceId, d -> d));
+            for (DeviceChargingHistoryDto.PageVo record : records) {
+                Long deviceId = record.getDeviceId();
+                //初始0 代理商费用
+                record.setAgentMoney(0);
+                DeviceInfoDto.Vo device = devcieMap.get(deviceId);
+                if (device != null) {
+                    Integer deviceType = device.getDeviceType();
+                    if (!dfmMap.isEmpty() && dfmMap.get(deviceType) != null) {
+                        DeviceChargingConfigDto.DeviceManagerFeeMercVO deviceManagerFeeMercVO = dfmMap.get(deviceType);
+                        Integer extraMoney = deviceManagerFeeMercVO.getExtraMoney();
+                        //反显代理商金额
+                        record.setAgentMoney(extraMoney);
+                    }
+                }
+            }
+            pageBean.setRecords(records);
+
+        }
+        return R.ok(pageBean);
+    }
+
+
     @ApiOperation("月统计分页")
     @PostMapping("moonCountPage")
     public R<PageBean<DeviceChargingHistoryDto.MoonCountVo>> moonCountPage(@RequestBody DeviceChargingHistoryDto.MoonCountPage moonCountPage) {
@@ -121,7 +191,7 @@ public class DeviceChargingHistoryServiceImpl extends ServiceImpl<DeviceCharging
         });
         //翻译商户名称
         Beans.copy(moonCountVos).target(() -> mercService.list(new MercDto.SelectList().setMercIds(moonCountVos.getProperty(DeviceChargingHistoryDto.MoonCountVo::getMercId).comparing())).getData(),
-                DeviceChargingHistoryDto.MoonCountVo::getMercId, DeviceChargingHistoryDto.MoonCountVo::getMercName, MercDto.Vo::getId, MercDto.Vo::getName)
+                        DeviceChargingHistoryDto.MoonCountVo::getMercId, DeviceChargingHistoryDto.MoonCountVo::getMercName, MercDto.Vo::getId, MercDto.Vo::getName)
                 .builder();
         PageBean<DeviceChargingHistoryDto.MoonCountVo> pageBean = new PageBean<DeviceChargingHistoryDto.MoonCountVo>()
                 .setCurrent(iPage.getCurrent())
@@ -167,7 +237,7 @@ public class DeviceChargingHistoryServiceImpl extends ServiceImpl<DeviceCharging
         execute.end();
         //翻译商户名称
         Beans.copy(moonCountVos).target(() -> mercService.list(new MercDto.SelectList().setMercIds(moonCountVos.getProperty(DeviceChargingHistoryDto.MoonCountVo::getMercId).comparing())).getData(),
-                DeviceChargingHistoryDto.MoonCountVo::getMercId, DeviceChargingHistoryDto.MoonCountVo::getMercName, MercDto.Vo::getId, MercDto.Vo::getName)
+                        DeviceChargingHistoryDto.MoonCountVo::getMercId, DeviceChargingHistoryDto.MoonCountVo::getMercName, MercDto.Vo::getId, MercDto.Vo::getName)
                 .builder();
         return R.ok(moonCountVos.desc(DeviceChargingHistoryDto.MoonCountVo::getDate));
     }
@@ -243,4 +313,4 @@ public class DeviceChargingHistoryServiceImpl extends ServiceImpl<DeviceCharging
         @ExcelProperty(value = "续费金额")
         private Integer chargingMoney;
     }
-}
+}

+ 109 - 0
device-api/src/main/java/com/xy/dto/DeviceChargingHistoryDto.java

@@ -19,6 +19,54 @@ import java.util.List;
  * @since 2023-04-14
  */
 public class DeviceChargingHistoryDto {
+    @Data
+    @Accessors(chain = true)
+    public static class PageVo {
+
+        @ApiModelProperty(value = "id")
+        private Long id;
+
+        @ApiModelProperty(value = "商户id")
+        private Long mercId;
+
+        @ApiModelProperty(value = "订单id")
+        private String orderId;
+
+        @ApiModelProperty(value = "设备id")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "续费金额")
+        private Integer chargingMoney;
+
+        @ApiModelProperty(value = "代理商费用")
+        private Integer agentMoney;
+
+        @ApiModelProperty(value = "续费数量")
+        private Integer chargingSize;
+
+        @ApiModelProperty(value = "续费方式")
+        private Integer chargingType;
+
+        @ApiModelProperty(value = "状态")
+        private Integer status;
+
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @ApiModelProperty(value = "创建时间")
+        private LocalDateTime createTime;
+
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @ApiModelProperty(value = "更新时间")
+        private LocalDateTime updateTime;
+
+        @ApiModelProperty(value = "备注")
+        private String note;
+
+        @ApiModelProperty(value = "附件")
+        private String files;
+
+        @ApiModelProperty(value = "商户名称")
+        private String mercName;
+    }
 
     @Data
     @Accessors(chain = true)
@@ -82,6 +130,67 @@ public class DeviceChargingHistoryDto {
         private LocalDateTime endCreateTime;
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class PageByTopMerc {
+
+        @ApiModelProperty("分页对象")
+        private PageBean page;
+
+        @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 = "id")
+        private Long id;
+
+        @ApiModelProperty(value = "商户id")
+        private Long curMercId;
+
+        @ApiModelProperty(value = "指定商户id")
+        private Long chooseMercId;
+
+        @ApiModelProperty(value = "订单id")
+        private String orderId;
+
+        @ApiModelProperty(value = "设备id")
+        private Long deviceId;
+
+        @ApiModelProperty(value = "续费金额")
+        private Integer chargingMoney;
+
+        @ApiModelProperty(value = "续费数量")
+        private Integer chargingSize;
+
+        @ApiModelProperty(value = "续费方式")
+        private Integer chargingType;
+
+        @ApiModelProperty(value = "状态")
+        private Integer status;
+
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @ApiModelProperty(value = "创建时间")
+        private LocalDateTime createTime;
+
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        @ApiModelProperty(value = "更新时间")
+        private LocalDateTime updateTime;
+
+        @ApiModelProperty(value = "备注")
+        private String note;
+
+        @ApiModelProperty(value = "附件")
+        private String files;
+
+        @ApiModelProperty(value = "商户名称")
+        private String mercName;
+    }
+
+
     @Data
     @Accessors(chain = true)
     public static class MoonCount {