Procházet zdrojové kódy

新增来客吧码牌激活商户数统计表,并同步消息队列,新增调整费率和押金接口

mac před 2 roky
rodič
revize
c6d48300c4

+ 112 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/amqp/rabbit/RabbitLkbActQueueMQ.java

@@ -0,0 +1,112 @@
+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.util.UUID;
+
+/**
+ * mq 订单普通队列 配置
+ *
+ * @author 没秃顶的码农
+ * @date 2024-04-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+public class RabbitLkbActQueueMQ extends AbstractMQ {
+
+
+    /**
+     * 订单交易队列
+     */
+    public static final String QUEUE_NAME = "QUEUE_LKB_ACT_DIVISION";
+
+    /**
+     * 死队列名称
+     */
+    public static final String DEAD_QUEUE_NAME = null;
+
+    /**
+     * 内置msg 消息体定义
+     **/
+    private MsgEntity msgEntity;
+
+    /**
+     *  定义Msg消息载体
+     **/
+    @Data
+    public static class MsgEntity {
+
+        /**
+         * 用户ID
+         */
+        private String  userId;
+        /**
+         * 统计日
+         */
+        private String statDate;
+        /**
+         * 统计月
+         */
+        private String statMonth;
+
+
+    }
+
+    @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 RabbitLkbActQueueMQ build(MsgEntity message){
+
+        return new RabbitLkbActQueueMQ(message);
+    }
+
+    /**
+     * 解析MQ消息, 一般用于接收MQ消息时
+     */
+    public static MsgEntity parse(String msg){
+        return JSON.parseObject(msg, MsgEntity.class);
+    }
+
+}

+ 107 - 0
kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/model/KxsLkbActTrade.java

@@ -0,0 +1,107 @@
+package com.kxs.stat.api.model;
+
+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;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 来客吧码牌激活统计表(KxsLkbActTrade)表实体类
+ *
+ * @author 系统
+ * @since 2024-05-20 16:24:11
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KxsLkbActTrade extends Model<KxsLkbActTrade> 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 Integer delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 用户ID
+     */
+    @Schema(description = "用户ID")
+    private Integer userId;
+
+
+    /**
+     * 交易日
+     */
+    @Schema(description = "交易日")
+    private Integer tradeDate;
+
+
+    /**
+     * 激活数
+     */
+    @Schema(description = "激活数")
+    private Integer actNum;
+
+
+    /**
+     * 交易月
+     */
+    @Schema(description = "交易月")
+    private Integer tradeMonth;
+
+
+    /**
+     * 统计类型 0个人 1团队
+     */
+    @Schema(description = "统计类型 0个人 1团队")
+    private Integer totalType;
+
+
+
+
+}
+

+ 17 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsLkbActTradeMapper.java

@@ -0,0 +1,17 @@
+package com.kxs.stat.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.stat.api.model.KxsLkbActTrade;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 来客吧码牌激活统计表(KxsLkbActTrade)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-05-20 16:24:11
+ */
+@Mapper
+public interface KxsLkbActTradeMapper extends BaseMapper<KxsLkbActTrade> {
+
+}
+

+ 78 - 4
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mq/RabbitLkbQueueListener.java

@@ -2,6 +2,7 @@ package com.kxs.stat.biz.mq;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.kxs.common.core.constant.SecurityConstants;
@@ -10,9 +11,12 @@ import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.util.R;
 import com.kxs.common.core.util.RetOps;
 import com.kxs.common.core.util.TotalDateUtil;
+import com.kxs.stat.api.amqp.rabbit.RabbitLkbActQueueMQ;
 import com.kxs.stat.api.amqp.rabbit.RabbitLkbTradeQueueMQ;
+import com.kxs.stat.api.model.KxsLkbActTrade;
 import com.kxs.stat.api.model.KxsLkbTrade;
 import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
+import com.kxs.stat.biz.service.KxsLkbActTradeService;
 import com.kxs.stat.biz.service.KxsLkbTradeService;
 import com.kxs.user.api.feign.RemoteKxsUserService;
 import com.kxs.user.api.model.KxsUser;
@@ -38,12 +42,82 @@ import java.io.IOException;
 public class RabbitLkbQueueListener {
 
     private final KxsLkbTradeService kxsLkbTradeService;
+    private final KxsLkbActTradeService kxsLkbActTradeService;
 
     private final RemoteKxsUserService remoteKxsUserService;
 
-    public static void main(String[] args) {
-        System.out.println(TotalDateUtil.getMonthNumber(LocalDateTimeUtil.parseDate("2024-03-14T12:54:41", DatePattern.UTC_SIMPLE_PATTERN)));
-        System.out.println(TotalDateUtil.getDateNumber(LocalDateTimeUtil.parseDate("2024-03-14T12:54:41", DatePattern.UTC_SIMPLE_PATTERN)));
+//    public static void main(String[] args) {
+//        System.out.println(TotalDateUtil.getMonthNumber(LocalDateTimeUtil.parseDate("2024-03-14T12:54:41", DatePattern.UTC_SIMPLE_PATTERN)));
+//        System.out.println(TotalDateUtil.getDateNumber(LocalDateTimeUtil.parseDate("2024-03-14T12:54:41", DatePattern.UTC_SIMPLE_PATTERN)));
+//    }
+    /**
+     * 监听 来客吧商户激活 队列的处理器
+     *
+     * @param message 消息
+     */
+    @RabbitListener(queues = RabbitLkbActQueueMQ.QUEUE_NAME, ackMode = "MANUAL")
+    @RabbitHandler
+    public void onActMessage(String msg, Message message, Channel channel) {
+        try {
+            RabbitLkbActQueueMQ.MsgEntity parse = RabbitLkbActQueueMQ.parse(msg);
+            log.info("来客吧商户激活消费端Payload: " + parse);
+
+            KxsLkbActTrade lkbActTrade = kxsLkbActTradeService.getOne(Wrappers.<KxsLkbActTrade>lambdaQuery()
+                    .eq(KxsLkbActTrade::getUserId, parse.getUserId())
+                    .eq(KxsLkbActTrade::getTradeMonth, parse.getStatMonth())
+                    .eq(KxsLkbActTrade::getTradeDate, parse.getStatDate())
+                    .eq(KxsLkbActTrade::getTotalType, TotalTypeEnum.SELF.getType()));
+            if (lkbActTrade == null) {
+                lkbActTrade = new KxsLkbActTrade();
+                lkbActTrade.setActNum(1);
+                lkbActTrade.setTradeMonth(Integer.valueOf(parse.getStatMonth()));
+                lkbActTrade.setTradeDate(Integer.valueOf(parse.getStatDate()));
+                lkbActTrade.setTotalType(TotalTypeEnum.SELF.getType());
+                kxsLkbActTradeService.save(lkbActTrade);
+            }else{
+                lkbActTrade.setActNum(lkbActTrade.getActNum() + 1);
+                kxsLkbActTradeService.updateById(lkbActTrade);
+            }
+            //团队业绩
+            R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(Integer.valueOf(parse.getUserId()), SecurityConstants.FROM_IN);
+            KxsUser user = RetOps.of(kxsUserR)
+                    .getData()
+                    .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
+            String pidPath = user.getPidPath();
+            String[] split = pidPath.split(StrUtil.COMMA);
+            for (String userId : split) {
+                int pid = Integer.parseInt(userId);
+                if(pid <= 0){
+                    continue;
+                }
+                KxsLkbActTrade lkbActTradeTeam = kxsLkbActTradeService.getOne(Wrappers.<KxsLkbActTrade>lambdaQuery()
+                        .eq(KxsLkbActTrade::getUserId, parse.getUserId())
+                        .eq(KxsLkbActTrade::getTradeMonth, parse.getStatMonth())
+                        .eq(KxsLkbActTrade::getTradeDate, parse.getStatDate())
+                        .eq(KxsLkbActTrade::getTotalType, TotalTypeEnum.TEAM.getType()));
+                if (lkbActTradeTeam == null) {
+                    lkbActTradeTeam = new KxsLkbActTrade();
+                    lkbActTradeTeam.setActNum(1);
+                    lkbActTradeTeam.setTradeMonth(Integer.valueOf(parse.getStatMonth()));
+                    lkbActTradeTeam.setTradeDate(Integer.valueOf(parse.getStatDate()));
+                    lkbActTradeTeam.setTotalType(TotalTypeEnum.TEAM.getType());
+                    kxsLkbActTradeService.save(lkbActTradeTeam);
+                }else{
+                    lkbActTradeTeam.setActNum(lkbActTradeTeam.getActNum() + 1);
+                    kxsLkbActTradeService.updateById(lkbActTradeTeam);
+                }
+
+            }
+            log.info("来客吧商户激活消费成功:{}", JSON.toJSONString(parse));
+            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+        }catch (Exception e) {
+            log.error("来客吧商户激活消费失败:{}", JSON.toJSONString(msg), e);
+            try {
+                channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
+            } catch (IOException ex) {
+                log.error("来客吧商户激活消费失败" + ex.getMessage(), ex);
+            }
+        }
     }
     /**
      * 监听 来客吧交易 队列的处理器
@@ -101,7 +175,7 @@ public class RabbitLkbQueueListener {
                     .getData()
                     .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
             String pidPath = user.getPidPath();
-            String[] split = pidPath.split(",");
+            String[] split = pidPath.split(StrUtil.COMMA);
             for (String userId : split) {
                 int pid = Integer.parseInt(userId);
                 if(pid <= 0){

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

@@ -0,0 +1,15 @@
+package com.kxs.stat.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.stat.api.model.KxsLkbActTrade;
+
+/**
+ * 来客吧码牌激活统计表(KxsLkbActTrade)表服务接口
+ *
+ * @author 系统
+ * @since 2024-05-20 16:24:11
+ */
+public interface KxsLkbActTradeService extends IService<KxsLkbActTrade> {
+
+}
+

+ 19 - 0
kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsLkbActTradeServiceImpl.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.KxsLkbActTradeMapper;
+import com.kxs.stat.api.model.KxsLkbActTrade;
+import com.kxs.stat.biz.service.KxsLkbActTradeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 来客吧码牌激活统计表(KxsLkbActTrade)表服务实现类
+ *
+ * @author 系统
+ * @since 2024-05-20 16:24:11
+ */
+@Service("kxsLkbActTradeService")
+public class KxsLkbActTradeServiceImpl extends ServiceImpl<KxsLkbActTradeMapper, KxsLkbActTrade> implements KxsLkbActTradeService {
+
+}
+

+ 19 - 0
kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsLkbActTradeMapper.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.kxs.stat.biz.mapper.KxsLkbActTradeMapper">
+
+    <resultMap type="com.kxs.stat.api.model.KxsLkbActTrade" id="KxsLkbActTradeMap">
+        <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="act_num" property="actNum" />
+        <result column="trade_month" property="tradeMonth" />
+        <result column="total_type" property="totalType" />
+
+    </resultMap>
+
+</mapper>

+ 31 - 6
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/RemoteOldService.java

@@ -24,16 +24,41 @@ public interface RemoteOldService {
 	@PostExchange("/v1/kxsmain/tochargebackrecord/addtochargebackrecord")
 	R savePosAdvance(@RequestParam Map<String, Object> param);
 
+	/**
+	 * 修改活动
+	 * 请求参数:
+	 * {
+	 *     posSn: "0002896867474748", //机具号
+	 *     brandId: 1, //品牌
+	 *     deposit: 199, //服务费(0,99,199,299)
+	 *     callBackUrl: "http://xxx.xxxx.com/xx/xxx", //异步通知地址
+	 * }
+	 * @param param 参数
+	 */
+	@PostExchange("/api/v1/deposit/set")
+	R depositSet(@RequestParam Object param);
+
+
+	/**
+	 * 修改费率
+	 *	{
+	 *     posSn: "0002896867474748", //机具号
+	 *     brandId: 1, //品牌
+	 *     feeRate: 0.63, //费率值
+	 *     feeExtra: 3, //附加费率
+	 *     callBackUrl: "http://xxx.xxxx.com/xx/xxx", //异步通知地址
+	 *  }
+	 * @param param 参数
+	 * @return {@link R}
+	 */
+	@PostExchange("/api/v1/fee/set")
+	R feeSet(@RequestParam Object param);
+
 	/**
 	 * 团队开机统计-开机统计查询
 	 * @param param 请求实体
 	 */
 	@GetExchange("/v1/kxsmain/users/getteamopenposinfo")
 	R teamOpenTotalData(@RequestParam("value") String param);
-	/**
-	 * 奖池同步交易额
-	 * @param param 请求实体
-	 */
-	@GetExchange("/Api/v1/UserTradeDaySummary/GetUserTradeAmout")
-	R GetUserTradeAmout(@RequestParam("value")  Map<String, Object> param);
+
 }