فهرست منبع

定时任务导入对账信息

wanxl 1 سال پیش
والد
کامیت
07c0b3b3ae

+ 12 - 0
src/main/java/com/sqx/common/utils/DateUtils.java

@@ -123,6 +123,18 @@ public class DateUtils {
     }
 
     /**
+     * 对日期的【天】进行加/减返回格式化日期
+     *
+     * @param date
+     * @param days 天数,负数为减
+     * @param format 日期格式
+     * @return 加/减几天后的日期String 日期格式为:yyyy-MM-dd
+     */
+    public static String addDateDaysString(Date date, int days,String format) {
+        return format(addDateDays(date,days),format);
+    }
+
+    /**
      * 对日期的【周】进行加/减
      *
      * @param date 日期

+ 69 - 0
src/main/java/com/sqx/modules/reconciliation/mapper/PlatformBillMapper.java

@@ -2,6 +2,9 @@ package com.sqx.modules.reconciliation.mapper;
 
 import com.sqx.modules.reconciliation.model.PlatformBill;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 
 /**
  * <p>
@@ -11,6 +14,72 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author ceshi
  * @since 2025-02-27
  */
+@Mapper
 public interface PlatformBillMapper extends BaseMapper<PlatformBill> {
 
+    @Select("INSERT INTO `tcwm2.5`.platform_bill \n" +
+            "(day_id, user_id, shop_name, `type`, start_money, revenue, revenue_count, \n" +
+            "shop_payouts, shop_payouts_rates, shop_payouts_count, rider_payouts, rider_payouts_rates,\n" +
+            "rider_payouts_count, refund_money, refund_count, end_money,sys_gift_amount, platform_rates,total_income,pay_money,create_time,update_time)\n" +
+            "select #{dayId}, tu.user_id, null,2,null,sum(ti.rider_money),count(ti.rider_money),null,null,null,\n" +
+            "sum(co.money),sum(co.rate), count(co.money),null,null,max(tu.balance),\n" +
+            "(select sum(money) b from  user_money_details ud1 where ud1.user_id =tu.user_id and ud1.title like '系统赠送%' \n" +
+            "and ud1.create_time>#{startTime} and ud1.create_time &lt;=#{endTime})\n" +
+            "-(select sum(money) a from  user_money_details ud2 where ud2.user_id =tu.user_id and ud2.title like '系统扣除%' \n" +
+            "and ud2.create_time>#{startTime} and ud2.create_time &lt;= #{endTime}) as gift_amount,null,\n" +
+            "sum(ti.rider_money),null,#{now},#{now}\n" +
+            "from tb_user tu USE INDEX(tb_user_rider_open_id_IDX)\n" +
+            "left join tb_indent ti USE INDEX(tb_indent_finish_time_IDX) on  \n" +
+            " ti.finish_time >#{startTime} \n" +
+            "and ti.finish_time &lt;= #{endTime}\n" +
+            "and ti.rider_user_id =tu.user_id\n" +
+            "and ti.indent_state ='6'\n" +
+            "left join cash_out co on co.user_id =tu.user_id and co.type =1 and co.state=1\n" +
+            "and co.out_at >#{startTime} \n" +
+            "and co.out_at &lt;=#{endTime}\n" +
+            "where tu.rider_open_id is not null \n" +
+            "group by tu.user_id \n" +
+            "union all \n" +
+            "select #{dayId}, tu.user_id, null,1,null,sum(tor.shop_income_money),count(tor.shop_income_money),\n" +
+            "sum(co.money),sum(co.rate),count(co.money),null,null,null,sum(to1.pay_money),count(to1.pay_money),max(um.money),\n" +
+            "(select sum(money) b from  user_money_details ud1 where ud1.user_id =tu.user_id and ud1.title like '系统赠送%' \n" +
+            "and ud1.create_time>#{startTime} and ud1.create_time &lt;=#{endTime})\n" +
+            "-(select sum(money) a from  user_money_details ud2 where ud2.user_id =tu.user_id and ud2.title like '系统扣除%' \n" +
+            "and ud2.create_time>#{startTime} and ud2.create_time &lt;=#{endTime}) as gift_amount\n" +
+            ",sum(tor.shop_income_money*(1-gs.shop_rate)/gs.shop_rate) platform_rates,sum(tor.shop_income_money),\n" +
+            "sum(tor.pay_money),#{now},#{now} \n" +
+            "from tb_user tu \n" +
+            "left join goods_shop gs on tu.user_id =gs.user_id\n" +
+            "left join tb_order  tor USE INDEX(tb_order_update_time_IDX) on gs.shop_id =tor.shop_id \n" +
+            "and tor.update_time >#{startTime}\n" +
+            "and tor.update_time &lt;=#{endTime}\n" +
+            "and tor.status=4\n" +
+            "left join tb_order  to1 USE INDEX(tb_order_update_time_IDX) on gs.shop_id =to1.shop_id \n" +
+            "and to1.update_time >#{startTime}\n" +
+            "and to1.update_time &lt;=#{endTime}\n" +
+            "and to1.status in(5,8)\n" +
+            "left join cash_out co on co.user_id =tu.user_id and co.type =2 and co.state=1\n" +
+            "and co.out_at >#{startTime} \n" +
+            "and co.out_at &lt;=#{endTime}\n" +
+            "left join user_money um on um.user_id =tu.user_id\n" +
+            "where  tu.admin_user_id is not null\n" +
+            "group by tu.user_id ")
+    int insertPlatformBill(@Param("dayId") String dayId,@Param("startTime") String startTime, @Param("endTime")String endTime, @Param("now") String now);
+
+    @Select("update platform_bill a join platform_bill b on a.user_id =b.user_id and a.type =b.type and  TO_DAYS(a.day_id)-TO_DAYS(b.day_id)= 1 set a.start_money=b.end_money\n" +
+            "where a.day_id =#{dayId} ")
+    int updateStartMoney(@Param("dayId") String dayId);
+
+    @Select("INSERT INTO `tcwm2.5`.platform_bill \n" +
+            "(day_id, user_id, shop_name, `type`, start_money, revenue, revenue_count, \n" +
+            "shop_payouts, shop_payouts_rates, shop_payouts_count, rider_payouts, rider_payouts_rates,\n" +
+            "rider_payouts_count, refund_money, refund_count, end_money,sys_gift_amount, platform_rates,total_income,pay_money,create_time,update_time)\n" +
+            "select\n" +
+            "day_id,null,null,0,sum(if(type=1, start_money ,0)),sum(if(type=1, revenue,0)),sum(if(type=1, revenue_count,0)),\n" +
+            "sum(if(type=1, shop_payouts ,0)),sum(if(type=1, shop_payouts_rates ,0)),sum(if(type=1, shop_payouts_count ,0)),\n" +
+            "sum(if(type=2, rider_payouts ,0)),sum(if(type=2, rider_payouts_rates ,0)),sum(if(type=2, rider_payouts_count ,0)),\n" +
+            "sum(if(type=1, refund_money ,0)),sum(if(type=1, refund_count ,0)),sum(if(type=1, end_money ,0)),null,\n" +
+            "sum(if(type=1, platform_rates ,0)),null,null,max(create_time) ,max(update_time) \n" +
+            "from platform_bill pb where day_id =#{dayId}\n")
+    int insertTotalPlatformBill(@Param("dayId") String dayId);
 }

+ 1 - 0
src/main/java/com/sqx/modules/reconciliation/service/PlatformBillService.java

@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface PlatformBillService extends IService<PlatformBill> {
 
+    int insertPlatformBill();
 }

+ 36 - 0
src/main/java/com/sqx/modules/reconciliation/service/impl/PlatformBillServiceImpl.java

@@ -1,11 +1,16 @@
 package com.sqx.modules.reconciliation.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.sqx.common.utils.DateUtils;
 import com.sqx.modules.reconciliation.model.PlatformBill;
 import com.sqx.modules.reconciliation.mapper.PlatformBillMapper;
 import com.sqx.modules.reconciliation.service.PlatformBillService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+
 /**
  * <p>
  * 对账管理表 服务实现类
@@ -14,7 +19,38 @@ import org.springframework.stereotype.Service;
  * @author ceshi
  * @since 2025-02-27
  */
+@Slf4j
 @Service
 public class PlatformBillServiceImpl extends ServiceImpl<PlatformBillMapper, PlatformBill> implements PlatformBillService {
 
+
+    /**
+     * @return
+     */
+    @Override
+    public int insertPlatformBill() {
+        //当天开始时间
+        String endTime= DateUtils.format(new Date(),"yyyy-MM-dd")+" 00:00:00";
+        //对账账期
+        String dayId= DateUtils.addDateDaysString(new Date(),-1,"yyyy-MM-dd");
+        //前一天开始时间
+        String startTime=dayId+" 00:00:00";
+        //当前时间
+        String now=DateUtils.format(new Date());
+        //先删除防止重复生成
+        baseMapper.delete(new QueryWrapper<PlatformBill>().eq("day_id",dayId));
+        //导入商家和骑手对账
+        int count1 =baseMapper.insertPlatformBill(dayId,startTime,endTime,now);
+        log.info("导入商家和骑手对账:{}条",count1);
+        //导入账期开始金额
+        int count2=baseMapper.updateStartMoney(dayId);
+        log.info("导入账期开始金额:{}条",count2);
+        //导入平台对账
+        int count3 =baseMapper.insertTotalPlatformBill(dayId);
+        log.info("导入平台对账:{}条",count3);
+        if(count1<1||count2<1||count3<1){
+            return 0;
+        }
+        return count3;
+    }
 }

+ 23 - 12
src/main/java/com/sqx/scheduler/reconciliation/BillsScheduler.java

@@ -1,6 +1,7 @@
 package com.sqx.scheduler.reconciliation;
 
 import com.sqx.modules.coupon.service.TbCouponUserService;
+import com.sqx.modules.reconciliation.service.PlatformBillService;
 import com.sqx.scheduler.config.SchedulerLock;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -21,23 +22,33 @@ import org.springframework.stereotype.Component;
 @RequiredArgsConstructor
 public class BillsScheduler {
 
-    private final TbCouponUserService tbCouponUserService;
+    private final PlatformBillService platformBillService;
 
     /**
      * 将所有超过失效时间的优惠券改为失效状态
-     * 每分钟运行一次
+     * 每填0点2分30秒执行一次
      */
     @Async
-    @Scheduled(cron = "0 */1 * * * ?", zone = "Asia/Shanghai")
-    public void couponEnd(){
-
-        try {
-            log.info("用户优惠券自动过期任务运行");
-            tbCouponUserService.updateExpiration();
-            log.info("用户优惠券自动过期任务运行成功");
-        } catch (Exception e) {
-            log.error("用户优惠券自动过期任务运行失败,【{}】", e);
+    @Scheduled(cron = "30 2 0 * * ?", zone = "Asia/Shanghai")
+    public void insertPlatformBill(){
+        int errorCount = 0 ;
+        log.info("开始统计对账数据");
+        while (errorCount<3){
+            try {
+                int count =platformBillService.insertPlatformBill();
+                if(count!=0){
+                    break;
+                }
+            } catch (Exception e) {
+                log.error("统计对账数据异常:{}", e.getMessage());
+                errorCount++;
+                try {
+                    Thread.sleep(10000);
+                } catch (InterruptedException ex) {
+                    throw new RuntimeException(ex);
+                }
+            }
         }
-
+        log.info("统计对账数据结束");
     }
 }