Jelajahi Sumber

统计来客吧交易额,股东大盘分红数据新建临时表

mac 2 tahun lalu
induk
melakukan
63bdf38192
33 mengubah file dengan 1561 tambahan dan 117 penghapusan
  1. 1 1
      kxs-common/kxs-common-mybatis/src/main/java/com/kxs/common/mybatis/MybatisAutoConfiguration.java
  2. 4 0
      kxs-stat/kxs-stat-api/pom.xml
  3. 153 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/amqp/rabbit/RabbitLkbTradeQueueMQ.java
  4. 112 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/model/KxsLkbTrade.java
  5. 234 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/model/KxsUserTradeAfter.java
  6. 234 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/model/KxsUserTradeBefore.java
  7. 38 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/ShdTradeAmtVO.java
  8. 2 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/KxsStatApplication.java
  9. 12 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/constant/StatConstants.java
  10. 22 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/constant/enums/StatErrorTypeEnum.java
  11. 26 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/constant/enums/TotalTypeEnum.java
  12. 3 14
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/controller/KxsStatController.java
  13. 27 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsLkbTradeMapper.java
  14. 8 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserActTradeMapper.java
  15. 18 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeAfterMapper.java
  16. 18 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeBeforeMapper.java
  17. 29 3
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java
  18. 88 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mq/RabbitLkbQueueListener.java
  19. 15 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsLkbTradeService.java
  20. 15 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeAfterService.java
  21. 15 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeBeforeService.java
  22. 3 1
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeService.java
  23. 19 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsLkbTradeServiceImpl.java
  24. 19 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeAfterServiceImpl.java
  25. 19 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeBeforeServiceImpl.java
  26. 107 46
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java
  27. 56 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/task/KxsUserTaskJob.java
  28. 29 0
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsLkbTradeMapper.xml
  29. 21 11
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserActTradeMapper.xml
  30. 40 0
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeAfterMapper.xml
  31. 40 0
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeBeforeMapper.xml
  32. 118 39
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml
  33. 16 2
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/IntegralStatDTO.java

+ 1 - 1
kxs-common/kxs-common-mybatis/src/main/java/com/kxs/common/mybatis/MybatisAutoConfiguration.java

@@ -48,7 +48,7 @@ public class MybatisAutoConfiguration implements WebMvcConfigurer {
 		//动态分表
 		DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
 		dynamicTableNameInnerInterceptor.setTableNameHandler(
-				new MonthTableNameHandler("kxs_user_amount_log", "kxs_user_trade")
+				new MonthTableNameHandler("kxs_user_amount_log", "kxs_user_trade", "kxs_user_trade_before", "kxs_user_trade_after")
 		);
 		interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
 		return interceptor;

+ 4 - 0
kxs-stat/kxs-stat-api/pom.xml

@@ -57,6 +57,10 @@
             <groupId>com.kxs</groupId>
             <artifactId>kxs-common-seata</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.kxs</groupId>
+            <artifactId>kxs-common-mq</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 153 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/amqp/rabbit/RabbitLkbTradeQueueMQ.java

@@ -0,0 +1,153 @@
+package com.kxs.stat.api.amqp.rabbit;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.kxs.common.mq.enums.MQSendTypeEnum;
+import com.kxs.common.mq.model.AbstractMQ;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageBuilder;
+import org.springframework.amqp.core.MessageDeliveryMode;
+import org.springframework.amqp.core.MessageProperties;
+
+import java.math.BigDecimal;
+import java.util.UUID;
+
+/**
+ * mq 订单普通队列 配置
+ *
+ * @author 没秃顶的码农
+ * @date 2024-04-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+public class RabbitLkbTradeQueueMQ extends AbstractMQ {
+
+
+    /**
+     * 订单交易队列
+     */
+    public static final String QUEUE_NAME = "QUEUE_LKB_TRADE_DIVISION";
+
+    /**
+     * 死队列名称
+     */
+    public static final String DEAD_QUEUE_NAME = "DEAD_QUEUE_LKB_TRADE_DIVISION";
+
+    /**
+     * 内置msg 消息体定义
+     **/
+    private MsgEntity msgEntity;
+
+    /**
+     *  定义Msg消息载体
+     **/
+    @Data
+    public static class MsgEntity {
+
+        /**
+         * 订单状态(0待支付,1已支付)
+         */
+        private String  Status;
+        /**
+         * 订单创建时间
+         */
+        private String CreateDate;
+        /**
+         * 支付时间
+         */
+        private String PayDate;
+        /**
+         * 好哒订单号
+         */
+        private String HdOrderNo;
+        /**
+         * 支付宝微信平台交易号
+         */
+        private String TradeNo;
+        /**
+         * 码牌SN
+         */
+        private String SnNo;
+        /**
+         * 支付金额
+         */
+        private BigDecimal PayMoney;
+        /**
+         * 支付方式(1支付宝,2微信)
+         */
+        private String PayMode;
+        /**
+         * 订单号
+         */
+        private String OrderNo;
+        /**
+         * 商户Id
+         */
+        private String MerchantId;
+        /**
+         * 活动标识(1活动,0非活动)
+         */
+        private String IsAct;
+        /**
+         * 用户ID
+         */
+        private Integer UserId;
+        /**
+         * 激活时间
+         */
+        private Integer  BrandId;
+
+
+    }
+
+    @Override
+    public String getQueueName() {
+
+        return QUEUE_NAME;
+    }
+
+    @Override
+    public String getDeadQueueName() {
+
+        return DEAD_QUEUE_NAME;
+    }
+
+    @Override
+    public MQSendTypeEnum getMqType() {
+
+        return MQSendTypeEnum.QUEUE;
+    }
+
+    @Override
+    public Message toMessage() {
+        String message = JSONObject.toJSONString(msgEntity);
+        // 构建消息体
+        return MessageBuilder.withBody(message.getBytes())
+                .setContentType(MessageProperties.CONTENT_TYPE_TEXT_PLAIN)
+                .setDeliveryMode(MessageDeliveryMode.PERSISTENT)
+                .setMessageId(UUID.randomUUID().toString())
+                .build();
+    }
+
+    /**
+     * 构造发送消息
+     */
+    public static RabbitLkbTradeQueueMQ build(MsgEntity message){
+
+        return new RabbitLkbTradeQueueMQ(message);
+    }
+
+    /**
+     * 解析MQ消息, 一般用于接收MQ消息时
+     */
+    public static MsgEntity parse(String msg){
+        return JSON.parseObject(msg, MsgEntity.class);
+    }
+
+}

+ 112 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/model/KxsLkbTrade.java

@@ -0,0 +1,112 @@
+package com.kxs.stat.api.model;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+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 com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 来客吧交易统计总表(KxsLkbTrade)表实体类
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KxsLkbTrade extends Model<KxsLkbTrade> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 删除标记,0未删除,1已删除
+     */
+    @Schema(description = "删除标记,0未删除,1已删除")
+    private String delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 交易日
+     */
+    @Schema(description = "交易日")
+    private Integer tradeDate;
+
+
+    /**
+     * 交易月
+     */
+    @Schema(description = "交易月")
+    private Integer tradeMonth;
+
+
+    /**
+     * 正常交易额
+     */
+    @Schema(description = "正常交易额")
+    private BigDecimal tradeAmt;
+
+
+    /**
+     * 活动交易额
+     */
+    @Schema(description = "活动交易额")
+    private BigDecimal actTradeAmt;
+
+
+    /**
+     * 用户ID
+     */
+    @Schema(description = "用户ID")
+    private Integer userId;
+
+
+    /**
+     * 通道品牌ID(0直联,1银联,2好哒)
+     */
+    @Schema(description = "通道品牌ID(0直联,1银联,2好哒)")
+    private Integer brandId;
+
+}
+

+ 234 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/model/KxsUserTradeAfter.java

@@ -0,0 +1,234 @@
+package com.kxs.stat.api.model;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+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 com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 个人交易统计总表增量(KxsUserTradeAfter)表实体类
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KxsUserTradeAfter extends Model<KxsUserTradeAfter> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 删除标记,0未删除,1已删除
+     */
+    @Schema(description = "删除标记,0未删除,1已删除")
+    private String delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 交易日
+     */
+    @Schema(description = "交易日")
+    private Integer tradeDate;
+
+
+    /**
+     * 交易月
+     */
+    @Schema(description = "交易月")
+    private Integer tradeMonth;
+
+
+    /**
+     * 品牌ID
+     */
+    @Schema(description = "品牌ID")
+    private Integer brandId;
+
+
+    /**
+     * 扶持期贷记卡交易额
+     */
+    @Schema(description = "扶持期贷记卡交易额")
+    private BigDecimal helpDirectTradeAmt;
+
+
+    /**
+     * 扶持期借记卡
+     */
+    @Schema(description = "扶持期借记卡")
+    private BigDecimal helpDebitTradeAmt;
+
+
+    /**
+     * 稳定期贷记卡
+     */
+    @Schema(description = "稳定期贷记卡")
+    private BigDecimal proDirectTradeAmt;
+
+
+    /**
+     * 稳定期借记卡
+     */
+    @Schema(description = "稳定期借记卡")
+    private BigDecimal proDebitTradeAmt;
+
+
+    /**
+     * 稳定期A贷记卡
+     */
+    @Schema(description = "稳定期A贷记卡")
+    private BigDecimal proADirectTradeAmt;
+
+
+    /**
+     * 稳定期A借记卡
+     */
+    @Schema(description = "稳定期A借记卡")
+    private BigDecimal proADebitTradeAmt;
+
+
+    /**
+     * 统计类型 0pos 1云闪付
+     */
+    @Schema(description = "统计类型 0pos 1云闪付")
+    private Integer tradeType;
+
+
+    /**
+     * 扶持期借记卡封顶交易额
+     */
+    @Schema(description = "扶持期借记卡封顶交易额")
+    private BigDecimal helpDebitCapTradeAmt;
+
+
+    /**
+     * 扶持期借记卡封顶交易笔数
+     */
+    @Schema(description = "扶持期借记卡封顶交易笔数")
+    private Integer helpDebitCapNum;
+
+
+    /**
+     * 稳定期借记卡封顶交易额
+     */
+    @Schema(description = "稳定期借记卡封顶交易额")
+    private BigDecimal proDebitCapTradeAmt;
+
+
+    /**
+     * 稳定期借记卡封顶交易笔数
+     */
+    @Schema(description = "稳定期借记卡封顶交易笔数")
+    private Integer proDebitCapNum;
+
+
+    /**
+     * 稳定期A借记卡封顶交易额
+     */
+    @Schema(description = "稳定期A借记卡封顶交易额")
+    private BigDecimal proADebitCapTradeAmt;
+
+
+    /**
+     * 稳定期A借记卡封顶交易笔数
+     */
+    @Schema(description = "稳定期A借记卡封顶交易笔数")
+    private Integer proADebitCapNum;
+
+
+    /**
+     * 统计类型 0个人 1团队
+     */
+    @Schema(description = "统计类型 0个人 1团队")
+    private Integer totalType;
+
+
+    /**
+     * 稳定期B借记卡
+     */
+    @Schema(description = "稳定期B借记卡")
+    private BigDecimal proBDebitTradeAmt;
+
+
+    /**
+     * 稳定期B贷记卡
+     */
+    @Schema(description = "稳定期B贷记卡")
+    private BigDecimal proBDirectTradeAmt;
+
+
+    /**
+     * 稳定期B借记卡封顶交易额
+     */
+    @Schema(description = "稳定期B借记卡封顶交易额")
+    private BigDecimal proBDebitCapTradeAmt;
+
+
+    /**
+     * 稳定期B借记卡封顶交易笔数
+     */
+    @Schema(description = "稳定期B借记卡封顶交易笔数")
+    private Integer proBDebitCapNum;
+
+
+    /**
+     * 用户ID
+     */
+    @Schema(description = "用户ID")
+    private Integer userId;
+
+
+    /**
+     * 会员标识 0否 1是
+     */
+    @Schema(description = "会员标识 0否 1是")
+    private Integer vipFlag;
+
+
+
+
+}
+

+ 234 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/model/KxsUserTradeBefore.java

@@ -0,0 +1,234 @@
+package com.kxs.stat.api.model;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+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 com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 个人交易统计总表存量(KxsUserTradeBefore)表实体类
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KxsUserTradeBefore extends Model<KxsUserTradeBefore> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 删除标记,0未删除,1已删除
+     */
+    @Schema(description = "删除标记,0未删除,1已删除")
+    private String delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 交易日
+     */
+    @Schema(description = "交易日")
+    private Integer tradeDate;
+
+
+    /**
+     * 交易月
+     */
+    @Schema(description = "交易月")
+    private Integer tradeMonth;
+
+
+    /**
+     * 品牌ID
+     */
+    @Schema(description = "品牌ID")
+    private Integer brandId;
+
+
+    /**
+     * 扶持期贷记卡交易额
+     */
+    @Schema(description = "扶持期贷记卡交易额")
+    private BigDecimal helpDirectTradeAmt;
+
+
+    /**
+     * 扶持期借记卡
+     */
+    @Schema(description = "扶持期借记卡")
+    private BigDecimal helpDebitTradeAmt;
+
+
+    /**
+     * 稳定期贷记卡
+     */
+    @Schema(description = "稳定期贷记卡")
+    private BigDecimal proDirectTradeAmt;
+
+
+    /**
+     * 稳定期借记卡
+     */
+    @Schema(description = "稳定期借记卡")
+    private BigDecimal proDebitTradeAmt;
+
+
+    /**
+     * 稳定期A贷记卡
+     */
+    @Schema(description = "稳定期A贷记卡")
+    private BigDecimal proADirectTradeAmt;
+
+
+    /**
+     * 稳定期A借记卡
+     */
+    @Schema(description = "稳定期A借记卡")
+    private BigDecimal proADebitTradeAmt;
+
+
+    /**
+     * 统计类型 0pos 1云闪付
+     */
+    @Schema(description = "统计类型 0pos 1云闪付")
+    private Integer tradeType;
+
+
+    /**
+     * 扶持期借记卡封顶交易额
+     */
+    @Schema(description = "扶持期借记卡封顶交易额")
+    private BigDecimal helpDebitCapTradeAmt;
+
+
+    /**
+     * 扶持期借记卡封顶交易笔数
+     */
+    @Schema(description = "扶持期借记卡封顶交易笔数")
+    private Integer helpDebitCapNum;
+
+
+    /**
+     * 稳定期借记卡封顶交易额
+     */
+    @Schema(description = "稳定期借记卡封顶交易额")
+    private BigDecimal proDebitCapTradeAmt;
+
+
+    /**
+     * 稳定期借记卡封顶交易笔数
+     */
+    @Schema(description = "稳定期借记卡封顶交易笔数")
+    private Integer proDebitCapNum;
+
+
+    /**
+     * 稳定期A借记卡封顶交易额
+     */
+    @Schema(description = "稳定期A借记卡封顶交易额")
+    private BigDecimal proADebitCapTradeAmt;
+
+
+    /**
+     * 稳定期A借记卡封顶交易笔数
+     */
+    @Schema(description = "稳定期A借记卡封顶交易笔数")
+    private Integer proADebitCapNum;
+
+
+    /**
+     * 统计类型 0个人 1团队
+     */
+    @Schema(description = "统计类型 0个人 1团队")
+    private Integer totalType;
+
+
+    /**
+     * 稳定期B借记卡
+     */
+    @Schema(description = "稳定期B借记卡")
+    private BigDecimal proBDebitTradeAmt;
+
+
+    /**
+     * 稳定期B贷记卡
+     */
+    @Schema(description = "稳定期B贷记卡")
+    private BigDecimal proBDirectTradeAmt;
+
+
+    /**
+     * 稳定期B借记卡封顶交易额
+     */
+    @Schema(description = "稳定期B借记卡封顶交易额")
+    private BigDecimal proBDebitCapTradeAmt;
+
+
+    /**
+     * 稳定期B借记卡封顶交易笔数
+     */
+    @Schema(description = "稳定期B借记卡封顶交易笔数")
+    private Integer proBDebitCapNum;
+
+
+    /**
+     * 用户ID
+     */
+    @Schema(description = "用户ID")
+    private Integer userId;
+
+
+    /**
+     * 会员标识 0否 1是
+     */
+    @Schema(description = "会员标识 0否 1是")
+    private Integer vipFlag;
+
+
+
+
+}
+

+ 38 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/vo/ShdTradeAmtVO.java

@@ -0,0 +1,38 @@
+package com.kxs.stat.api.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * 股东大盘分红统计数据
+ *
+ * @author 没秃顶的码农
+ * @date 2024-05-09
+ */
+@Data
+public class ShdTradeAmtVO {
+
+    /**
+     * 用户 ID
+     */
+    private Integer userId;
+
+    /**
+     * pos交易额
+     */
+    private BigDecimal posAmt;
+    /**
+     * 来客吧交易额
+     */
+    private BigDecimal lkbAmt;
+    /**
+     * 来客吧活动交易额
+     */
+    private BigDecimal lkbActAmt;
+    /**
+     * GD 交易额
+     */
+    private BigDecimal gdAmt;
+
+}

+ 2 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/KxsStatApplication.java

@@ -4,6 +4,7 @@ import com.kxs.common.security.annotation.EnableAuthResourceServer;
 import com.kxs.common.swagger.annotation.EnableKxsDoc;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableAsync;
 
 
 /**
@@ -15,6 +16,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 @SpringBootApplication
 @EnableAuthResourceServer
 @EnableKxsDoc(value = "stat")
+@EnableAsync
 public class KxsStatApplication {
 
 	public static void main(String[] args) {

+ 12 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/constant/StatConstants.java

@@ -0,0 +1,12 @@
+package com.kxs.stat.biz.constant;
+
+/**
+ * 公共常量
+ *
+ * @author 没秃顶的码农
+ * @date 2024-01-08
+ */
+public class StatConstants {
+
+    public static final Integer RECYC_MAX_DAY = 365;
+}

+ 22 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/constant/enums/StatErrorTypeEnum.java

@@ -0,0 +1,22 @@
+package com.kxs.stat.biz.constant.enums;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * 错误类型枚举
+ *
+ * @author 没秃顶的码农
+ * @date 2023/10/29
+ */
+@Getter
+@RequiredArgsConstructor
+public enum StatErrorTypeEnum {
+
+	DATA_ERROR(-1, "数据错误");
+
+	private final int code;
+
+	private final String description;
+
+}

+ 26 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/constant/enums/TotalTypeEnum.java

@@ -0,0 +1,26 @@
+package com.kxs.stat.biz.constant.enums;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+/**
+ * 统计类型枚举
+ *
+ * @author 没秃顶的码农
+ * @date 2024-01-08
+ */
+@Getter
+@RequiredArgsConstructor
+public enum TotalTypeEnum {
+
+    /**
+     * 统计类型
+     */
+    SELF(0, "个人"),
+    TEAM(1, "团队");
+
+    //状态码
+    private final Integer type;
+    //状态码码描述
+    private final String description;
+}

+ 3 - 14
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/controller/KxsStatController.java

@@ -1,13 +1,11 @@
 package com.kxs.stat.biz.controller;
 
 
-import com.kxs.common.core.util.R;
 import com.kxs.common.security.annotation.Inner;
 import com.kxs.stat.biz.service.KxsUserTradeService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 /**
@@ -21,22 +19,13 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("stat")
 public class KxsStatController {
     private final KxsUserTradeService kxsUserTradeService;
-    /**
-     * 获取本月全部统计数据
-     *
-     */
-//    @Inner(value = false)
-//    @GetMapping("/getUserTradeList")
-//    public R getUserTradeList(@RequestParam("month") String month) {
-//
-//        return R.ok(kxsUserTradeService.getUserTradeList(month));
-//    }
+
 
     /**
-     * 真实职级计算
+     * 股东大盘分红积分计算任务
      */
     @Inner(value = false)
-    @GetMapping("/userRealLevel")
+    @GetMapping("/shdUserTradeTotalList")
     public void userRealLevel() {
         kxsUserTradeService.getUserTradeList();
     }

+ 27 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsLkbTradeMapper.java

@@ -0,0 +1,27 @@
+package com.kxs.stat.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.stat.api.model.KxsLkbTrade;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.cursor.Cursor;
+
+import java.util.List;
+
+/**
+ * 来客吧交易统计总表(KxsLkbTrade)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@Mapper
+public interface KxsLkbTradeMapper extends BaseMapper<KxsLkbTrade> {
+
+    /**
+     * 获取用户交易列表
+     *
+     * @return {@link List}<{@link KxsLkbTrade}>
+     */
+    Cursor<KxsLkbTrade> getUserTradeMonthList(String month);
+
+}
+

+ 8 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserActTradeMapper.java

@@ -3,6 +3,7 @@ package com.kxs.stat.biz.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kxs.stat.api.model.KxsUserActTrade;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.cursor.Cursor;
 
 /**
  * 创客激活统计表(KxsUserActTrade)表数据库访问层
@@ -13,5 +14,12 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface KxsUserActTradeMapper extends BaseMapper<KxsUserActTrade> {
 
+    /**
+     * 流式查询广电卡交易额
+     *
+     * @param thisMoth 月份
+     * @return {@link Cursor}<{@link KxsUserActTrade}>
+     */
+    Cursor<KxsUserActTrade> getUserTradeMonthList(String thisMoth);
 }
 

+ 18 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeAfterMapper.java

@@ -0,0 +1,18 @@
+package com.kxs.stat.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.stat.api.model.KxsUserTradeAfter;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 个人交易统计总表增量(KxsUserTradeAfter)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@Mapper
+public interface KxsUserTradeAfterMapper extends BaseMapper<KxsUserTradeAfter> {
+
+    void automaticTableCreationTasks(String tableName);
+}
+

+ 18 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeBeforeMapper.java

@@ -0,0 +1,18 @@
+package com.kxs.stat.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.stat.api.model.KxsUserTradeBefore;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 个人交易统计总表存量(KxsUserTradeBefore)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@Mapper
+public interface KxsUserTradeBeforeMapper extends BaseMapper<KxsUserTradeBefore> {
+
+    void automaticTableCreationTasks(String tableName);
+}
+

+ 29 - 3
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsUserTradeMapper.java

@@ -2,11 +2,11 @@ package com.kxs.stat.biz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.kxs.stat.api.model.KxsUserTrade;
+import com.kxs.stat.api.vo.ShdTradeAmtVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.cursor.Cursor;
 
-import java.util.List;
-
 /**
  * 个人交易统计总表(KxsUserTrade)表数据库访问层
  *
@@ -16,6 +16,32 @@ import java.util.List;
 @Mapper
 public interface KxsUserTradeMapper extends BaseMapper<KxsUserTrade> {
 
-    Cursor<KxsUserTrade> getUserTradeList(String tableName);
+    /**
+     * 流式查询pos交易的月交易额
+     *
+     * @param tableName  表名
+     * @return {@link Cursor}<{@link ShdTradeAmtVO}>
+     */
+    Cursor<ShdTradeAmtVO> getUserTradeList(@Param("tableName") String tableName);
+
+    /**
+     * 自动表创建任务
+     *
+     * @param tableName 表名
+     */
+    void automaticTableCreationTasks(String tableName);
+
+    /**
+     * 创建临时表 下面增删改查
+     */
+    void createTemporaryShdTable();
+
+    ShdTradeAmtVO getTempShdTableData(Integer userId);
+
+    void updateTempShdTableData(ShdTradeAmtVO shdTradeAmtVO);
+
+    Cursor<ShdTradeAmtVO> getTempShdTableList();
+
+    void insertTempShdTableData(ShdTradeAmtVO shdTradeAmtVO);
 }
 

+ 88 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mq/RabbitLkbQueueListener.java

@@ -0,0 +1,88 @@
+package com.kxs.stat.biz.mq;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.kxs.product.api.amqp.rabbit.RabbitShopTimeoutQueueMQ;
+import com.kxs.product.api.model.KxsShopOrder;
+import com.kxs.stat.api.amqp.rabbit.RabbitLkbTradeQueueMQ;
+import com.kxs.stat.api.model.KxsLkbTrade;
+import com.kxs.stat.biz.service.KxsLkbTradeService;
+import com.rabbitmq.client.Channel;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+/**
+ * rabbit 队列侦听器 商品下单过期队列
+ *
+ * @author Pota1ovO
+ * @date 2024-05-07
+ */
+@Component
+@Slf4j
+@RequiredArgsConstructor
+public class RabbitLkbQueueListener {
+
+    private final KxsLkbTradeService kxsLkbTradeService;
+
+    /**
+     * 监听 商品下单过期 队列的处理器
+     *
+     * @param message 消息
+     */
+    @RabbitListener(queues = RabbitLkbTradeQueueMQ.QUEUE_NAME, ackMode = "MANUAL")
+    @RabbitHandler
+    public void onMessage(String msg, Message message, Channel channel) {
+        try {
+            RabbitLkbTradeQueueMQ.MsgEntity parse = RabbitLkbTradeQueueMQ.parse(msg);
+            log.info("来客吧交易消费端Payload: " + parse);
+            KxsLkbTrade kxsLkbTrade = new KxsLkbTrade();
+			BeanUtils.copyProperties(parse, kxsLkbTrade);
+			KxsLkbTrade lkbTrade = kxsLkbTradeService.getOne(Wrappers.<KxsLkbTrade>lambdaQuery()
+					.eq(KxsLkbTrade::getUserId, kxsLkbTrade.getUserId())
+					.eq(KxsLkbTrade::getBrandId, kxsLkbTrade.getBrandId())
+					.eq(KxsLkbTrade::getTradeMonth, kxsLkbTrade.getTradeMonth())
+					.eq(KxsLkbTrade::getTradeDate, kxsLkbTrade.getTradeDate())
+			);
+			if(lkbTrade == null){
+				kxsLkbTradeService.save(kxsLkbTrade);
+			}else{
+				lkbTrade.setTradeAmt(lkbTrade.getTradeAmt().add(kxsLkbTrade.getTradeAmt()));
+				kxsLkbTradeService.updateById(lkbTrade);
+			}
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            try {
+                channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
+            } catch (IOException ex) {
+                log.error("来客吧进入死信队列失败" + ex.getMessage(), ex);
+            }
+        }
+    }
+
+    /**
+     * 监听死信 队列的处理器
+     *
+     * @param message 消息
+     */
+    @RabbitListener(queues = RabbitLkbTradeQueueMQ.DEAD_QUEUE_NAME)
+    @RabbitHandler
+    public void onDeadMessage(String msg, Message message, Channel channel) {
+        log.info("来客吧死信队列Payload: " + JSON.toJSONString(msg));
+        try {
+            RabbitShopTimeoutQueueMQ.MsgEntity parse = RabbitShopTimeoutQueueMQ.parse(msg);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+
+        }
+    }
+
+
+}

+ 15 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsLkbTradeService.java

@@ -0,0 +1,15 @@
+package com.kxs.stat.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.stat.api.model.KxsLkbTrade;
+
+/**
+ * 来客吧交易统计总表(KxsLkbTrade)表服务接口
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+public interface KxsLkbTradeService extends IService<KxsLkbTrade> {
+
+}
+

+ 15 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeAfterService.java

@@ -0,0 +1,15 @@
+package com.kxs.stat.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.stat.api.model.KxsUserTradeAfter;
+
+/**
+ * 个人交易统计总表增量(KxsUserTradeAfter)表服务接口
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+public interface KxsUserTradeAfterService extends IService<KxsUserTradeAfter> {
+
+}
+

+ 15 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeBeforeService.java

@@ -0,0 +1,15 @@
+package com.kxs.stat.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.stat.api.model.KxsUserTradeBefore;
+
+/**
+ * 个人交易统计总表存量(KxsUserTradeBefore)表服务接口
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+public interface KxsUserTradeBeforeService extends IService<KxsUserTradeBefore> {
+
+}
+

+ 3 - 1
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsUserTradeService.java

@@ -13,8 +13,10 @@ import java.util.List;
  */
 public interface KxsUserTradeService extends IService<KxsUserTrade> {
 
+    /**
+     * 股东大盘分红积分计算任务
+     */
     void getUserTradeList();
 
-//    void userRealLevel();
 }
 

+ 19 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsLkbTradeServiceImpl.java

@@ -0,0 +1,19 @@
+package com.kxs.stat.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.stat.biz.mapper.KxsLkbTradeMapper;
+import com.kxs.stat.api.model.KxsLkbTrade;
+import com.kxs.stat.biz.service.KxsLkbTradeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 来客吧交易统计总表(KxsLkbTrade)表服务实现类
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@Service("kxsLkbTradeService")
+public class KxsLkbTradeServiceImpl extends ServiceImpl<KxsLkbTradeMapper, KxsLkbTrade> implements KxsLkbTradeService {
+
+}
+

+ 19 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeAfterServiceImpl.java

@@ -0,0 +1,19 @@
+package com.kxs.stat.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.stat.biz.mapper.KxsUserTradeAfterMapper;
+import com.kxs.stat.api.model.KxsUserTradeAfter;
+import com.kxs.stat.biz.service.KxsUserTradeAfterService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 个人交易统计总表增量(KxsUserTradeAfter)表服务实现类
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@Service("kxsUserTradeAfterService")
+public class KxsUserTradeAfterServiceImpl extends ServiceImpl<KxsUserTradeAfterMapper, KxsUserTradeAfter> implements KxsUserTradeAfterService {
+
+}
+

+ 19 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeBeforeServiceImpl.java

@@ -0,0 +1,19 @@
+package com.kxs.stat.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.stat.biz.mapper.KxsUserTradeBeforeMapper;
+import com.kxs.stat.api.model.KxsUserTradeBefore;
+import com.kxs.stat.biz.service.KxsUserTradeBeforeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 个人交易统计总表存量(KxsUserTradeBefore)表服务实现类
+ *
+ * @author 系统
+ * @since 2024-05-09 13:59:07
+ */
+@Service("kxsUserTradeBeforeService")
+public class KxsUserTradeBeforeServiceImpl extends ServiceImpl<KxsUserTradeBeforeMapper, KxsUserTradeBefore> implements KxsUserTradeBeforeService {
+
+}
+

+ 107 - 46
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsUserTradeServiceImpl.java

@@ -2,19 +2,27 @@ package com.kxs.stat.biz.service.impl;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.NumberUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
+import com.kxs.common.core.constant.SecurityConstants;
+import com.kxs.stat.api.model.KxsLkbTrade;
+import com.kxs.stat.api.model.KxsUserActTrade;
 import com.kxs.stat.api.model.KxsUserTrade;
+import com.kxs.stat.api.vo.ShdTradeAmtVO;
+import com.kxs.stat.biz.mapper.KxsLkbTradeMapper;
+import com.kxs.stat.biz.mapper.KxsUserActTradeMapper;
+import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
 import com.kxs.stat.biz.service.KxsUserTradeService;
+import com.kxs.user.api.dto.kxsapp.IntegralStatDTO;
 import com.kxs.user.api.feign.RemoteKxsUserService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.cursor.Cursor;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.PlatformTransactionManager;
 import org.springframework.transaction.support.TransactionTemplate;
 
-import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.util.ArrayList;
@@ -34,74 +42,127 @@ public class KxsUserTradeServiceImpl extends ServiceImpl<KxsUserTradeMapper, Kxs
 
     private final PlatformTransactionManager platformTransactionManager;
 
+    private final KxsUserActTradeMapper kxsUserActTradeMapper;
+
+    private final KxsLkbTradeMapper kxsLkbTradeMapper;
+
     private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
 
     @Override
+    @Async
     public void getUserTradeList() {
         //拼接表名
         String thisMoth = LocalDateTimeUtil.format(LocalDate.now(), DatePattern.SIMPLE_MONTH_PATTERN);
         String tableName = PREFIX_TABLE_NAME + thisMoth;
 
-        int batchSize = 1000;
-
+        int batchSize = 100;
         TransactionTemplate template = new TransactionTemplate(platformTransactionManager);
         template.execute(status -> {
-            try (Cursor<KxsUserTrade> kxsUserTrades = baseMapper.getUserTradeList(tableName)) {
-                List<KxsUserTrade> batch = new ArrayList<>();
-                for (KxsUserTrade kxsUserTrade : kxsUserTrades) {
-                    batch.add(kxsUserTrade);
-                    if (batch.size() >= batchSize) {
-                        userRealLevel(batch);
-                        batch.clear();
+            //创建临时表
+            baseMapper.createTemporaryShdTable();
+
+            //查询pos交易
+            Cursor<ShdTradeAmtVO> kxsUserTrades = baseMapper.getUserTradeList(tableName);
+            for (ShdTradeAmtVO kxsUserTrade : kxsUserTrades) {
+                ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(kxsUserTrade.getUserId());
+                if(shdTradeAmtVO == null){
+                    shdTradeAmtVO = new ShdTradeAmtVO();
+                    shdTradeAmtVO.setUserId(kxsUserTrade.getUserId());
+                    shdTradeAmtVO.setPosAmt(kxsUserTrade.getPosAmt());
+                    baseMapper.insertTempShdTableData(shdTradeAmtVO);
+                }else{
+                    shdTradeAmtVO.setPosAmt(shdTradeAmtVO.getPosAmt());
+                    baseMapper.updateTempShdTableData(shdTradeAmtVO);
+                }
+
+            }
+            //查询lkb交易
+            Cursor<KxsLkbTrade> lkbTrades = kxsLkbTradeMapper.getUserTradeMonthList(thisMoth);
+            for (KxsLkbTrade lkbTrade : lkbTrades) {
+                ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(lkbTrade.getUserId());
+                if(shdTradeAmtVO == null){
+                    shdTradeAmtVO = new ShdTradeAmtVO();
+                    shdTradeAmtVO.setUserId(lkbTrade.getUserId());
+                    shdTradeAmtVO.setLkbAmt(lkbTrade.getTradeAmt());
+                    //活动交易 * 4加入
+                    if(lkbTrade.getActTradeAmt() != null){
+                        shdTradeAmtVO.setLkbActAmt(lkbTrade.getActTradeAmt().multiply(BigDecimal.valueOf(4)));
+                    }
+                    baseMapper.insertTempShdTableData(shdTradeAmtVO);
+                }else{
+                    shdTradeAmtVO.setLkbAmt(lkbTrade.getTradeAmt());
+                    //活动交易 * 4加入
+                    if(lkbTrade.getActTradeAmt() != null){
+                        shdTradeAmtVO.setLkbActAmt(lkbTrade.getActTradeAmt().multiply(BigDecimal.valueOf(4)));
                     }
+                    baseMapper.updateTempShdTableData(shdTradeAmtVO);
                 }
-                // 处理最后一批数据
-                if (!batch.isEmpty()) {
-                    userRealLevel(batch);
+            }
+            //查询广电交易数据
+            Cursor<KxsUserActTrade> kxsUserActTrades = kxsUserActTradeMapper.getUserTradeMonthList(thisMoth);
+            for (KxsUserActTrade kxsUserActTrade : kxsUserActTrades) {
+                ShdTradeAmtVO shdTradeAmtVO = baseMapper.getTempShdTableData(kxsUserActTrade.getUserId());
+                if(shdTradeAmtVO == null){
+                    shdTradeAmtVO = new ShdTradeAmtVO();
+                    shdTradeAmtVO.setUserId(kxsUserActTrade.getUserId());
+                    //广电卡 * 10000加入
+                    shdTradeAmtVO.setGdAmt(NumberUtil.mul(kxsUserActTrade.getActNum(), BigDecimal.valueOf(10000)));
+                    baseMapper.insertTempShdTableData(shdTradeAmtVO);
+                }else{
+                    //广电卡 * 10000加入
+                    shdTradeAmtVO.setGdAmt(NumberUtil.mul(kxsUserActTrade.getActNum(), BigDecimal.valueOf(10000)));
+                    baseMapper.updateTempShdTableData(shdTradeAmtVO);
                 }
+            }
 
-            } catch (IOException e) {
-                log.error("查询用户交易额失败", e);
+            Cursor<ShdTradeAmtVO> shdTradeAmtVOList = baseMapper.getTempShdTableList();
+            List<ShdTradeAmtVO> batch = new ArrayList<>();
+            for (ShdTradeAmtVO kxsUserTrade : shdTradeAmtVOList) {
+                batch.add(kxsUserTrade);
+                if (batch.size() >= batchSize) {
+                    remoteUserShdStat(batch);
+                    batch.clear();
+                }
+            }
+            // 处理最后一批数据
+            if (!batch.isEmpty()) {
+                remoteUserShdStat(batch);
             }
             return null;
         });
     }
 
 
-    public void userRealLevel(List<KxsUserTrade> userTradeList) {
-        log.info("收到{}条数据", userTradeList.size());
-        for (KxsUserTrade datum : userTradeList) {
+    public void remoteUserShdStat(List<ShdTradeAmtVO> userTradeList) {
+        List<IntegralStatDTO> params = new ArrayList<>();
+        for (ShdTradeAmtVO datum : userTradeList) {
+
+
             Integer userId = datum.getUserId();
-            BigDecimal helpDirectTradeAmt = datum.getHelpDirectTradeAmt();//扶持期贷记卡交易额
-            BigDecimal helpDebitTradeAmt = datum.getHelpDebitTradeAmt();//扶持期借记卡
-            BigDecimal proDirectTradeAmt = datum.getProDirectTradeAmt();//稳定期贷记卡
-            BigDecimal proDebitTradeAmt = datum.getProDebitTradeAmt();//稳定期借记卡
-            BigDecimal proADirectTradeAmt = datum.getProADirectTradeAmt();//稳定期A贷记卡
-            BigDecimal proADebitTradeAmt = datum.getProADebitTradeAmt();//稳定期A借记卡
-            BigDecimal proBDebitTradeAmt = datum.getProBDebitTradeAmt();//稳定期B借记卡
-            BigDecimal proBDirectTradeAmt = datum.getProBDirectTradeAmt();//稳定期B贷记卡
-            //pos交易额
-            BigDecimal totalAmount = helpDirectTradeAmt.add(helpDebitTradeAmt).add(proDirectTradeAmt).add(proDebitTradeAmt).add(proADirectTradeAmt).add(proADebitTradeAmt).add(proBDebitTradeAmt).add(proBDirectTradeAmt);
-
-            //广电卡交易额
-            log.info("用户{}交易额{}", userId, totalAmount);
+
+            //pos交易额 + 来客吧非活动交易额
+            BigDecimal totalAmount = BigDecimal.ZERO;
+            if(datum.getPosAmt() != null){
+                totalAmount = totalAmount.add(datum.getPosAmt());
+            }
+            if(datum.getLkbAmt() != null){
+                totalAmount = totalAmount.add(datum.getLkbAmt());
+            }
+            if(datum.getGdAmt() != null){
+                totalAmount = totalAmount.add(datum.getGdAmt());
+            }
+            if(datum.getLkbActAmt() != null){
+                totalAmount = totalAmount.add(datum.getLkbActAmt());
+            }
+            if(totalAmount.compareTo(BigDecimal.valueOf(3000000)) >= 0){
+                params.add(IntegralStatDTO.builder().userId(Long.valueOf(userId)).totalAmount(totalAmount).build());
+                log.info("用户{}交易额达标:{}", userId, totalAmount);
+            }
         }
+        remoteKxsUserService.integralStat(params, SecurityConstants.FROM_IN);
+    }
 
 
-        //        KxsUserRealLevel kxsUserRealLevel = new KxsUserRealLevel();
-//        kxsUserRealLevel.setCreateTime(now);
-//        kxsUserRealLevel.setDelFlag("0");
-//        kxsUserRealLevel.setMonth(month);
-//        for (UserLevel userLevel : UserLevel.values()) {
-//            if (totalAmount.compareTo(userLevel.getTransactions()) >= 0) {
-//                kxsUserRealLevel.setLevel(userLevel.getLevel());
-//            } else if (totalAmount.compareTo(BigDecimal.ZERO) <= 0) {
-//                kxsUserRealLevel.setLevel("0");
-//            }
-//        }
-//        kxsUserRealLevel.setUserId(Long.valueOf(userId));
-//        remoteKxsUserService.updateUserRealLevel(kxsUserRealLevel, SecurityConstants.FROM_IN);
-    }
 
 
 }

+ 56 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/task/KxsUserTaskJob.java

@@ -0,0 +1,56 @@
+package com.kxs.stat.biz.task;
+
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.LocalDateTimeUtil;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.kxs.common.security.annotation.Inner;
+import com.kxs.stat.biz.mapper.KxsUserTradeAfterMapper;
+import com.kxs.stat.biz.mapper.KxsUserTradeBeforeMapper;
+import com.kxs.stat.biz.mapper.KxsUserTradeMapper;
+import com.kxs.user.api.model.KxsTotalDebt;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 产品模块定时任务
+ *
+ * @author 没秃顶的码农
+ * @date 2024-03-13
+ */
+@RequiredArgsConstructor
+@Slf4j
+@RestController
+@RequestMapping("statJob")
+public class KxsUserTaskJob {
+
+    private final KxsUserTradeMapper kxsUserTradeMapper;
+
+    private final KxsUserTradeBeforeMapper kxsUserTradeBeforeMapper;
+
+    private final KxsUserTradeAfterMapper kxsUserTradeAfterMapper;
+
+    private final static String PREFIX_TABLE_NAME = "kxs_user_trade_";
+
+    /**
+     * 自动表创建任务
+     * 每个月15号建立下个月的统计表表
+     */
+    @Inner(value = false)
+    @GetMapping("/automaticTableCreationTasks")
+    public void automaticTableCreationTasks() {
+        String thisMoth = LocalDateTimeUtil.format(LocalDate.now().plusMonths(1L), DatePattern.SIMPLE_MONTH_PATTERN);
+        kxsUserTradeMapper.automaticTableCreationTasks(PREFIX_TABLE_NAME + thisMoth);
+        kxsUserTradeBeforeMapper.automaticTableCreationTasks(PREFIX_TABLE_NAME + "before_" + thisMoth);
+        kxsUserTradeAfterMapper.automaticTableCreationTasks(PREFIX_TABLE_NAME + "after_" + thisMoth);
+    }
+
+
+
+}

+ 29 - 0
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsLkbTradeMapper.xml

@@ -0,0 +1,29 @@
+<?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.kxs.stat.biz.mapper.KxsLkbTradeMapper">
+
+    <resultMap type="com.kxs.stat.api.model.KxsLkbTrade" id="KxsLkbTradeMap">
+        <result column="id" property="id"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="del_flag" property="delFlag"/>
+        <result column="version" property="version"/>
+        <result column="trade_date" property="tradeDate"/>
+        <result column="trade_month" property="tradeMonth"/>
+        <result column="trade_amt" property="tradeAmt"/>
+        <result column="act_trade_amt" property="actTradeAmt"/>
+        <result column="user_id" property="userId"/>
+        <result column="brand_id" property="brandId"/>
+
+    </resultMap>
+    <select id="getUserTradeMonthList" resultType="com.kxs.stat.api.model.KxsLkbTrade" fetchSize="1000">
+        SELECT SUM(trade_amt) as trade_amt, SUM(act_trade_amt), user_id
+        FROM kxs_lkb_trade
+        <where>
+            and total_type = 1
+            and trade_month = #{tradeMonth}
+        </where>
+        GROUP BY user_id
+    </select>
+
+</mapper>

+ 21 - 11
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserActTradeMapper.xml

@@ -3,18 +3,28 @@
 <mapper namespace="com.kxs.stat.biz.mapper.KxsUserActTradeMapper">
 
     <resultMap type="com.kxs.stat.api.model.KxsUserActTrade" id="KxsUserActTradeMap">
-        <result column="id" property="id" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="del_flag" property="delFlag" />
-        <result column="version" property="version" />
-        <result column="user_id" property="userId" />
-        <result column="trade_date" property="tradeDate" />
-        <result column="brand_id" property="brandId" />
-        <result column="act_num" property="actNum" />
-        <result column="trade_month" property="tradeMonth" />
-        <result column="total_type" property="totalType" />
+        <result column="id" property="id"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="del_flag" property="delFlag"/>
+        <result column="version" property="version"/>
+        <result column="user_id" property="userId"/>
+        <result column="trade_date" property="tradeDate"/>
+        <result column="brand_id" property="brandId"/>
+        <result column="act_num" property="actNum"/>
+        <result column="trade_month" property="tradeMonth"/>
+        <result column="total_type" property="totalType"/>
 
     </resultMap>
+    <select id="getUserTradeMonthList" resultType="com.kxs.stat.api.model.KxsUserActTrade">
+        SELECT SUM(act_num) as act_num, user_id
+        FROM kxs_user_act_trade
+        <where>
+            and brand_id = 14
+            and total_type = 1
+            and trade_month = #{tradeMonth}
+        </where>
+        GROUP BY user_id
+    </select>
 
 </mapper>

+ 40 - 0
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeAfterMapper.xml

@@ -0,0 +1,40 @@
+<?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.kxs.stat.biz.mapper.KxsUserTradeAfterMapper">
+
+    <resultMap type="com.kxs.stat.api.model.KxsUserTradeAfter" id="KxsUserTradeAfterMap">
+        <result column="id" property="id" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="del_flag" property="delFlag" />
+        <result column="version" property="version" />
+        <result column="trade_date" property="tradeDate" />
+        <result column="trade_month" property="tradeMonth" />
+        <result column="brand_id" property="brandId" />
+        <result column="help_direct_trade_amt" property="helpDirectTradeAmt" />
+        <result column="help_debit_trade_amt" property="helpDebitTradeAmt" />
+        <result column="pro_direct_trade_amt" property="proDirectTradeAmt" />
+        <result column="pro_debit_trade_amt" property="proDebitTradeAmt" />
+        <result column="pro_a_direct_trade_amt" property="proADirectTradeAmt" />
+        <result column="pro_a_debit_trade_amt" property="proADebitTradeAmt" />
+        <result column="trade_type" property="tradeType" />
+        <result column="help_debit_cap_trade_amt" property="helpDebitCapTradeAmt" />
+        <result column="help_debit_cap_num" property="helpDebitCapNum" />
+        <result column="pro_debit_cap_trade_amt" property="proDebitCapTradeAmt" />
+        <result column="pro_debit_cap_num" property="proDebitCapNum" />
+        <result column="pro_a_debit_cap_trade_amt" property="proADebitCapTradeAmt" />
+        <result column="pro_a_debit_cap_num" property="proADebitCapNum" />
+        <result column="total_type" property="totalType" />
+        <result column="pro_b_debit_trade_amt" property="proBDebitTradeAmt" />
+        <result column="pro_b_direct_trade_amt" property="proBDirectTradeAmt" />
+        <result column="pro_b_debit_cap_trade_amt" property="proBDebitCapTradeAmt" />
+        <result column="pro_b_debit_cap_num" property="proBDebitCapNum" />
+        <result column="user_id" property="userId" />
+        <result column="vip_flag" property="vipFlag" />
+
+    </resultMap>
+    <update id="automaticTableCreationTasks">
+        CREATE  TABLE IF NOT EXISTS `${tableName}` LIKE kxs_user_trade_after;
+    </update>
+
+</mapper>

+ 40 - 0
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeBeforeMapper.xml

@@ -0,0 +1,40 @@
+<?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.kxs.stat.biz.mapper.KxsUserTradeBeforeMapper">
+
+    <resultMap type="com.kxs.stat.api.model.KxsUserTradeBefore" id="KxsUserTradeBeforeMap">
+        <result column="id" property="id" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="del_flag" property="delFlag" />
+        <result column="version" property="version" />
+        <result column="trade_date" property="tradeDate" />
+        <result column="trade_month" property="tradeMonth" />
+        <result column="brand_id" property="brandId" />
+        <result column="help_direct_trade_amt" property="helpDirectTradeAmt" />
+        <result column="help_debit_trade_amt" property="helpDebitTradeAmt" />
+        <result column="pro_direct_trade_amt" property="proDirectTradeAmt" />
+        <result column="pro_debit_trade_amt" property="proDebitTradeAmt" />
+        <result column="pro_a_direct_trade_amt" property="proADirectTradeAmt" />
+        <result column="pro_a_debit_trade_amt" property="proADebitTradeAmt" />
+        <result column="trade_type" property="tradeType" />
+        <result column="help_debit_cap_trade_amt" property="helpDebitCapTradeAmt" />
+        <result column="help_debit_cap_num" property="helpDebitCapNum" />
+        <result column="pro_debit_cap_trade_amt" property="proDebitCapTradeAmt" />
+        <result column="pro_debit_cap_num" property="proDebitCapNum" />
+        <result column="pro_a_debit_cap_trade_amt" property="proADebitCapTradeAmt" />
+        <result column="pro_a_debit_cap_num" property="proADebitCapNum" />
+        <result column="total_type" property="totalType" />
+        <result column="pro_b_debit_trade_amt" property="proBDebitTradeAmt" />
+        <result column="pro_b_direct_trade_amt" property="proBDirectTradeAmt" />
+        <result column="pro_b_debit_cap_trade_amt" property="proBDebitCapTradeAmt" />
+        <result column="pro_b_debit_cap_num" property="proBDebitCapNum" />
+        <result column="user_id" property="userId" />
+        <result column="vip_flag" property="vipFlag" />
+
+    </resultMap>
+    <update id="automaticTableCreationTasks">
+        CREATE  TABLE IF NOT EXISTS `${tableName}` LIKE kxs_user_trade_before;
+    </update>
+
+</mapper>

+ 118 - 39
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsUserTradeMapper.xml

@@ -3,48 +3,127 @@
 <mapper namespace="com.kxs.stat.biz.mapper.KxsUserTradeMapper">
 
     <resultMap type="com.kxs.stat.api.model.KxsUserTrade" id="KxsUserTradeMap">
-        <result column="id" property="id" />
-        <result column="create_time" property="createTime" />
-        <result column="update_time" property="updateTime" />
-        <result column="del_flag" property="delFlag" />
-        <result column="version" property="version" />
-        <result column="user_id" property="userId" />
-        <result column="trade_date" property="tradeDate" />
-        <result column="trade_month" property="tradeMonth" />
-        <result column="brand_id" property="brandId" />
-        <result column="help_direct_trade_amt" property="helpDirectTradeAmt" />
-        <result column="help_debit_trade_amt" property="helpDebitTradeAmt" />
-        <result column="pro_direct_trade_amt" property="proDirectTradeAmt" />
-        <result column="pro_debit_trade_amt" property="proDebitTradeAmt" />
-        <result column="pro_a_direct_trade_amt" property="proADirectTradeAmt" />
-        <result column="pro_a_debit_trade_amt" property="proADebitTradeAmt" />
-        <result column="trade_type" property="tradeType" />
-        <result column="help_debit_cap_trade_amt" property="helpDebitCapTradeAmt" />
-        <result column="help_debit_cap_num" property="helpDebitCapNum" />
-        <result column="pro_debit_cap_trade_amt" property="proDebitCapTradeAmt" />
-        <result column="pro_debit_cap_num" property="proDebitCapNum" />
-        <result column="pro_a_debit_cap_trade_amt" property="proADebitCapTradeAmt" />
-        <result column="pro_a_debit_cap_num" property="proADebitCapNum" />
-        <result column="total_type" property="totalType" />
-        <result column="pro_b_debit_trade_amt" property="proBDebitTradeAmt" />
-        <result column="pro_b_direct_trade_amt" property="proBDirectTradeAmt" />
-        <result column="pro_b_debit_cap_trade_amt" property="proBDebitCapTradeAmt" />
-        <result column="pro_b_debit_cap_num" property="proBDebitCapNum" />
+        <result column="id" property="id"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="del_flag" property="delFlag"/>
+        <result column="version" property="version"/>
+        <result column="user_id" property="userId"/>
+        <result column="trade_date" property="tradeDate"/>
+        <result column="trade_month" property="tradeMonth"/>
+        <result column="brand_id" property="brandId"/>
+        <result column="help_direct_trade_amt" property="helpDirectTradeAmt"/>
+        <result column="help_debit_trade_amt" property="helpDebitTradeAmt"/>
+        <result column="pro_direct_trade_amt" property="proDirectTradeAmt"/>
+        <result column="pro_debit_trade_amt" property="proDebitTradeAmt"/>
+        <result column="pro_a_direct_trade_amt" property="proADirectTradeAmt"/>
+        <result column="pro_a_debit_trade_amt" property="proADebitTradeAmt"/>
+        <result column="trade_type" property="tradeType"/>
+        <result column="help_debit_cap_trade_amt" property="helpDebitCapTradeAmt"/>
+        <result column="help_debit_cap_num" property="helpDebitCapNum"/>
+        <result column="pro_debit_cap_trade_amt" property="proDebitCapTradeAmt"/>
+        <result column="pro_debit_cap_num" property="proDebitCapNum"/>
+        <result column="pro_a_debit_cap_trade_amt" property="proADebitCapTradeAmt"/>
+        <result column="pro_a_debit_cap_num" property="proADebitCapNum"/>
+        <result column="total_type" property="totalType"/>
+        <result column="pro_b_debit_trade_amt" property="proBDebitTradeAmt"/>
+        <result column="pro_b_direct_trade_amt" property="proBDirectTradeAmt"/>
+        <result column="pro_b_debit_cap_trade_amt" property="proBDebitCapTradeAmt"/>
+        <result column="pro_b_debit_cap_num" property="proBDebitCapNum"/>
 
     </resultMap>
-    <select id="getUserTradeList" resultType="com.kxs.stat.api.model.KxsUserTrade" fetchSize="1000" >
+
+    <update id="automaticTableCreationTasks" parameterType="String">
+        CREATE TABLE IF NOT EXISTS `${tableName}` LIKE kxs_user_trade;
+    </update>
+
+    <select id="getUserTradeList" resultType="com.kxs.stat.api.vo.ShdTradeAmtVO" fetchSize="1000">
         select
-            sum(pro_b_direct_trade_amt) as proBDirectTradeAmt,
-            sum(pro_b_debit_trade_amt) as proBDebitTradeAmt,
-            sum(pro_a_debit_trade_amt) as proADebitTradeAmt,
-            sum(pro_a_direct_trade_amt) as proADirectTradeAmt,
-            sum(pro_debit_trade_amt) as proDebitTradeAmt,
-            sum(pro_direct_trade_amt) as proDirectTradeAmt,
-            sum(help_debit_trade_amt) as helpDebitTradeAmt,
-            sum(help_direct_trade_amt) as helpDirectTradeAmt,
-            user_id
-        from ${tableName} where del_flag != 1
-        and total_type = 1 and user_id != 0 group by user_id
+        sum(pro_b_direct_trade_amt + pro_b_debit_trade_amt + pro_a_debit_trade_amt + pro_a_direct_trade_amt +
+        pro_debit_trade_amt + pro_direct_trade_amt + help_debit_trade_amt + help_direct_trade_amt) as pos_amt,
+        a.user_id
+        from ${tableName} a
+        <where>
+            and a.total_type = 1
+        </where>
+        group by a.user_id
+    </select>
+
+    <!--    临时表操作 下面增删改查-->
+    <update id="createTemporaryShdTable">
+        CREATE
+        TEMPORARY TABLE kxs_user_trade_temp (
+            user_id INT PRIMARY KEY,
+            pos_amt NUMERIC(18,2) default 0,
+            lkb_amt NUMERIC(18,2) default 0,
+            lkb_act_amt NUMERIC(18,2) default 0,
+            gd_amt NUMERIC(18,2) default 0
+        );
+    </update>
+    <select id="getTempShdTableData" resultType="com.kxs.stat.api.vo.ShdTradeAmtVO">
+        select * from kxs_user_trade_temp
+        <where>
+            and user_id = #{userId}
+        </where>
+    </select>
+    <select id="getTempShdTableList" resultType="com.kxs.stat.api.vo.ShdTradeAmtVO" fetchSize="1000">
+        select * from kxs_user_trade_temp
     </select>
+    <insert id="insertTempShdTableData">
+        INSERT INTO kxs_user_trade_temp
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="userId != null">
+                user_id,
+            </if>
+            <if test="posAmt != null">
+                pos_amt,
+            </if>
+            <if test="lkbAmt != null">
+                lkb_amt,
+            </if>
+            <if test="lkbActAmt != null">
+                lkb_act_amt,
+            </if>
+            <if test="gdAmt != null">
+                gd_amt,
+            </if>
+        </trim>
+        <trim prefix="values(" suffix=")" suffixOverrides=",">
+            <if test="userId != null">
+                #{userId},
+            </if>
+            <if test="posAmt != null">
+                #{posAmt},
+            </if>
+            <if test="lkbAmt != null">
+                #{lkbAmt},
+            </if>
+            <if test="lkbActAmt != null">
+                #{lkbActAmt},
+            </if>
+            <if test="gdAmt != null">
+                #{gdAmt},
+            </if>
+        </trim>
+    </insert>
+    <update id="updateTempShdTableData">
+        UPDATE kxs_user_trade_temp
+        <set>
+            <if test="posAmt != null">
+                pos_amt = #{posAmt},
+            </if>
+            <if test="lkbAmt != null">
+                lkb_amt = #{lkbAmt},
+            </if>
+            <if test="lkbActAmt != null">
+                lkb_act_amt = #{lkbActAmt},
+            </if>
+            <if test="gdAmt != null">
+                gd_amt = #{gdAmt},
+            </if>
+        </set>
+        where user_id = #{userId}
+    </update>
+
 
 </mapper>

+ 16 - 2
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/dto/kxsapp/IntegralStatDTO.java

@@ -1,11 +1,25 @@
 package com.kxs.user.api.dto.kxsapp;
 
+import lombok.Builder;
 import lombok.Data;
 
 import java.math.BigDecimal;
 
+/**
+ * 积分统计 DTO
+ *
+ * @author 没秃顶的码农
+ * @date 2024-05-09
+ */
 @Data
+@Builder
 public class IntegralStatDTO {
-    private BigDecimal totalAmount;//总金额
-    private Long userId;//用户id
+    /**
+     * 总金额
+     */
+    private BigDecimal totalAmount;
+    /**
+     * 用户id
+     */
+    private Long userId;
 }