ソースを参照

商户佣金费用收益每月统计任务

tanbin 1 年間 前
コミット
ca46a210eb

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

@@ -42,6 +42,9 @@ public class MercFeeCountDay implements Serializable {
     @ApiModelProperty(value = "统计日期20220603")
     private Integer dateValue;
 
+    @ApiModelProperty(value = "统计日期202206")
+    private Integer monthValue;
+
     @ApiModelProperty(value = "缴费金额")
     private Integer payMoney;
 

+ 2 - 10
device-api-service/src/main/java/com/xy/job/MercFeeCountDayJob.java

@@ -62,14 +62,6 @@ public class MercFeeCountDayJob {
 
     private final DeviceSimChargeServiceImpl deviceSimChargeService;
 
-    public static void main(String[] args) {
-
-        String queryDay = "20240425";
-        LocalDate dayDate = LocalDate.parse(queryDay, DateTimeFormatter.BASIC_ISO_DATE);
-        LocalDateTime dayTime = dayDate.atStartOfDay();
-        System.out.printf(LocalDateTimeUtil.format(dayTime, DateTimeFormatter.ISO_DATE));
-
-    }
 
     @PostMapping("excuteJob")
     @ApiOperation("指定日期执行")
@@ -96,13 +88,12 @@ public class MercFeeCountDayJob {
             //指定日期需要判断是否重复执行
             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.isNotEmpty(vos)) {
                 throw new CommRuntimeException("已存在日期【" + date + "】的数据,请勿重复执行!");
             }
-
         }
+        String monthValue = StrUtil.sub(queryDay, 0, 5);
         Integer dateValue = Integer.valueOf(queryDay);
         LocalDate dayDate = LocalDate.parse(queryDay, DateTimeFormatter.BASIC_ISO_DATE);
         LocalDateTime dayTime = dayDate.atStartOfDay();
@@ -141,6 +132,7 @@ public class MercFeeCountDayJob {
                     deviceDayFee.setParentMercId(parentMercId);
                     deviceDayFee.setDateValue(dateValue);
                     deviceDayFee.setPayMoney(payMoney);
+                    deviceDayFee.setMonthValue(Integer.valueOf(monthValue));
                     deviceDayFee.setBrokerage(brokerage);
                     deviceDayFee.setMercId(mercId);
                     deviceDayFee.setParentMercId(parentMercId);

+ 57 - 5
device-api-service/src/main/java/com/xy/job/MercFeeCountMonthJob.java

@@ -1,28 +1,80 @@
 package com.xy.job;
 
+import cn.hutool.core.bean.BeanUtil;
+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.util.StrUtil;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
-import lombok.AllArgsConstructor;
+import com.xy.dto.MercFeeCountDayDto;
+import com.xy.dto.MercFeeCountMonthDto;
+import com.xy.entity.MercFeeCountMonth;
+import com.xy.error.CommRuntimeException;
+import com.xy.service.MercFeeCountDayServiceImpl;
+import com.xy.service.MercFeeCountMonthServiceImpl;
+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.util.List;
 
 
 /**
- * 商户佣金费用收益每月统计(不含本月)
+ * 商户佣金费用收益每月统计任务(不含本月)
  */
 @Slf4j
 @Component
-@AllArgsConstructor
+@RequiredArgsConstructor
+@Api(tags = "商户佣金费用收益每月统计任务")
 public class MercFeeCountMonthJob {
 
+    private final MercFeeCountDayServiceImpl mercFeeCountDayService;
+    private final MercFeeCountMonthServiceImpl mercFeeCountMonthService;
+
+    @PostMapping("excuteJob")
+    @ApiOperation("指定日期执行")
+    public R excuteJob(@RequestBody @Validated MercFeeCountMonthDto.ExcuteDayDTO dto) {
+        return R.ok(monthJob(dto.getDate()));
+    }
 
     /**
-     * 商户佣金费用收益每月统计(不含本月)
+     * 商户佣金费用收益每月统计任务(不含今天)
+     * 类型 1设备管理费。2设备激活费。3算法扣费标准。4流量卡费
      *
+     * @param date yyyyMM
      * @return
      */
     @XxlJob("mercFeeCountMonthJob")
-    public ReturnT<String> monthJob() {
+    public ReturnT<String> monthJob(String date) {
+        //获取上个月
+        DateTime lastMonth = DateUtil.lastMonth();
+        String queryDay = DateUtil.format(lastMonth, DatePattern.PURE_DATE_PATTERN);
+        if (StrUtil.isNotEmpty(date)) {
+            queryDay = date;
+            //指定日期需要判断是否重复执行
+            MercFeeCountMonthDto.SelectList selectList = new MercFeeCountMonthDto.SelectList();
+            selectList.setDateValue(Integer.valueOf(queryDay));
+            List<MercFeeCountMonthDto.Vo> vos = R.feignCheckData(mercFeeCountMonthService.list(selectList));
+            if (CollUtil.isNotEmpty(vos)) {
+                throw new CommRuntimeException("已存在日期【" + date + "】的数据,请勿重复执行!");
+            }
+        }
+        //年月
+        Integer monthValue = Integer.valueOf(queryDay);
+        // 按商户id,父商户ID,缴费类型  统计指定月份 缴费总和、佣金总和
+        List<MercFeeCountDayDto.CountByMonthVO> countByMonthVOS = mercFeeCountDayService.countByMonth(new MercFeeCountDayDto.CountByMonth().setMonthValue(monthValue));
+        if (CollUtil.isNotEmpty(countByMonthVOS)) {
+            List<MercFeeCountMonth> mercFeeCountMonths = BeanUtil.copyToList(countByMonthVOS, MercFeeCountMonth.class);
+            mercFeeCountMonthService.saveBatch(mercFeeCountMonths);
+        }
 
         return ReturnT.SUCCESS;
     }

+ 12 - 1
device-api-service/src/main/java/com/xy/mapper/MercFeeCountDayMapper.java

@@ -1,7 +1,11 @@
 package com.xy.mapper;
 
-import com.xy.entity.MercFeeCountDay;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xy.dto.MercFeeCountDayDto;
+import com.xy.entity.MercFeeCountDay;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface MercFeeCountDayMapper extends BaseMapper<MercFeeCountDay> {
 
+    /**
+     * 查询指定月份费用总和
+     *
+     * @param countByMonth
+     * @return
+     */
+    List<MercFeeCountDayDto.CountByMonthVO> countByMonth(@Param("query") MercFeeCountDayDto.CountByMonth countByMonth);
 }

+ 25 - 10
device-api-service/src/main/java/com/xy/mapper/mapper/MercFeeCountDayMapper.xml

@@ -1,18 +1,33 @@
 <?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" />
+        <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>
 
+    <select id="countByMonth" resultType="com.xy.dto.CountByMonth$CountByMonth">
+        SELECT parent_merc_id,
+               merc_id,
+               fee_type,
+               SUM(pay_money) AS pay_money,
+               SUM(brokerage) AS brokerage
+        FROM merc_fee_count_day
+        WHERE month_value = #{monthValue}
+        GROUP BY parent_merc_id,
+                 merc_id,
+                 fee_type
+    </select>
 </mapper>
+
+
+
+

+ 3 - 0
device-api-service/src/main/java/com/xy/service/DeviceAlgorithmChargingHistoryServiceImpl.java

@@ -76,6 +76,9 @@ public class DeviceAlgorithmChargingHistoryServiceImpl extends ServiceImpl<Devic
             //指定商户ID
             mercIds.add(chooseMercId);
         }
+        if(CollUtil.isEmpty(mercIds)){
+            return R.ok();
+        }
         PageBean pageBean = page.getPage();
         LambdaQueryWrapper<DeviceAlgorithmChargingHistory> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, DeviceAlgorithmChargingHistory.class)
                 .ge(DeviceAlgorithmChargingHistory::getCreateTime, page.getBeginCreateTime())

+ 3 - 0
device-api-service/src/main/java/com/xy/service/DeviceSimChargeServiceImpl.java

@@ -112,6 +112,9 @@ public class DeviceSimChargeServiceImpl extends ServiceImpl<DeviceSimChargeMappe
             //指定商户ID
             mercIds.add(chooseMercId);
         }
+        if (CollUtil.isEmpty(mercIds)) {
+            return R.ok();
+        }
         PageBean pageBean = page.getPage();
         LambdaQueryWrapper<DeviceSimCharge> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(page, DeviceSimCharge.class)
                 .ge(DeviceSimCharge::getCreateTime, page.getBeginCreateTime())

+ 32 - 23
device-api-service/src/main/java/com/xy/service/MercFeeCountDayServiceImpl.java

@@ -1,25 +1,24 @@
 package com.xy.service;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xy.dto.MercFeeCountDayDto;
 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 com.xy.utils.Emptys;
+import com.xy.utils.MybatisPlusQuery;
+import com.xy.utils.PageBean;
+import com.xy.utils.R;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 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;
@@ -27,13 +26,13 @@ import static com.xy.utils.PlusBeans.toPageBean;
 
 
 /**
-* <p>
-* 商户佣金费用收益每日统计(不含今天) 服务实现类
-* </p>
-*
-* @author 谭斌
-* @since 2024-04-23
-*/
+ * <p>
+ * 商户佣金费用收益每日统计(不含今天) 服务实现类
+ * </p>
+ *
+ * @author 谭斌
+ * @since 2024-04-23
+ */
 @Service
 @AllArgsConstructor
 @Api(tags = "商户佣金费用收益每日统计(不含今天)")
@@ -44,7 +43,7 @@ public class MercFeeCountDayServiceImpl extends ServiceImpl<MercFeeCountDayMappe
     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)) {
+        if (Emptys.check(list)) {
             return R.ok(list.get(0));
         }
         return R.ok();
@@ -82,4 +81,14 @@ public class MercFeeCountDayServiceImpl extends ServiceImpl<MercFeeCountDayMappe
         updateById(updateInfo);
         return R.ok();
     }
-}
+
+    /**
+     * 查询指定月份费用总和
+     *
+     * @param countByMonth
+     * @return
+     */
+    public List<MercFeeCountDayDto.CountByMonthVO> countByMonth(MercFeeCountDayDto.CountByMonth countByMonth) {
+        return this.baseMapper.countByMonth(countByMonth);
+    }
+}

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

@@ -54,6 +54,35 @@ public class MercFeeCountDayDto {
 
     }
 
+    @Data
+    @Accessors(chain = true)
+    public static class CountByMonth {
+        @ApiModelProperty("统计月份202206")
+        private Integer monthValue;
+    }
+
+    @Data
+    @Accessors(chain = true)
+    public static class CountByMonthVO {
+        @ApiModelProperty(value = "商户ID")
+        private Long mercId;
+
+        @ApiModelProperty(value = "父商户ID")
+        private Long parentMercId;
+
+        @ApiModelProperty(value = "缴费金额")
+        private Integer payMoney;
+
+        @ApiModelProperty(value = "佣金")
+        private Integer brokerage;
+
+        @ApiModelProperty(value = "缴费类型")
+        private Integer feeType;
+
+
+    }
+
+
     @Data
     @Accessors(chain = true)
     public static class Vo {
@@ -70,6 +99,9 @@ public class MercFeeCountDayDto {
         @ApiModelProperty(value = "统计日期20220603")
         private Integer dateValue;
 
+        @ApiModelProperty(value = "统计日期202206")
+        private Integer monthValue;
+
         @ApiModelProperty(value = "缴费金额")
         private Integer payMoney;
 

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

@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
+import javax.validation.constraints.NotBlank;
 import java.time.LocalDateTime;
 
 /**
@@ -17,6 +18,14 @@ import java.time.LocalDateTime;
  * @since 2024-04-23
  */
 public class MercFeeCountMonthDto {
+    @Data
+    @Accessors(chain = true)
+    public static class ExcuteDayDTO {
+        @NotBlank(message = "日期不可为空yyyyMM")
+        @ApiModelProperty(value = "分页对象", required = true)
+        private String date;
+    }
+
 
     @Data
     @Accessors(chain = true)