Explorar o código

商户佣金费用收益每日统计任务(不含今天) 每日凌晨1点执行

tanbin hai 1 ano
pai
achega
bda38f7aba
Modificáronse 26 ficheiros con 1309 adicións e 1 borrados
  1. 19 0
      device-api-cloud/src/main/java/com/xy/feign/MercFeeCountDayFeign.java
  2. 19 0
      device-api-cloud/src/main/java/com/xy/feign/MercFeeCountMonthFeign.java
  3. 19 0
      device-api-cloud/src/main/java/com/xy/feign/MercFeeSettleFeign.java
  4. 13 0
      device-api-service-merc-mini/src/main/java/com/xy/controller/MercFeeCountController.java
  5. 63 0
      device-api-service/src/main/java/com/xy/entity/MercFeeCountDay.java
  6. 67 0
      device-api-service/src/main/java/com/xy/entity/MercFeeCountMonth.java
  7. 67 0
      device-api-service/src/main/java/com/xy/entity/MercFeeSettle.java
  8. 333 0
      device-api-service/src/main/java/com/xy/job/MercFeeCountDayJob.java
  9. 29 0
      device-api-service/src/main/java/com/xy/job/MercFeeCountMonthJob.java
  10. 16 0
      device-api-service/src/main/java/com/xy/mapper/MercFeeCountDayMapper.java
  11. 16 0
      device-api-service/src/main/java/com/xy/mapper/MercFeeCountMonthMapper.java
  12. 16 0
      device-api-service/src/main/java/com/xy/mapper/MercFeeSettleMapper.java
  13. 18 0
      device-api-service/src/main/java/com/xy/mapper/mapper/MercFeeCountDayMapper.xml
  14. 20 0
      device-api-service/src/main/java/com/xy/mapper/mapper/MercFeeCountMonthMapper.xml
  15. 19 0
      device-api-service/src/main/java/com/xy/mapper/mapper/MercFeeSettleMapper.xml
  16. 1 1
      device-api-service/src/main/java/com/xy/service/DeviceChargingHistoryServiceImpl.java
  17. 85 0
      device-api-service/src/main/java/com/xy/service/MercFeeCountDayServiceImpl.java
  18. 85 0
      device-api-service/src/main/java/com/xy/service/MercFeeCountMonthServiceImpl.java
  19. 85 0
      device-api-service/src/main/java/com/xy/service/MercFeeSettleServiceImpl.java
  20. 1 0
      device-api/src/main/java/com/xy/dto/DeviceChargingHistoryDto.java
  21. 93 0
      device-api/src/main/java/com/xy/dto/MercFeeCountDayDto.java
  22. 89 0
      device-api/src/main/java/com/xy/dto/MercFeeCountMonthDto.java
  23. 88 0
      device-api/src/main/java/com/xy/dto/MercFeeSettleDto.java
  24. 16 0
      device-api/src/main/java/com/xy/service/MercFeeCountDayService.java
  25. 16 0
      device-api/src/main/java/com/xy/service/MercFeeCountMonthService.java
  26. 16 0
      device-api/src/main/java/com/xy/service/MercFeeSettleService.java

+ 19 - 0
device-api-cloud/src/main/java/com/xy/feign/MercFeeCountDayFeign.java

@@ -0,0 +1,19 @@
+package com.xy.feign;
+
+import com.xy.service.MercFeeCountDayService;
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * <p>
+ * 商户佣金费用收益每日统计(不含今天) feign
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface MercFeeCountDayFeign extends MercFeeCountDayService {
+
+}

+ 19 - 0
device-api-cloud/src/main/java/com/xy/feign/MercFeeCountMonthFeign.java

@@ -0,0 +1,19 @@
+package com.xy.feign;
+
+import com.xy.service.MercFeeCountMonthService;
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * <p>
+ * 商户佣金费用收益每月统计(不含本月) feign
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface MercFeeCountMonthFeign extends MercFeeCountMonthService {
+
+}

+ 19 - 0
device-api-cloud/src/main/java/com/xy/feign/MercFeeSettleFeign.java

@@ -0,0 +1,19 @@
+package com.xy.feign;
+
+import com.xy.service.MercFeeSettleService;
+import com.xy.FeignInterceptor;
+import com.xy.consts.ServiceConsts;
+import org.springframework.cloud.openfeign.FeignClient;
+
+/**
+ * <p>
+ * 商户佣金费用结算 feign
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@FeignClient(value = ServiceConsts.SERVICE_NAME, configuration = FeignInterceptor.class)
+public interface MercFeeSettleFeign extends MercFeeSettleService {
+
+}

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

@@ -0,0 +1,13 @@
+package com.xy.controller;
+
+import com.xy.annotate.RestMappingController;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+@Api(tags = "商户-收益概览")
+@RestMappingController("merc-api/fee")
+public class MercFeeCountController {
+
+
+}

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

@@ -0,0 +1,63 @@
+package com.xy.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 商户佣金费用收益每日统计(不含今天)
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "MercFeeCountDay对象", description = "商户佣金费用收益每日统计(不含今天)")
+public class MercFeeCountDay implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @ApiModelProperty(value = "商户ID")
+    private Long mercId;
+
+    @ApiModelProperty(value = "父商户ID")
+    private Long parentMercId;
+
+    @ApiModelProperty(value = "统计日期20220603")
+    private Integer dateValue;
+
+    @ApiModelProperty(value = "缴费金额")
+    private Integer payMoney;
+
+    @ApiModelProperty(value = "佣金")
+    private Integer brokerage;
+
+    @ApiModelProperty(value = "缴费类型")
+    private Integer feeType;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updateTime;
+
+
+}

+ 67 - 0
device-api-service/src/main/java/com/xy/entity/MercFeeCountMonth.java

@@ -0,0 +1,67 @@
+package com.xy.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 商户佣金费用收益每月统计(不含本月)
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "MercFeeCountMonth对象", description = "商户佣金费用收益每月统计(不含本月)")
+public class MercFeeCountMonth implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @ApiModelProperty(value = "商户ID")
+    private Long mercId;
+
+
+    @ApiModelProperty(value = "统计日期202206")
+    private Integer dateValue;
+
+    @ApiModelProperty(value = "缴费金额")
+    private Integer payMoney;
+
+    @ApiModelProperty(value = "佣金")
+    private Integer brokerage;
+
+    @ApiModelProperty(value = "缴费类型")
+    private Integer feeType;
+
+    @ApiModelProperty(value = "创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "是否确认")
+    private Boolean verify;
+
+    @ApiModelProperty(value = "确认时间")
+    private LocalDateTime verifyTime;
+
+
+}

+ 67 - 0
device-api-service/src/main/java/com/xy/entity/MercFeeSettle.java

@@ -0,0 +1,67 @@
+package com.xy.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 商户佣金费用结算
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="MercFeeSettle对象", description="商户佣金费用结算")
+public class MercFeeSettle implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "id")
+    @TableId(value = "id", type = IdType.ASSIGN_ID)
+    private Long id;
+
+    @ApiModelProperty(value = "商户ID")
+    private Long mercId;
+
+    @ApiModelProperty(value = "结算金额")
+    private Integer settleMoney;
+
+    @ApiModelProperty(value = "申请时间")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "申请人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUser;
+
+    @ApiModelProperty(value = "更新时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "结算状态(1未结算、结算中、2已结算)")
+    private Integer settleState;
+
+    @ApiModelProperty(value = "结算完成时间")
+    private LocalDateTime finishSettleTime;
+
+    @ApiModelProperty(value = "发票图片(最多支持4个,|分隔)")
+    private String titleImg;
+
+    @ApiModelProperty(value = "结算人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long updateUser;
+
+
+}

+ 333 - 0
device-api-service/src/main/java/com/xy/job/MercFeeCountDayJob.java

@@ -0,0 +1,333 @@
+package com.xy.job;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.StrUtil;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xy.annotate.RestMappingController;
+import com.xy.device.EnumDeviceActiveStatus;
+import com.xy.dto.*;
+import com.xy.dto.be.MercDto;
+import com.xy.entity.MercFeeCountDay;
+import com.xy.enums.MercStatus;
+import com.xy.error.CommRuntimeException;
+import com.xy.merc.EnumMercDeviceAlgorithmChargingPayType;
+import com.xy.service.*;
+import com.xy.service.be.MercFeignService;
+import com.xy.utils.LambdaUtils;
+import com.xy.utils.PageBean;
+import com.xy.utils.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+import java.time.LocalDateTime;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * 商户佣金费用收益每日统计任务(不含今天) 每日凌晨1点执行
+ */
+@Slf4j
+@Component
+@RequiredArgsConstructor
+@Api(tags = "商户佣金费用收益每日统计任务")
+@RestMappingController("job/feeCountDay")
+public class MercFeeCountDayJob {
+
+
+    private final DeviceInfoService deviceInfoService;
+
+    private final MercFeignService mercFeignService;
+
+    private final DeviceChargingHistoryServiceImpl deviceChargingHistoryService;
+
+    private final MercFeeCountDayServiceImpl mercFeeCountDayService;
+
+    private final DeviceAlgorithmChargingHistoryServiceImpl deviceAlgorithmChargingHistoryService;
+
+    private final MercDeviceAlgorithmChargingService mercDeviceAlgorithmChargingService;
+
+    private final DeviceSimChargeServiceImpl deviceSimChargeService;
+
+    @PostMapping("excuteJob")
+    @ApiOperation("指定日期执行")
+    public R excuteJob(@RequestBody @Validated MercFeeCountDayDto.ExcuteDayDTO dto) {
+        return R.ok(dayJob(dto.getDate()));
+    }
+
+    /**
+     * 商户佣金费用收益每日统计(不含今天)
+     * 类型 1设备管理费。2设备激活费。3算法扣费标准。4流量卡费
+     *
+     * @param date yyyyMMdd
+     * @return
+     */
+    @XxlJob("mercFeeCountDayJob")
+    public ReturnT<String> dayJob(String date) {
+        log.info("-----------商户佣金费用收益每日统计 开始-----------");
+        long startTime = System.currentTimeMillis();
+        DateTime yesterday = DateUtil.yesterday();
+        String queryDay = DateUtil.format(yesterday, DatePattern.PURE_DATE_PATTERN);
+        if (StrUtil.isNotEmpty(date)) {
+            queryDay = date;
+
+            //指定日期需要判断是否重复执行
+            MercFeeCountDayDto.SelectList selectList = new MercFeeCountDayDto.SelectList();
+            selectList.setDateValue(Integer.valueOf(queryDay));
+            mercFeeCountDayService.list(selectList);
+            List<MercFeeCountDayDto.Vo> vos = R.feignCheckData(mercFeeCountDayService.list(selectList));
+            if (CollUtil.isEmpty(vos)) {
+                throw new CommRuntimeException("已存在日期【" + date + "】的数据,请勿重复执行!");
+            }
+
+        }
+        Integer dateValue = Integer.valueOf(queryDay);
+        LocalDateTime dayTime = LocalDateTimeUtil.parse(queryDay);
+        LocalDateTime beginTime = LocalDateTimeUtil.beginOfDay(dayTime);
+        LocalDateTime endTime = LocalDateTimeUtil.endOfDay(dayTime);
+
+        List<String> columnsMerc = Arrays.asList(LambdaUtils.getUnderlineCaseName(MercDto.Vo::getId));
+
+        List<MercDto.Vo> approvedMercList = getApprovedMercList(columnsMerc);
+        if (CollUtil.isEmpty(approvedMercList)) {
+            return ReturnT.SUCCESS;
+        }
+
+
+        for (MercDto.Vo merc : approvedMercList) {
+            Long parentMercId = merc.getId();
+            //~~~~~~~~~~~~~1设备管理费
+            PageBean<DeviceChargingHistoryDto.PageVo> pageVoPageBean = getDeviceManagerFeeMerc(parentMercId, beginTime, endTime);
+            List<DeviceChargingHistoryDto.PageVo> records = pageVoPageBean.getRecords();
+            if (CollUtil.isNotEmpty(records)) {
+                //根据设备分组获取,每台设备缴费金额
+                Map<Long, Integer> devicePayMoneyMap = records.stream()
+                        .collect(Collectors.groupingBy(DeviceChargingHistoryDto.PageVo::getMercId,
+                                Collectors.summingInt(DeviceChargingHistoryDto.PageVo::getChargingMoney)));
+                //根据设备分组获取,每台设备佣金金额
+                Map<Long, Integer> deviceAgentMoneyMap = records.stream()
+                        .collect(Collectors.groupingBy(DeviceChargingHistoryDto.PageVo::getMercId,
+                                Collectors.summingInt(DeviceChargingHistoryDto.PageVo::getAgentMoney)));
+                Set<Long> subMercIdSet = devicePayMoneyMap.keySet();
+                List<MercFeeCountDay> saveMercFeeCountList = new ArrayList<>();
+                for (Long mercId : subMercIdSet) {
+                    Integer payMoney = devicePayMoneyMap.get(mercId);
+                    Integer brokerage = deviceAgentMoneyMap.get(mercId);
+                    MercFeeCountDay deviceDayFee = new MercFeeCountDay();
+                    deviceDayFee.setFeeType(1);
+                    deviceDayFee.setParentMercId(parentMercId);
+                    deviceDayFee.setDateValue(dateValue);
+                    deviceDayFee.setPayMoney(payMoney);
+                    deviceDayFee.setBrokerage(brokerage);
+                    deviceDayFee.setMercId(mercId);
+                    deviceDayFee.setParentMercId(parentMercId);
+                    saveMercFeeCountList.add(deviceDayFee);
+                }
+                mercFeeCountDayService.saveBatch(saveMercFeeCountList);
+            }
+
+            //~~~~~~~~~~~~~1设备管理费
+
+            //~~~~~~~~~~~~~2设备激活费
+            PageBean<DeviceAlgorithmChargingHistoryDto.PageByTopMercVO> deviceActiveFeeByMerc = getDeviceActiveFeeByMerc(parentMercId, beginTime, endTime);
+            List<DeviceAlgorithmChargingHistoryDto.PageByTopMercVO> deviceActiveFeeList = deviceActiveFeeByMerc.getRecords();
+            if (CollUtil.isNotEmpty(deviceActiveFeeList)) {
+                //根据设备分组获取,每台设备缴费金额
+                Map<Long, Integer> devicePayMoneyMap = deviceActiveFeeList.stream()
+                        .collect(Collectors.groupingBy(DeviceAlgorithmChargingHistoryDto.PageByTopMercVO::getMercId,
+                                Collectors.summingInt(DeviceAlgorithmChargingHistoryDto.PageByTopMercVO::getChargingMoney)));
+                //根据设备分组获取,每台设备佣金金额
+                Map<Long, Integer> deviceAgentMoneyMap = deviceActiveFeeList.stream()
+                        .collect(Collectors.groupingBy(DeviceAlgorithmChargingHistoryDto.PageByTopMercVO::getMercId,
+                                Collectors.summingInt(DeviceAlgorithmChargingHistoryDto.PageByTopMercVO::getAgentMoney)));
+                Set<Long> subMercIdSet = devicePayMoneyMap.keySet();
+                List<MercFeeCountDay> saveMercFeeCountList = new ArrayList<>();
+                for (Long mercId : subMercIdSet) {
+                    Integer payMoney = devicePayMoneyMap.get(mercId);
+                    Integer brokerage = deviceAgentMoneyMap.get(mercId);
+                    MercFeeCountDay deviceDayFee = new MercFeeCountDay();
+                    deviceDayFee.setFeeType(2);
+                    deviceDayFee.setParentMercId(parentMercId);
+                    deviceDayFee.setDateValue(dateValue);
+                    deviceDayFee.setPayMoney(payMoney);
+                    deviceDayFee.setBrokerage(brokerage);
+                    deviceDayFee.setMercId(mercId);
+                    deviceDayFee.setParentMercId(parentMercId);
+                    saveMercFeeCountList.add(deviceDayFee);
+                }
+                mercFeeCountDayService.saveBatch(saveMercFeeCountList);
+            }
+
+            //~~~~~~~~~~~~~2设备激活费
+
+            //~~~~~~~~~~~~~3算法服务费
+            PageBean<MercDeviceAlgorithmChargingDto.PageByTopMercVO> deviceAgFeeByMerc = getDeviceAgFeeByMerc(parentMercId, beginTime, endTime);
+            List<MercDeviceAlgorithmChargingDto.PageByTopMercVO> deviceAgFeeList = deviceAgFeeByMerc.getRecords();
+            if (CollUtil.isNotEmpty(deviceAgFeeList)) {
+                //根据设备分组获取,每台设备缴费金额
+                Map<Long, Integer> devicePayMoneyMap = deviceAgFeeList.stream()
+                        .collect(Collectors.groupingBy(MercDeviceAlgorithmChargingDto.PageByTopMercVO::getMercId,
+                                Collectors.summingInt(MercDeviceAlgorithmChargingDto.PageByTopMercVO::getFeeBalance)));
+                //根据设备分组获取,每台设备佣金金额
+                Map<Long, Integer> deviceAgentMoneyMap = deviceAgFeeList.stream()
+                        .collect(Collectors.groupingBy(MercDeviceAlgorithmChargingDto.PageByTopMercVO::getMercId,
+                                Collectors.summingInt(MercDeviceAlgorithmChargingDto.PageByTopMercVO::getAgentMoney)));
+                Set<Long> subMercIdSet = devicePayMoneyMap.keySet();
+                List<MercFeeCountDay> saveMercFeeCountList = new ArrayList<>();
+                for (Long mercId : subMercIdSet) {
+                    Integer payMoney = devicePayMoneyMap.get(mercId);
+                    Integer brokerage = deviceAgentMoneyMap.get(mercId);
+                    MercFeeCountDay deviceDayFee = new MercFeeCountDay();
+                    deviceDayFee.setFeeType(2);
+                    deviceDayFee.setParentMercId(parentMercId);
+                    deviceDayFee.setDateValue(dateValue);
+                    deviceDayFee.setPayMoney(payMoney);
+                    deviceDayFee.setBrokerage(brokerage);
+                    deviceDayFee.setMercId(mercId);
+                    deviceDayFee.setParentMercId(parentMercId);
+                    saveMercFeeCountList.add(deviceDayFee);
+                }
+                mercFeeCountDayService.saveBatch(saveMercFeeCountList);
+            }
+            //~~~~~~~~~~~~~3算法服务费
+
+            //~~~~~~~~~~~~~4流量卡费
+            PageBean<DeviceSimChargeDto.PageByTopMercVO> simFeeByMerc = getSimFeeByMerc(parentMercId, beginTime, endTime);
+            List<DeviceSimChargeDto.PageByTopMercVO> simFeeList = simFeeByMerc.getRecords();
+            if (CollUtil.isNotEmpty(simFeeList)) {
+                //根据设备分组获取,每台设备缴费金额
+                Map<Long, Integer> devicePayMoneyMap = simFeeList.stream()
+                        .collect(Collectors.groupingBy(DeviceSimChargeDto.PageByTopMercVO::getMercId,
+                                Collectors.summingInt(DeviceSimChargeDto.PageByTopMercVO::getMoney)));
+                //根据设备分组获取,每台设备佣金金额
+                Map<Long, Integer> deviceAgentMoneyMap = simFeeList.stream()
+                        .collect(Collectors.groupingBy(DeviceSimChargeDto.PageByTopMercVO::getMercId,
+                                Collectors.summingInt(DeviceSimChargeDto.PageByTopMercVO::getAgentMoney)));
+                Set<Long> subMercIdSet = devicePayMoneyMap.keySet();
+                List<MercFeeCountDay> saveMercFeeCountList = new ArrayList<>();
+                for (Long mercId : subMercIdSet) {
+                    Integer payMoney = devicePayMoneyMap.get(mercId);
+                    Integer brokerage = deviceAgentMoneyMap.get(mercId);
+                    MercFeeCountDay deviceDayFee = new MercFeeCountDay();
+                    deviceDayFee.setFeeType(2);
+                    deviceDayFee.setParentMercId(parentMercId);
+                    deviceDayFee.setDateValue(dateValue);
+                    deviceDayFee.setPayMoney(payMoney);
+                    deviceDayFee.setBrokerage(brokerage);
+                    deviceDayFee.setMercId(mercId);
+                    deviceDayFee.setParentMercId(parentMercId);
+                    saveMercFeeCountList.add(deviceDayFee);
+                }
+                mercFeeCountDayService.saveBatch(saveMercFeeCountList);
+            }
+            //~~~~~~~~~~~~~4流量卡费
+        }
+        return ReturnT.SUCCESS;
+    }
+
+
+    private List<MercDto.Vo> getApprovedMercList(List<String> columnsMerc) {
+        return R.feignCheckData(mercFeignService.listMerc(new MercDto.ListDTO().setStatus(String.valueOf(MercStatus.APPROVED.getCode())).setColumnList(columnsMerc)));
+    }
+
+    /**
+     * 指定商户已激活设备
+     *
+     * @param mercId
+     * @return
+     */
+    private List<DeviceInfoDto.Vo> getActiveDevicesByMercId(Long mercId) {
+        DeviceInfoDto.ListCommon listCommon = new DeviceInfoDto.ListCommon().setVo(new DeviceInfoDto.Vo().setActiveState(EnumDeviceActiveStatus.N_1.getIntCode()).setMercId(mercId));
+        return R.feignCheckData(deviceInfoService.listCommon(listCommon));
+    }
+
+    /**
+     * 获取指定商户的子商户设备管理费缴纳记录
+     *
+     * @param mercId
+     * @param beginCreateTime 开始时间
+     * @param endCreateTime   结束时间
+     * @return
+     */
+    private PageBean<DeviceChargingHistoryDto.PageVo> getDeviceManagerFeeMerc(Long mercId, LocalDateTime beginCreateTime, LocalDateTime endCreateTime) {
+        DeviceChargingHistoryDto.PageByTopMerc pageByTopMerc = new DeviceChargingHistoryDto.PageByTopMerc();
+        PageBean page = new PageBean();
+        page.setSize(-1);
+        pageByTopMerc.setCurMercId(mercId);
+        pageByTopMerc.setBeginCreateTime(beginCreateTime);
+        pageByTopMerc.setEndCreateTime(endCreateTime);
+        return R.feignCheckData(deviceChargingHistoryService.pageByTopMerc(pageByTopMerc));
+    }
+
+    /**
+     * 获取指定商户的子商户设备激活费缴纳记录
+     *
+     * @param mercId
+     * @param beginCreateTime
+     * @param endCreateTime
+     * @return
+     */
+    private PageBean<DeviceAlgorithmChargingHistoryDto.PageByTopMercVO> getDeviceActiveFeeByMerc(Long mercId, LocalDateTime beginCreateTime, LocalDateTime endCreateTime) {
+
+        DeviceAlgorithmChargingHistoryDto.PageByTopMerc pageByTopMerc = new DeviceAlgorithmChargingHistoryDto.PageByTopMerc();
+        PageBean page = new PageBean();
+        page.setSize(-1);
+        pageByTopMerc.setCurMercId(mercId);
+        pageByTopMerc.setBeginCreateTime(beginCreateTime);
+        pageByTopMerc.setEndCreateTime(endCreateTime);
+        return R.feignCheckData(deviceAlgorithmChargingHistoryService.pageByTopMerc(pageByTopMerc));
+    }
+
+    /**
+     * 获取指定商户的子商户设备算法服务费缴纳记录
+     *
+     * @param mercId
+     * @param beginCreateTime
+     * @param endCreateTime
+     * @return
+     */
+    private PageBean<MercDeviceAlgorithmChargingDto.PageByTopMercVO> getDeviceAgFeeByMerc(Long mercId, LocalDateTime beginCreateTime, LocalDateTime endCreateTime) {
+
+        MercDeviceAlgorithmChargingDto.PageByTopMerc pageByTopMerc = new MercDeviceAlgorithmChargingDto.PageByTopMerc();
+        PageBean page = new PageBean();
+        page.setSize(-1);
+        String payType = EnumMercDeviceAlgorithmChargingPayType.N_2.getCode();
+        pageByTopMerc.setPayType(Integer.valueOf(payType));
+        pageByTopMerc.setCurMercId(mercId);
+        pageByTopMerc.setBeginCreateTime(beginCreateTime);
+        pageByTopMerc.setEndCreateTime(endCreateTime);
+        return R.feignCheckData(mercDeviceAlgorithmChargingService.pageByMerc(pageByTopMerc));
+    }
+
+    /**
+     * 获取指定商户的子商户流量卡缴纳记录
+     *
+     * @param mercId
+     * @param beginCreateTime
+     * @param endCreateTime
+     * @return
+     */
+    private PageBean<DeviceSimChargeDto.PageByTopMercVO> getSimFeeByMerc(Long mercId, LocalDateTime beginCreateTime, LocalDateTime endCreateTime) {
+
+        DeviceSimChargeDto.PageByTopMerc pageByTopMerc = new DeviceSimChargeDto.PageByTopMerc();
+        PageBean page = new PageBean();
+        page.setSize(-1);
+        pageByTopMerc.setStatus(2);
+        pageByTopMerc.setCurMercId(mercId);
+        pageByTopMerc.setBeginCreateTime(beginCreateTime);
+        pageByTopMerc.setEndCreateTime(endCreateTime);
+        return R.feignCheckData(deviceSimChargeService.pageByTopMerc(pageByTopMerc));
+    }
+
+}

+ 29 - 0
device-api-service/src/main/java/com/xy/job/MercFeeCountMonthJob.java

@@ -0,0 +1,29 @@
+package com.xy.job;
+
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * 商户佣金费用收益每月统计(不含本月)
+ */
+@Slf4j
+@Component
+@AllArgsConstructor
+public class MercFeeCountMonthJob {
+
+
+    /**
+     * 商户佣金费用收益每月统计(不含本月)
+     *
+     * @return
+     */
+    @XxlJob("mercFeeCountMonthJob")
+    public ReturnT<String> monthJob() {
+
+        return ReturnT.SUCCESS;
+    }
+}

+ 16 - 0
device-api-service/src/main/java/com/xy/mapper/MercFeeCountDayMapper.java

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.xy.entity.MercFeeCountDay;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 商户佣金费用收益每日统计(不含今天) Mapper 接口
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+public interface MercFeeCountDayMapper extends BaseMapper<MercFeeCountDay> {
+
+}

+ 16 - 0
device-api-service/src/main/java/com/xy/mapper/MercFeeCountMonthMapper.java

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.xy.entity.MercFeeCountMonth;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 商户佣金费用收益每月统计(不含本月) Mapper 接口
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+public interface MercFeeCountMonthMapper extends BaseMapper<MercFeeCountMonth> {
+
+}

+ 16 - 0
device-api-service/src/main/java/com/xy/mapper/MercFeeSettleMapper.java

@@ -0,0 +1,16 @@
+package com.xy.mapper;
+
+import com.xy.entity.MercFeeSettle;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 商户佣金费用结算 Mapper 接口
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+public interface MercFeeSettleMapper extends BaseMapper<MercFeeSettle> {
+
+}

+ 18 - 0
device-api-service/src/main/java/com/xy/mapper/mapper/MercFeeCountDayMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xy.mapper.MercFeeCountDayMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.xy.entity.MercFeeCountDay">
+        <id column="id" property="id" />
+        <result column="merc_id" property="mercId" />
+        <result column="device_id" property="deviceId" />
+        <result column="date_value" property="dateValue" />
+        <result column="pay_money" property="payMoney" />
+        <result column="brokerage" property="brokerage" />
+        <result column="fee_type" property="feeType" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+    </resultMap>
+
+</mapper>

+ 20 - 0
device-api-service/src/main/java/com/xy/mapper/mapper/MercFeeCountMonthMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xy.mapper.MercFeeCountMonthMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.xy.entity.MercFeeCountMonth">
+        <id column="id" property="id" />
+        <result column="merc_id" property="mercId" />
+        <result column="device_id" property="deviceId" />
+        <result column="date_value" property="dateValue" />
+        <result column="pay_money" property="payMoney" />
+        <result column="brokerage" property="brokerage" />
+        <result column="fee_type" property="feeType" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="verify" property="verify" />
+        <result column="verify_time" property="verifyTime" />
+    </resultMap>
+
+</mapper>

+ 19 - 0
device-api-service/src/main/java/com/xy/mapper/mapper/MercFeeSettleMapper.xml

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xy.mapper.MercFeeSettleMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.xy.entity.MercFeeSettle">
+        <id column="id" property="id" />
+        <result column="merc_id" property="mercId" />
+        <result column="settle_money" property="settleMoney" />
+        <result column="create_time" property="createTime" />
+        <result column="create_user" property="createUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="settle_state" property="settleState" />
+        <result column="finish_settle_time" property="finishSettleTime" />
+        <result column="title_img" property="titleImg" />
+        <result column="update_user" property="updateUser" />
+    </resultMap>
+
+</mapper>

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

@@ -213,7 +213,7 @@ public class DeviceChargingHistoryServiceImpl extends ServiceImpl<DeviceCharging
                             DeviceChargingHistoryDto.MySpendPageVO::getMercId, DeviceChargingHistoryDto.MySpendPageVO::getMercName, MercDto.Vo::getId, MercDto.Vo::getName)
                     .builder();
             List<Long> deviceIds = records.stream().map(DeviceChargingHistoryDto.MySpendPageVO::getDeviceId).distinct().collect(Collectors.toList());
- 
+
             List<DeviceCharging> deviceChargings = deviceChargingService.listByIds(deviceIds);
             Map<Long, DeviceCharging> deviceChargingMap = MapUtil.newHashMap();
             if (CollUtil.isNotEmpty(deviceChargings)) {

+ 85 - 0
device-api-service/src/main/java/com/xy/service/MercFeeCountDayServiceImpl.java

@@ -0,0 +1,85 @@
+package com.xy.service;
+
+import com.xy.entity.MercFeeCountDay;
+import com.xy.mapper.MercFeeCountDayMapper;
+import com.xy.service.MercFeeCountDayService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+
+import java.util.List;
+import com.xy.utils.R;
+import com.xy.utils.PageBean;
+import com.xy.dto.MercFeeCountDayDto;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.PostMapping;
+import io.swagger.annotations.ApiOperation;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xy.utils.MybatisPlusQuery;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.validation.annotation.Validated;
+import com.xy.utils.Emptys;
+
+import static com.xy.utils.Beans.copy;
+import static com.xy.utils.PlusBeans.toIPage;
+import static com.xy.utils.PlusBeans.toPageBean;
+
+
+/**
+* <p>
+* 商户佣金费用收益每日统计(不含今天) 服务实现类
+* </p>
+*
+* @author 谭斌
+* @since 2024-04-23
+*/
+@Service
+@AllArgsConstructor
+@Api(tags = "商户佣金费用收益每日统计(不含今天)")
+public class MercFeeCountDayServiceImpl extends ServiceImpl<MercFeeCountDayMapper, MercFeeCountDay> implements MercFeeCountDayService {
+
+    @PostMapping("obj")
+    @ApiOperation("对象查询")
+    public R<MercFeeCountDayDto.Vo> obj(@RequestBody MercFeeCountDayDto.Vo vo) {
+        MercFeeCountDayDto.SelectList selectList = copy(MercFeeCountDayDto.SelectList.class, vo);
+        List<MercFeeCountDayDto.Vo> list = list(selectList).getData();
+        if(Emptys.check(list)) {
+            return R.ok(list.get(0));
+        }
+        return R.ok();
+    }
+
+    @PostMapping("list")
+    @ApiOperation("集合查询")
+    public R<List<MercFeeCountDayDto.Vo>> list(@RequestBody MercFeeCountDayDto.SelectList selectList) {
+        LambdaQueryWrapper<MercFeeCountDay> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, MercFeeCountDay.class).build();
+        List<MercFeeCountDay> list = list(lambdaQueryWrapper);
+        return R.ok(copy(MercFeeCountDayDto.Vo.class, list));
+    }
+
+    @PostMapping("page")
+    @ApiOperation("分页查询")
+    public R<PageBean<MercFeeCountDayDto.Vo>> page(@RequestBody MercFeeCountDayDto.Page page) {
+        PageBean pageBean = page.getPage();
+        LambdaQueryWrapper<MercFeeCountDay> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, MercFeeCountDay.class).build();
+        IPage<MercFeeCountDay> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
+        return R.ok(toPageBean(MercFeeCountDayDto.Vo.class, iPage));
+    }
+
+    @PostMapping("save")
+    @ApiOperation("添加")
+    public R save(@RequestBody @Validated MercFeeCountDayDto.Save save) {
+        MercFeeCountDay saveInfo = copy(MercFeeCountDay.class, save);
+        save(saveInfo);
+        return R.ok();
+    }
+
+    @PostMapping("update")
+    @ApiOperation("修改")
+    public R update(@RequestBody @Validated MercFeeCountDayDto.Update update) {
+        MercFeeCountDay updateInfo = copy(MercFeeCountDay.class, update);
+        updateById(updateInfo);
+        return R.ok();
+    }
+}

+ 85 - 0
device-api-service/src/main/java/com/xy/service/MercFeeCountMonthServiceImpl.java

@@ -0,0 +1,85 @@
+package com.xy.service;
+
+import com.xy.entity.MercFeeCountMonth;
+import com.xy.mapper.MercFeeCountMonthMapper;
+import com.xy.service.MercFeeCountMonthService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+
+import java.util.List;
+import com.xy.utils.R;
+import com.xy.utils.PageBean;
+import com.xy.dto.MercFeeCountMonthDto;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.PostMapping;
+import io.swagger.annotations.ApiOperation;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xy.utils.MybatisPlusQuery;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.validation.annotation.Validated;
+import com.xy.utils.Emptys;
+
+import static com.xy.utils.Beans.copy;
+import static com.xy.utils.PlusBeans.toIPage;
+import static com.xy.utils.PlusBeans.toPageBean;
+
+
+/**
+* <p>
+* 商户佣金费用收益每月统计(不含本月) 服务实现类
+* </p>
+*
+* @author 谭斌
+* @since 2024-04-23
+*/
+@Service
+@AllArgsConstructor
+@Api(tags = "商户佣金费用收益每月统计(不含本月)")
+public class MercFeeCountMonthServiceImpl extends ServiceImpl<MercFeeCountMonthMapper, MercFeeCountMonth> implements MercFeeCountMonthService {
+
+    @PostMapping("obj")
+    @ApiOperation("对象查询")
+    public R<MercFeeCountMonthDto.Vo> obj(@RequestBody MercFeeCountMonthDto.Vo vo) {
+        MercFeeCountMonthDto.SelectList selectList = copy(MercFeeCountMonthDto.SelectList.class, vo);
+        List<MercFeeCountMonthDto.Vo> list = list(selectList).getData();
+        if(Emptys.check(list)) {
+            return R.ok(list.get(0));
+        }
+        return R.ok();
+    }
+
+    @PostMapping("list")
+    @ApiOperation("集合查询")
+    public R<List<MercFeeCountMonthDto.Vo>> list(@RequestBody MercFeeCountMonthDto.SelectList selectList) {
+        LambdaQueryWrapper<MercFeeCountMonth> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, MercFeeCountMonth.class).build();
+        List<MercFeeCountMonth> list = list(lambdaQueryWrapper);
+        return R.ok(copy(MercFeeCountMonthDto.Vo.class, list));
+    }
+
+    @PostMapping("page")
+    @ApiOperation("分页查询")
+    public R<PageBean<MercFeeCountMonthDto.Vo>> page(@RequestBody MercFeeCountMonthDto.Page page) {
+        PageBean pageBean = page.getPage();
+        LambdaQueryWrapper<MercFeeCountMonth> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, MercFeeCountMonth.class).build();
+        IPage<MercFeeCountMonth> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
+        return R.ok(toPageBean(MercFeeCountMonthDto.Vo.class, iPage));
+    }
+
+    @PostMapping("save")
+    @ApiOperation("添加")
+    public R save(@RequestBody @Validated MercFeeCountMonthDto.Save save) {
+        MercFeeCountMonth saveInfo = copy(MercFeeCountMonth.class, save);
+        save(saveInfo);
+        return R.ok();
+    }
+
+    @PostMapping("update")
+    @ApiOperation("修改")
+    public R update(@RequestBody @Validated MercFeeCountMonthDto.Update update) {
+        MercFeeCountMonth updateInfo = copy(MercFeeCountMonth.class, update);
+        updateById(updateInfo);
+        return R.ok();
+    }
+}

+ 85 - 0
device-api-service/src/main/java/com/xy/service/MercFeeSettleServiceImpl.java

@@ -0,0 +1,85 @@
+package com.xy.service;
+
+import com.xy.entity.MercFeeSettle;
+import com.xy.mapper.MercFeeSettleMapper;
+import com.xy.service.MercFeeSettleService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import io.swagger.annotations.Api;
+import lombok.AllArgsConstructor;
+
+import java.util.List;
+import com.xy.utils.R;
+import com.xy.utils.PageBean;
+import com.xy.dto.MercFeeSettleDto;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.PostMapping;
+import io.swagger.annotations.ApiOperation;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.xy.utils.MybatisPlusQuery;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.springframework.validation.annotation.Validated;
+import com.xy.utils.Emptys;
+
+import static com.xy.utils.Beans.copy;
+import static com.xy.utils.PlusBeans.toIPage;
+import static com.xy.utils.PlusBeans.toPageBean;
+
+
+/**
+* <p>
+* 商户佣金费用结算 服务实现类
+* </p>
+*
+* @author 谭斌
+* @since 2024-04-23
+*/
+@Service
+@AllArgsConstructor
+@Api(tags = "商户佣金费用结算")
+public class MercFeeSettleServiceImpl extends ServiceImpl<MercFeeSettleMapper, MercFeeSettle> implements MercFeeSettleService {
+
+    @PostMapping("obj")
+    @ApiOperation("对象查询")
+    public R<MercFeeSettleDto.Vo> obj(@RequestBody MercFeeSettleDto.Vo vo) {
+        MercFeeSettleDto.SelectList selectList = copy(MercFeeSettleDto.SelectList.class, vo);
+        List<MercFeeSettleDto.Vo> list = list(selectList).getData();
+        if(Emptys.check(list)) {
+            return R.ok(list.get(0));
+        }
+        return R.ok();
+    }
+
+    @PostMapping("list")
+    @ApiOperation("集合查询")
+    public R<List<MercFeeSettleDto.Vo>> list(@RequestBody MercFeeSettleDto.SelectList selectList) {
+        LambdaQueryWrapper<MercFeeSettle> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, MercFeeSettle.class).build();
+        List<MercFeeSettle> list = list(lambdaQueryWrapper);
+        return R.ok(copy(MercFeeSettleDto.Vo.class, list));
+    }
+
+    @PostMapping("page")
+    @ApiOperation("分页查询")
+    public R<PageBean<MercFeeSettleDto.Vo>> page(@RequestBody MercFeeSettleDto.Page page) {
+        PageBean pageBean = page.getPage();
+        LambdaQueryWrapper<MercFeeSettle> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, MercFeeSettle.class).build();
+        IPage<MercFeeSettle> iPage = page(toIPage(pageBean), lambdaQueryWrapper);
+        return R.ok(toPageBean(MercFeeSettleDto.Vo.class, iPage));
+    }
+
+    @PostMapping("save")
+    @ApiOperation("添加")
+    public R save(@RequestBody @Validated MercFeeSettleDto.Save save) {
+        MercFeeSettle saveInfo = copy(MercFeeSettle.class, save);
+        save(saveInfo);
+        return R.ok();
+    }
+
+    @PostMapping("update")
+    @ApiOperation("修改")
+    public R update(@RequestBody @Validated MercFeeSettleDto.Update update) {
+        MercFeeSettle updateInfo = copy(MercFeeSettle.class, update);
+        updateById(updateInfo);
+        return R.ok();
+    }
+}

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

@@ -275,6 +275,7 @@ public class DeviceChargingHistoryDto {
         private String orderId;
         @ApiModelProperty(value = "设备id")
         private Long deviceId;
+     
         @ApiModelProperty(value = "续费金额")
         private Integer chargingMoney;
         @ApiModelProperty(value = "续费数量")

+ 93 - 0
device-api/src/main/java/com/xy/dto/MercFeeCountDayDto.java

@@ -0,0 +1,93 @@
+package com.xy.dto;
+
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xy.utils.PageBean;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 商户佣金费用收益每日统计(不含今天)
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+public class MercFeeCountDayDto {
+    @Data
+    @Accessors(chain = true)
+    public static class ExcuteDayDTO {
+        @NotBlank(message = "日期不可为空yyyyMMdd")
+        @ApiModelProperty(value = "分页对象", required = true)
+        private String date;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class SelectList extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Page extends Vo {
+
+        @ApiModelProperty(value = "分页对象", required = true)
+        private PageBean page;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Save extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Update extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty(value = "id")
+        private Long id;
+
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+        @ApiModelProperty(value = "父商户ID")
+        private Long parentMercId;
+
+        @ApiModelProperty(value = "统计日期20220603")
+        private Integer dateValue;
+
+        @ApiModelProperty(value = "缴费金额")
+        private Integer payMoney;
+
+        @ApiModelProperty(value = "佣金")
+        private Integer brokerage;
+
+        @ApiModelProperty(value = "缴费类型")
+        private Integer feeType;
+
+        @ApiModelProperty(value = "创建时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime createTime;
+
+        @ApiModelProperty(value = "更新时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime updateTime;
+
+
+    }
+
+}

+ 89 - 0
device-api/src/main/java/com/xy/dto/MercFeeCountMonthDto.java

@@ -0,0 +1,89 @@
+package com.xy.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xy.utils.PageBean;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 商户佣金费用收益每月统计(不含本月)
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+public class MercFeeCountMonthDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class SelectList extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Page extends Vo {
+
+        @ApiModelProperty(value = "分页对象", required = true)
+        private PageBean page;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Save extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Update extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty(value = "id")
+        private Long id;
+
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+
+        @ApiModelProperty(value = "统计日期202206")
+        private Integer dateValue;
+
+        @ApiModelProperty(value = "缴费金额")
+        private Integer payMoney;
+
+        @ApiModelProperty(value = "佣金")
+        private Integer brokerage;
+
+        @ApiModelProperty(value = "缴费类型")
+        private Integer feeType;
+
+        @ApiModelProperty(value = "创建时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime createTime;
+
+        @ApiModelProperty(value = "更新时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime updateTime;
+
+        @ApiModelProperty(value = "是否确认")
+        private Boolean verify;
+
+        @ApiModelProperty(value = "确认时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime verifyTime;
+
+
+    }
+
+}

+ 88 - 0
device-api/src/main/java/com/xy/dto/MercFeeSettleDto.java

@@ -0,0 +1,88 @@
+package com.xy.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.xy.utils.PageBean;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 商户佣金费用结算
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+public class MercFeeSettleDto {
+
+    @Data
+    @Accessors(chain = true)
+    public static class SelectList extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Page extends Vo {
+
+        @ApiModelProperty(value = "分页对象", required = true)
+        private PageBean page;
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Save extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Update extends Vo {
+
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class Vo {
+
+        @ApiModelProperty(value = "id")
+        private Long id;
+
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+        @ApiModelProperty(value = "结算金额")
+        private Integer settleMoney;
+
+        @ApiModelProperty(value = "申请时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime createTime;
+
+        @ApiModelProperty(value = "申请人")
+        private Long createUser;
+
+        @ApiModelProperty(value = "更新时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime updateTime;
+
+        @ApiModelProperty(value = "结算状态(1未结算、结算中、2已结算)")
+        private Integer settleState;
+
+        @ApiModelProperty(value = "结算完成时间")
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+        private LocalDateTime finishSettleTime;
+
+        @ApiModelProperty(value = "发票图片(最多支持4个,|分隔)")
+        private String titleImg;
+
+        @ApiModelProperty(value = "结算人")
+        private Long updateUser;
+
+
+    }
+
+}

+ 16 - 0
device-api/src/main/java/com/xy/service/MercFeeCountDayService.java

@@ -0,0 +1,16 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+
+/**
+ * <p>
+ * 商户佣金费用收益每日统计(不含今天) 服务类
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@RestMappingController("/merc-fee-count-day")
+public interface MercFeeCountDayService {
+
+}

+ 16 - 0
device-api/src/main/java/com/xy/service/MercFeeCountMonthService.java

@@ -0,0 +1,16 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+
+/**
+ * <p>
+ * 商户佣金费用收益每月统计(不含本月) 服务类
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@RestMappingController("/merc-fee-count-month")
+public interface MercFeeCountMonthService {
+
+}

+ 16 - 0
device-api/src/main/java/com/xy/service/MercFeeSettleService.java

@@ -0,0 +1,16 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+
+/**
+ * <p>
+ * 商户佣金费用结算 服务类
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
+@RestMappingController("/merc-fee-settle")
+public interface MercFeeSettleService {
+
+}