Sfoglia il codice sorgente

Merge branch 'develop' into develop-kjf-dev

Pota1ovO 2 anni fa
parent
commit
2a6b3a887c
15 ha cambiato i file con 694 aggiunte e 38 eliminazioni
  1. 190 0
      kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/amqp/rabbit/RabbitKxsOrderQueueMQ.java
  2. 59 0
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mq/RabbitKxsOrderQueueListener.java
  3. 10 11
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mq/RabbitShopQueueListener.java
  4. 112 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/amqp/rabbit/RabbitLkbActQueueMQ.java
  5. 107 0
      kxs-stat/kxs-stat-api/src/main/java/com/kxs/stat/api/model/KxsLkbActTrade.java
  6. 17 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mapper/KxsLkbActTradeMapper.java
  7. 79 5
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/mq/RabbitLkbQueueListener.java
  8. 15 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/KxsLkbActTradeService.java
  9. 19 0
      kxs-stat/kxs-stat-biz/src/main/java/com/kxs/stat/biz/service/impl/KxsLkbActTradeServiceImpl.java
  10. 19 0
      kxs-stat/kxs-stat-biz/src/main/resources/mapper/KxsLkbActTradeMapper.xml
  11. 31 6
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/RemoteOldService.java
  12. 1 0
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/product/impl/KxsMachineServiceImpl.java
  13. 35 12
      kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsUserServiceImpl.java
  14. 0 2
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserBank.java
  15. 0 2
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserReal.java

+ 190 - 0
kxs-product/kxs-product-api/src/main/java/com/kxs/product/api/amqp/rabbit/RabbitKxsOrderQueueMQ.java

@@ -0,0 +1,190 @@
+package com.kxs.product.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.time.LocalDateTime;
+import java.util.UUID;
+
+/**
+ * mq 订单普通队列 配置
+ *
+ * @author 没秃顶的码农
+ * @date 2024-04-25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+public class RabbitKxsOrderQueueMQ extends AbstractMQ {
+
+
+    /**
+     * 订单交易队列
+     */
+    public static final String QUEUE_NAME = "QUEUE_KXS_ORDER_DIVISION";
+
+    /**
+     * 死队列名称
+     */
+    public static final String DEAD_QUEUE_NAME = null;
+
+    /**
+     * 内置msg 消息体定义
+     **/
+    private MsgEntity msgEntity;
+
+    /**
+     *  定义Msg消息载体
+     **/
+    @Data
+    public static class MsgEntity {
+
+        /**
+         * 订单ID
+         */
+        private String id;
+        /**
+         * 订单状态(0待付款,1已付款,2已完成,3已发货,4已退款)
+         */
+        private Integer status;
+        /**
+         * 订单创建时间
+         */
+        private String createDate;
+        /**
+         * 发货的机具券码
+         */
+        private String snNos;
+        /**
+         * 备注
+         */
+        private String remark;
+        /**
+         * 买入计数
+         */
+        private Integer buyCount;
+        /**
+         * 支付状态
+         */
+        private Integer payStatus;
+        /**
+         * 产品 ID
+         */
+        private Integer productId;
+        /**
+         * 发送状态
+         */
+        private Integer sendStatus;
+        /**
+         * 提货方式(1邮寄到付,2上门自提)
+         */
+        private Integer deliveryType;
+        /**
+         * 退款状态
+         */
+        private Integer refundStatus;
+        /**
+         * 支付方式(1支付宝,3余额,4储蓄金)
+         */
+        private Integer payMode;
+        /**
+         * 发送日期
+         */
+        private LocalDateTime sendDate;
+        /**
+         * 支付时间
+         */
+        private LocalDateTime payDate;
+        /**
+         * 地址
+         */
+        private String address;
+        /**
+         * 所在省市区
+         */
+        private String areas;
+        /**
+         * 支付总金额
+         */
+        private BigDecimal totalPrice;
+        /**
+         * 移动电话
+         */
+        private String mobile;
+        /**
+         * 真实姓名
+         */
+        private String realName;
+        /**
+         * 订单号
+         */
+        private String orderNo;
+        /**
+         * 用户 ID
+         */
+        private Integer userId;
+        /**
+         * 父订单 ID
+         */
+        private Integer parentOrderId;
+
+
+    }
+
+    @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 RabbitKxsOrderQueueMQ build(MsgEntity message){
+
+        return new RabbitKxsOrderQueueMQ(message);
+    }
+
+    /**
+     * 解析MQ消息, 一般用于接收MQ消息时
+     */
+    public static MsgEntity parse(String msg){
+        return JSON.parseObject(msg, MsgEntity.class);
+    }
+
+}

+ 59 - 0
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mq/RabbitKxsOrderQueueListener.java

@@ -0,0 +1,59 @@
+package com.kxs.product.biz.mq;
+
+import com.alibaba.fastjson.JSON;
+import com.kxs.product.api.amqp.rabbit.RabbitKxsOrderQueueMQ;
+import com.kxs.product.api.amqp.rabbit.RabbitShopTimeoutQueueMQ;
+import com.kxs.product.api.model.KxsShopOrder;
+import com.kxs.product.biz.constant.enums.KxsShopEnum;
+import com.kxs.product.biz.service.KxsShopOrderService;
+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 RabbitKxsOrderQueueListener {
+
+	/**
+	 * 监听 老平台订单队列
+	 *
+	 * @param message 消息
+	 */
+	@RabbitListener(queues = RabbitKxsOrderQueueMQ.QUEUE_NAME, ackMode = "MANUAL")
+	@RabbitHandler
+	public void onMessage(String msg, Message message, Channel channel){
+		log.info("收到客小爽订单消息: " + RabbitKxsOrderQueueMQ.parse(msg));
+        try {
+			RabbitKxsOrderQueueMQ.MsgEntity parse = RabbitKxsOrderQueueMQ.parse(msg);
+			//处理百城千团订单,创建活动
+			if(parse.getProductId() == 100 && parse.getStatus() == 2){
+
+			}
+
+			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);
+			}
+        }
+    }
+
+
+}

+ 10 - 11
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mq/RabbitShopQueueListener.java

@@ -1,5 +1,6 @@
 package com.kxs.product.biz.mq;
 package com.kxs.product.biz.mq;
 
 
+import com.alibaba.fastjson.JSON;
 import com.kxs.product.api.amqp.rabbit.RabbitShopTimeoutQueueMQ;
 import com.kxs.product.api.amqp.rabbit.RabbitShopTimeoutQueueMQ;
 import com.kxs.product.api.model.KxsShopOrder;
 import com.kxs.product.api.model.KxsShopOrder;
 import com.kxs.product.biz.constant.enums.KxsShopEnum;
 import com.kxs.product.biz.constant.enums.KxsShopEnum;
@@ -10,7 +11,6 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.core.Message;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitHandler;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.amqp.rabbit.annotation.RabbitListener;
-import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.io.IOException;
 import java.io.IOException;
@@ -35,26 +35,25 @@ public class RabbitShopQueueListener {
 	@RabbitListener(queues = RabbitShopTimeoutQueueMQ.QUEUE_NAME, ackMode = "MANUAL")
 	@RabbitListener(queues = RabbitShopTimeoutQueueMQ.QUEUE_NAME, ackMode = "MANUAL")
 	@RabbitHandler
 	@RabbitHandler
 	public void onMessage(String msg, Message message, Channel channel){
 	public void onMessage(String msg, Message message, Channel channel){
-		log.info("shop消费端Payload: " + RabbitShopTimeoutQueueMQ.parse(msg));
+		log.info("商品下单过期队列: " + RabbitShopTimeoutQueueMQ.parse(msg));
         try {
         try {
 			RabbitShopTimeoutQueueMQ.MsgEntity parse = RabbitShopTimeoutQueueMQ.parse(msg);
 			RabbitShopTimeoutQueueMQ.MsgEntity parse = RabbitShopTimeoutQueueMQ.parse(msg);
 			Integer id = parse.getId();
 			Integer id = parse.getId();
 			//根据订单号查询该订单是否付款成功,如果仍未付款成功,关闭订单
 			//根据订单号查询该订单是否付款成功,如果仍未付款成功,关闭订单
-			KxsShopOrder byId = kxsShopOrderService.getById(id);
-			if (byId != null && byId.getStatus().equals(KxsShopEnum.ORDER_NO_PAY.getType())){
-				KxsShopOrder kxsShopOrder = new KxsShopOrder();
-				BeanUtils.copyProperties(parse,kxsShopOrder);
-				//取消订单
+			KxsShopOrder order = kxsShopOrderService.getById(id);
+			if (order != null && order.getStatus().equals(KxsShopEnum.ORDER_NO_PAY.getType())){
+
 				//todo 这里只取消了我们平台的订单,如已发起支付渠道调用,仍需取消支付渠道
 				//todo 这里只取消了我们平台的订单,如已发起支付渠道调用,仍需取消支付渠道
-				kxsShopOrderService.cancelOrder(kxsShopOrder);
+				order.setStatus(KxsShopEnum.ORDER_CANCEL.getType());
+				kxsShopOrderService.updateById(order);
 			}
 			}
 			channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
 			channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
         } catch (Exception e) {
         } catch (Exception e) {
-			log.error(e.getMessage(), e);
+			log.error("商品下单过期队列消费失败:{}", JSON.toJSONString(msg), e);
 			try {
 			try {
 				channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
 				channel.basicReject(message.getMessageProperties().getDeliveryTag(), false);
 			} catch (IOException ex) {
 			} catch (IOException ex) {
-				log.error("进入死信队列失败" + ex.getMessage(), ex);
+				log.error("商品下单过期进入死信队列失败" + ex.getMessage(), ex);
 			}
 			}
         }
         }
     }
     }
@@ -67,7 +66,7 @@ public class RabbitShopQueueListener {
 	@RabbitListener(queues = RabbitShopTimeoutQueueMQ.DEAD_QUEUE_NAME)
 	@RabbitListener(queues = RabbitShopTimeoutQueueMQ.DEAD_QUEUE_NAME)
 	@RabbitHandler
 	@RabbitHandler
 	public void onDeadMessage(String msg, Message message, Channel channel){
 	public void onDeadMessage(String msg, Message message, Channel channel){
-		log.info("死信队列Payload: " + RabbitShopTimeoutQueueMQ.parse(msg));
+		log.info("商品下单过期死信队列: " + RabbitShopTimeoutQueueMQ.parse(msg));
         try {
         try {
 			RabbitShopTimeoutQueueMQ.MsgEntity parse = RabbitShopTimeoutQueueMQ.parse(msg);
 			RabbitShopTimeoutQueueMQ.MsgEntity parse = RabbitShopTimeoutQueueMQ.parse(msg);
         } catch (Exception e) {
         } catch (Exception e) {

+ 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> {
+
+}
+

+ 79 - 5
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.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.kxs.common.core.constant.SecurityConstants;
 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.R;
 import com.kxs.common.core.util.RetOps;
 import com.kxs.common.core.util.RetOps;
 import com.kxs.common.core.util.TotalDateUtil;
 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.amqp.rabbit.RabbitLkbTradeQueueMQ;
+import com.kxs.stat.api.model.KxsLkbActTrade;
 import com.kxs.stat.api.model.KxsLkbTrade;
 import com.kxs.stat.api.model.KxsLkbTrade;
 import com.kxs.stat.biz.constant.enums.TotalTypeEnum;
 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.stat.biz.service.KxsLkbTradeService;
 import com.kxs.user.api.feign.RemoteKxsUserService;
 import com.kxs.user.api.feign.RemoteKxsUserService;
 import com.kxs.user.api.model.KxsUser;
 import com.kxs.user.api.model.KxsUser;
@@ -38,12 +42,82 @@ import java.io.IOException;
 public class RabbitLkbQueueListener {
 public class RabbitLkbQueueListener {
 
 
     private final KxsLkbTradeService kxsLkbTradeService;
     private final KxsLkbTradeService kxsLkbTradeService;
+    private final KxsLkbActTradeService kxsLkbActTradeService;
 
 
     private final RemoteKxsUserService remoteKxsUserService;
     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()
                     .getData()
                     .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
                     .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
             String pidPath = user.getPidPath();
             String pidPath = user.getPidPath();
-            String[] split = pidPath.split(",");
+            String[] split = pidPath.split(StrUtil.COMMA);
             for (String userId : split) {
             for (String userId : split) {
                 int pid = Integer.parseInt(userId);
                 int pid = Integer.parseInt(userId);
                 if(pid <= 0){
                 if(pid <= 0){
@@ -147,7 +221,7 @@ public class RabbitLkbQueueListener {
             try {
             try {
                 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
                 channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
             } catch (IOException ex) {
             } catch (IOException ex) {
-                log.error("来客吧交易数据消费失败" + ex.getMessage(), ex);
+                log.error("来客吧交易数据手动确认失败" + ex.getMessage(), ex);
             }
             }
         }
         }
     }
     }

+ 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")
 	@PostExchange("/v1/kxsmain/tochargebackrecord/addtochargebackrecord")
 	R savePosAdvance(@RequestParam Map<String, Object> param);
 	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 请求实体
 	 * @param param 请求实体
 	 */
 	 */
 	@GetExchange("/v1/kxsmain/users/getteamopenposinfo")
 	@GetExchange("/v1/kxsmain/users/getteamopenposinfo")
 	R teamOpenTotalData(@RequestParam("value") String param);
 	R teamOpenTotalData(@RequestParam("value") String param);
-	/**
-	 * 奖池同步交易额
-	 * @param param 请求实体
-	 */
-	@GetExchange("/Api/v1/UserTradeDaySummary/GetUserTradeAmout")
-	R GetUserTradeAmout(@RequestParam("value")  Map<String, Object> param);
+
 }
 }

+ 1 - 0
kxs-transfer/src/main/java/com/kxs/transfer/api/service/product/impl/KxsMachineServiceImpl.java

@@ -53,6 +53,7 @@ public class KxsMachineServiceImpl extends ServiceImpl<KxsMachineMapper, KxsMach
         OperationType operation = dmlData.getOperation();
         OperationType operation = dmlData.getOperation();
         UpdateWrapper<KxsMachine> wrapper = new UpdateWrapper<>();
         UpdateWrapper<KxsMachine> wrapper = new UpdateWrapper<>();
         LambdaUpdateWrapper<KxsMachine> lambda = wrapper.lambda().eq(KxsMachine::getId, id);
         LambdaUpdateWrapper<KxsMachine> lambda = wrapper.lambda().eq(KxsMachine::getId, id);
+
         for (String field : changeFieldList) {
         for (String field : changeFieldList) {
 
 
             switch (field) {
             switch (field) {

+ 35 - 12
kxs-transfer/src/main/java/com/kxs/transfer/api/service/user/impl/KxsUserServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.aliyun.dts.subscribe.clients.record.OperationType;
 import com.aliyun.dts.subscribe.clients.record.OperationType;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,6 +13,7 @@ import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.common.core.constant.enums.ErrorTypeEnum;
 import com.kxs.common.core.constant.enums.ErrorTypeEnum;
 import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.util.R;
 import com.kxs.common.core.util.R;
+import com.kxs.product.api.model.KxsMachine;
 import com.kxs.store.api.feign.RemoteKxsStoreService;
 import com.kxs.store.api.feign.RemoteKxsStoreService;
 import com.kxs.store.api.model.KxsWarehouseLimit;
 import com.kxs.store.api.model.KxsWarehouseLimit;
 import com.kxs.system.api.feign.RemoteUserMsgService;
 import com.kxs.system.api.feign.RemoteUserMsgService;
@@ -64,6 +66,9 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
         String userId = dmlData.getId();
         String userId = dmlData.getId();
 
 
         KxsUser user = new KxsUser();
         KxsUser user = new KxsUser();
+        UpdateWrapper<KxsUserReal> wrapper = new UpdateWrapper<>();
+        LambdaUpdateWrapper<KxsUserReal> lambda = wrapper.lambda().eq(KxsUserReal::getUserId, userId);
+
         KxsUserReal userReal = new KxsUserReal();
         KxsUserReal userReal = new KxsUserReal();
         KxsUserBank userBank = new KxsUserBank();
         KxsUserBank userBank = new KxsUserBank();
         //操作类型
         //操作类型
@@ -79,11 +84,15 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
 
 
             switch (field) {
             switch (field) {
                 case "RealName":
                 case "RealName":
-                    user.setUsername(fieldDataMap.get(field).toString());
-                    userReal.setRealName(fieldDataMap.get(field).toString());
+                    if(fieldDataMap.get(field) != null){
+                        user.setUsername(fieldDataMap.get(field).toString());
+                        userReal.setRealName(fieldDataMap.get(field).toString());
+                    }
                     break;
                     break;
                 case "CertId":
                 case "CertId":
-                    userReal.setIdCard(fieldDataMap.get(field).toString());
+                    if(fieldDataMap.get(field) != null){
+                        userReal.setIdCard(fieldDataMap.get(field).toString());
+                    }
                     break;
                     break;
                 case "HandCertImage":
                 case "HandCertImage":
                     userReal.setIdCardHand(fieldDataMap.get(field).toString());
                     userReal.setIdCardHand(fieldDataMap.get(field).toString());
@@ -95,19 +104,25 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
                     userReal.setIdCardFront(fieldDataMap.get(field).toString());
                     userReal.setIdCardFront(fieldDataMap.get(field).toString());
                     break;
                     break;
                 case "SettleBankName":
                 case "SettleBankName":
-                    userBank.setBankName(fieldDataMap.get(field).toString());
+                    if(fieldDataMap.get(field) != null){
+                        userBank.setBankName(fieldDataMap.get(field).toString());
+                    }
                     break;
                     break;
                 case "Mobile":
                 case "Mobile":
                     user.setPhone(fieldDataMap.get(field).toString());
                     user.setPhone(fieldDataMap.get(field).toString());
                     break;
                     break;
                 case "SettleBankCardNo":
                 case "SettleBankCardNo":
-                    userBank.setBankCode(fieldDataMap.get(field).toString());
+                    if(fieldDataMap.get(field) != null){
+                        userBank.setBankCode(fieldDataMap.get(field).toString());
+                    }
                     break;
                     break;
                 case "BankCardPositiveImage":
                 case "BankCardPositiveImage":
                     userBank.setBankPic(fieldDataMap.get(field).toString());
                     userBank.setBankPic(fieldDataMap.get(field).toString());
                     break;
                     break;
                 case "SeoTitle":
                 case "SeoTitle":
-                    userBank.setBankOpen(fieldDataMap.get(field).toString());
+                    if(fieldDataMap.get(field) != null){
+                        userBank.setBankOpen(fieldDataMap.get(field).toString());
+                    }
                     break;
                     break;
                 case "SettleBankCardName":
                 case "SettleBankCardName":
                     userBank.setBankCardName(fieldDataMap.get(field).toString());
                     userBank.setBankCardName(fieldDataMap.get(field).toString());
@@ -144,8 +159,10 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
                     user.setRealStatus(Integer.valueOf(fieldDataMap.get(field).toString()));
                     user.setRealStatus(Integer.valueOf(fieldDataMap.get(field).toString()));
                     break;
                     break;
                 case "AuthDate":
                 case "AuthDate":
-                    userReal.setCreateTime(LocalDateTimeUtil.parse(fieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
-                    userBank.setCreateTime(LocalDateTimeUtil.parse(fieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    if (fieldDataMap.get(field) != null) {
+                        userReal.setCreateTime(LocalDateTimeUtil.parse(fieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                        userBank.setCreateTime(LocalDateTimeUtil.parse(fieldDataMap.get(field).toString(), DatePattern.NORM_DATETIME_PATTERN));
+                    }
                     break;
                     break;
                 case "Status":
                 case "Status":
                     if(Integer.parseInt(fieldDataMap.get(field).toString()) == 0 || Integer.parseInt(fieldDataMap.get(field).toString()) == 1){
                     if(Integer.parseInt(fieldDataMap.get(field).toString()) == 0 || Integer.parseInt(fieldDataMap.get(field).toString()) == 1){
@@ -223,14 +240,11 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
 
 
         if(operation.equals(OperationType.UPDATE)){
         if(operation.equals(OperationType.UPDATE)){
 
 
-            if(BeanUtil.isNotEmpty(user, "entityClass")){
-                user.setId(Integer.valueOf(userId));
-                baseMapper.updateById(user);
-            }
             if(BeanUtil.isNotEmpty(userReal, "entityClass")){
             if(BeanUtil.isNotEmpty(userReal, "entityClass")){
                 KxsUserReal kxsUserReal = kxsUserRealMapper.selectOne(Wrappers.<KxsUserReal>lambdaQuery().eq(KxsUserReal::getUserId, userId));
                 KxsUserReal kxsUserReal = kxsUserRealMapper.selectOne(Wrappers.<KxsUserReal>lambdaQuery().eq(KxsUserReal::getUserId, userId));
                 if(kxsUserReal != null){
                 if(kxsUserReal != null){
                     userReal.setId(kxsUserReal.getId());
                     userReal.setId(kxsUserReal.getId());
+                    //如果为注销实名状态
                     kxsUserRealMapper.updateById(userReal);
                     kxsUserRealMapper.updateById(userReal);
                 }else{
                 }else{
                     userReal.setUserId(Integer.valueOf(userId));
                     userReal.setUserId(Integer.valueOf(userId));
@@ -247,6 +261,15 @@ public class KxsUserServiceImpl extends ServiceImpl<KxsUserMapper, KxsUser> impl
                     kxsUserBankMapper.insert(userBank);
                     kxsUserBankMapper.insert(userBank);
                 }
                 }
             }
             }
+            if(BeanUtil.isNotEmpty(user, "entityClass")){
+                user.setId(Integer.valueOf(userId));
+                baseMapper.updateById(user);
+
+                if(user.getRealStatus() != null && user.getRealStatus() == 0){
+                    kxsUserRealMapper.delete(Wrappers.<KxsUserReal>lambdaQuery().eq(KxsUserReal::getUserId, userId));
+                    kxsUserBankMapper.delete(Wrappers.<KxsUserBank>lambdaQuery().eq(KxsUserBank::getUserId, userId));
+                }
+            }
         }
         }
         //新增数据必然没有实名信息,所以不做操作
         //新增数据必然没有实名信息,所以不做操作
         if(operation.equals(OperationType.INSERT)){
         if(operation.equals(OperationType.INSERT)){

+ 0 - 2
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserBank.java

@@ -52,9 +52,7 @@ public class KxsUserBank extends Model<KxsUserBank> implements Serializable {
     /**
     /**
      * 删除标记,0未删除,1已删除
      * 删除标记,0未删除,1已删除
      */
      */
-    @TableLogic
     @Schema(description = "删除标记,0未删除,1已删除")
     @Schema(description = "删除标记,0未删除,1已删除")
-    @TableField(fill = FieldFill.INSERT)
     private String delFlag;
     private String delFlag;
 
 
 
 

+ 0 - 2
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsUserReal.java

@@ -53,9 +53,7 @@ public class KxsUserReal extends Model<KxsUserReal> implements Serializable {
     /**
     /**
      * 删除标记,0未删除,1已删除
      * 删除标记,0未删除,1已删除
      */
      */
-    @TableLogic
     @Schema(description = "删除标记,0未删除,1已删除")
     @Schema(description = "删除标记,0未删除,1已删除")
-    @TableField(fill = FieldFill.INSERT)
     private String delFlag;
     private String delFlag;