Переглянути джерело

BUG修正 修改分发订单加入chanleId
任务新建 分发订单回调接口

秦国才 4 роки тому
батько
коміт
1de215cbbc
18 змінених файлів з 603 додано та 16 видалено
  1. 3 0
      common/fire-dto/src/main/java/com/fire/dto/MobileFlowDispatchRec.java
  2. 9 0
      common/fire-dto/src/main/java/com/fire/es/DispatchDto.java
  3. 7 14
      modules/admin/src/main/java/com/fire/admin/service/OrderManagementService.java
  4. 4 2
      modules/get-order/src/main/java/com/fire/getorder/service/impl/GetOrderServiceImpl.java
  5. 12 0
      modules/set-callback/pom.xml
  6. 21 0
      modules/set-callback/src/main/java/com/fire/setcallback/SetCallbackApplication.java
  7. 21 0
      modules/set-callback/src/main/java/com/fire/setcallback/data/DataPool.java
  8. 22 0
      modules/set-callback/src/main/java/com/fire/setcallback/mapper/ChannelSupplierMapper.java
  9. 59 0
      modules/set-callback/src/main/java/com/fire/setcallback/request/SetCallbackParam.java
  10. 35 0
      modules/set-callback/src/main/java/com/fire/setcallback/rest/SetCallbackRest.java
  11. 17 0
      modules/set-callback/src/main/java/com/fire/setcallback/service/CacheService.java
  12. 21 0
      modules/set-callback/src/main/java/com/fire/setcallback/service/SetCallbackService.java
  13. 33 0
      modules/set-callback/src/main/java/com/fire/setcallback/service/impl/CacheServiceImpl.java
  14. 124 0
      modules/set-callback/src/main/java/com/fire/setcallback/service/impl/SetCallbackServiceImpl.java
  15. 44 0
      modules/set-callback/src/main/java/com/fire/setcallback/task/CacheCustomerTask.java
  16. 37 0
      modules/set-callback/src/main/resources/bootstrap.yml
  17. 65 0
      modules/set-callback/src/main/resources/logback-spring.xml
  18. 69 0
      modules/set-callback/src/main/resources/mapper/ChannelSupplierMapper.xml

+ 3 - 0
common/fire-dto/src/main/java/com/fire/dto/MobileFlowDispatchRec.java

@@ -81,6 +81,9 @@ public class MobileFlowDispatchRec {
     @ApiModelProperty(value = "通道产品id")
     private Long channelProductsId;
 
+    @ApiModelProperty(value = "通道ID")
+    private Long channelId;
+
     @ApiModelProperty(value = "运营商订单号")
     private String operatorId;
 

+ 9 - 0
common/fire-dto/src/main/java/com/fire/es/DispatchDto.java

@@ -188,10 +188,19 @@ public class DispatchDto {
             otherFields = @InnerField(suffix = "keyword", type=FieldType.Keyword))
     private String channelName;
 
+    /**
+     * 通道ID
+     */
+    @ApiModelProperty(value = "通道ID")
+    @Field(type = FieldType.Long)
+    private Long channelId;
+
     /**
      * 运营商:1、移动 2、电信 3、联通
      */
     @ApiModelProperty("运营商:1、移动 2、电信 3、联通")
     @Field(type = FieldType.Integer)
     private Integer phoneOperator;
+
+
 }

+ 7 - 14
modules/admin/src/main/java/com/fire/admin/service/OrderManagementService.java

@@ -1,7 +1,6 @@
 package com.fire.admin.service;
 
 import cn.hutool.core.util.StrUtil;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fire.admin.data.DataPool;
 import com.fire.admin.request.DispatchSearchPram;
@@ -25,7 +24,6 @@ import org.elasticsearch.search.aggregations.metrics.SumAggregationBuilder;
 import org.elasticsearch.search.sort.FieldSortBuilder;
 import org.elasticsearch.search.sort.SortBuilders;
 import org.elasticsearch.search.sort.SortOrder;
-import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
@@ -47,7 +45,6 @@ import javax.annotation.Resource;
 
 import static com.fire.common.constants.RocketTopic.ORDER_TOPIC;
 import static com.fire.dto.enums.RedisKey.ORDER_INFO;
-import static com.fire.dto.enums.Status.ORDER_NOT_EXISTS;
 
 @Service
 @Slf4j
@@ -661,9 +658,14 @@ public class OrderManagementService {
     }
 
 
-    public List<FlowOrderInfo> getOrderRedisList(List<String> orderIds, String resString) {
+    /**
+     * 更改订单记状态
+     */
+    public String setOrderStatus(OrderSetPram orderSetPram) {
+        //获取redis中订单数据
+        String resString = "";
         List<FlowOrderInfo> flowOrderInfoList = new ArrayList<FlowOrderInfo>();
-        for (String orderId : orderIds) {
+        for (String orderId : orderSetPram.getOrderIds()) {
             long temNum = 0L;
             try {
                 temNum = Long.valueOf(orderId) / 10000000;
@@ -677,16 +679,7 @@ public class OrderManagementService {
                 resString = resString + "订单号码错误或不存在:" + orderId + ";";
             }
         }
-        return flowOrderInfoList;
-    }
 
-    /**
-     * 更改订单记状态
-     */
-    public String setOrderStatus(OrderSetPram orderSetPram) {
-        //获取redis中订单数据
-        String resString = "";
-        List<FlowOrderInfo> flowOrderInfoList = getOrderRedisList(orderSetPram.getOrderIds(), resString);
         //查询订单状态
         for (FlowOrderInfo flowOrderInfo : flowOrderInfoList) {
             //判断置重发状态

+ 4 - 2
modules/get-order/src/main/java/com/fire/getorder/service/impl/GetOrderServiceImpl.java

@@ -30,6 +30,8 @@ import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+import static com.fire.dto.enums.RedisKey.ORDER_DOWN;
+import static com.fire.dto.enums.RedisKey.ORDER_INFO;
 import static com.fire.dto.enums.Status.*;
 import static com.fire.dto.enums.Status.OVER_TIME;
 import static com.fire.dto.enums.ValidStatus.INVALID;
@@ -181,7 +183,7 @@ public class GetOrderServiceImpl implements GetOrderService {
             String searchString = extensionId + "." + customerId;
             //redis位置
             int num = Math.abs(searchString.hashCode() % 10000);
-            String redisIndex = "{down.order." + num + "}";
+            String redisIndex = "{" +ORDER_DOWN.key() + "." + num + "}";
             //redis查询orderId
             String resOrderId = jedisCluster.hget(redisIndex, redisIndex + searchString);
             if (resOrderId==null){
@@ -210,7 +212,7 @@ public class GetOrderServiceImpl implements GetOrderService {
             orderResp.setRMsg(ORDER_NOT_EXISTS.message());
             return responseDto;
         }
-        String redisIndex = "order.info." + temNum;
+        String redisIndex = ORDER_INFO.key() + temNum;
         String resString = jedisCluster.hget(redisIndex,orderId);
         if (StringUtils.isEmpty(resString)) {
             orderResp.setRCode(ORDER_NOT_EXISTS.status());

+ 12 - 0
modules/set-callback/pom.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <artifactId>modules</artifactId>
+        <groupId>com.blue</groupId>
+        <version>1.0</version>
+    </parent>
+    <artifactId>set-callback</artifactId>
+
+</project>

+ 21 - 0
modules/set-callback/src/main/java/com/fire/setcallback/SetCallbackApplication.java

@@ -0,0 +1,21 @@
+package com.fire.setcallback;
+
+import com.spring4all.swagger.EnableSwagger2Doc;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.scheduling.annotation.EnableScheduling;
+
+@SpringBootApplication(scanBasePackages = {"com.fire.setcallback", "com.fire.common.redis"})
+@EnableDiscoveryClient
+@EnableSwagger2Doc
+@EnableScheduling
+@MapperScan({"com.fire.setcallback.mapper"})
+public class SetCallbackApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(SetCallbackApplication.class, args);
+    }
+
+}

+ 21 - 0
modules/set-callback/src/main/java/com/fire/setcallback/data/DataPool.java

@@ -0,0 +1,21 @@
+package com.fire.setcallback.data;
+
+import com.fire.dto.ChannelSupplier;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 需要在内存中缓存的信息
+ *
+ * @author ZJQ 2021年5月17日16:14:47
+ */
+public class DataPool {
+
+    /**
+     * 供应商信息
+     */
+    public static Map<Long, ChannelSupplier> supplierHashMap = new HashMap<>();
+
+
+}

+ 22 - 0
modules/set-callback/src/main/java/com/fire/setcallback/mapper/ChannelSupplierMapper.java

@@ -0,0 +1,22 @@
+package com.fire.setcallback.mapper;
+
+import com.fire.dto.ChannelSupplier;
+
+import java.util.List;
+
+/**
+ * 供应商表(ChannelSupplier)表数据库访问层
+ *
+ * @author ZJQ  2021-06-23 16:38:36
+ */
+public interface ChannelSupplierMapper {
+
+    /**
+     * 查询所有供应商和通道
+     *
+     * @return 实例对象
+     */
+    List<ChannelSupplier> queryAll();
+
+}
+

+ 59 - 0
modules/set-callback/src/main/java/com/fire/setcallback/request/SetCallbackParam.java

@@ -0,0 +1,59 @@
+package com.fire.setcallback.request;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "回调状态请求参数")
+@JsonIgnoreProperties(ignoreUnknown = true)
+@Data
+public class SetCallbackParam {
+
+    @ApiModelProperty(value = "平台流水号")
+    @JsonProperty(value = "stream_id")
+    private Long streamId;
+
+    @ApiModelProperty(value = "商户交易订单号")
+    @JsonProperty(value = "order_no")
+    private String orderNo;
+
+    @ApiModelProperty(value = "订单时间 时间戳")
+    @JsonProperty(value = "order_time")
+    private Integer orderTime;
+
+    @ApiModelProperty(value = "官方流水号,失败的情况下是null")
+    @JsonProperty(value = "official_stream_id")
+    private String officialStreamId;
+
+    @ApiModelProperty(value = "数量 都是1")
+    @JsonProperty(value = "number")
+    private int number;
+
+    @ApiModelProperty(value = "支付金额,保留一位小数,失败的情况下是null")
+    @JsonProperty(value = "pay_money")
+    private BigDecimal payMoney;
+
+    @ApiModelProperty(value = "状态 SUCCESS 或者 FAILED")
+    @JsonProperty(value = "status")
+    private int status;
+
+    @ApiModelProperty(value = "回调时间 时间戳")
+    @JsonProperty(value = "timestamp")
+    private Integer timestamp;
+
+
+    @ApiModelProperty(value = "签名类型 填MD5")
+    @JsonProperty(value = "sign_type")
+    private String signType;
+
+    @ApiModelProperty(value = "签名")
+    @JsonProperty(value = "sign")
+    private String sign;
+
+}

+ 35 - 0
modules/set-callback/src/main/java/com/fire/setcallback/rest/SetCallbackRest.java

@@ -0,0 +1,35 @@
+package com.fire.setcallback.rest;
+
+import com.fire.setcallback.request.SetCallbackParam;
+import com.fire.setcallback.service.SetCallbackService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+
+
+@Api(tags = "分发订单回调接口")
+@RestController
+@RequestMapping("/fire/")
+public class SetCallbackRest{
+
+    @Resource
+    private SetCallbackService setCallbackService;
+    /**
+     * 分发订单回调接口
+     *
+     * @param  setCallbackParam 分发记录回调参数
+     * @return String 响应
+     */
+    @PostMapping("/setcallback")
+    @ApiOperation(value = "分发订单回调接口")
+    public String setCallback(@RequestBody SetCallbackParam setCallbackParam) {
+        return setCallbackService.setCallback(setCallbackParam);
+    }
+
+
+}

+ 17 - 0
modules/set-callback/src/main/java/com/fire/setcallback/service/CacheService.java

@@ -0,0 +1,17 @@
+package com.fire.setcallback.service;
+
+
+/**
+ * 供应商服务层
+ *
+ * @author ZJQ 2021年6月23日16:33:22
+ */
+public interface CacheService {
+
+    /**
+     * 缓存供应商信息
+     */
+    void cacheSupplier();
+
+
+}

+ 21 - 0
modules/set-callback/src/main/java/com/fire/setcallback/service/SetCallbackService.java

@@ -0,0 +1,21 @@
+package com.fire.setcallback.service;
+
+
+import com.fire.setcallback.request.SetCallbackParam;
+
+/**
+ * 下单服务接口
+ *
+ * @author ZJQ 2021年5月14日17:13:54
+ */
+public interface SetCallbackService {
+
+    /**
+     * 获取订单状态方法
+     *
+     * @param setCallbackParam 分发回调参数
+     */
+    String setCallback(SetCallbackParam setCallbackParam);
+
+
+}

+ 33 - 0
modules/set-callback/src/main/java/com/fire/setcallback/service/impl/CacheServiceImpl.java

@@ -0,0 +1,33 @@
+package com.fire.setcallback.service.impl;
+
+
+import com.alibaba.nacos.common.utils.CollectionUtils;
+import com.fire.dto.ChannelSupplier;
+import com.fire.setcallback.data.DataPool;
+import com.fire.setcallback.mapper.ChannelSupplierMapper;
+import com.fire.setcallback.service.CacheService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 供应商缓存实现层
+ *
+ * @author ZJQ 2021年6月23日16:37:01
+ */
+@Service
+public class CacheServiceImpl implements CacheService {
+
+    @Resource
+    private ChannelSupplierMapper channelSupplierMapper;
+
+    @Override
+    public void cacheSupplier() {
+        List<ChannelSupplier> channelSuppliers = channelSupplierMapper.queryAll();
+        if (CollectionUtils.isNotEmpty(channelSuppliers)) {
+            DataPool.supplierHashMap = channelSuppliers.stream().collect(Collectors.toMap(ChannelSupplier::getChannelId, a -> a, (k1, k2) -> k2));
+        }
+    }
+}

+ 124 - 0
modules/set-callback/src/main/java/com/fire/setcallback/service/impl/SetCallbackServiceImpl.java

@@ -0,0 +1,124 @@
+package com.fire.setcallback.service.impl;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fire.common.auth.SupplierAuth;
+import com.fire.common.redis.RedisPriorityQueueScript;
+import com.fire.dto.ChannelSupplier;
+import com.fire.dto.FlowOrderInfo;
+import com.fire.dto.MobileFlowDispatchRec;
+import com.fire.setcallback.data.DataPool;
+import com.fire.setcallback.request.SetCallbackParam;
+import com.fire.setcallback.service.SetCallbackService;
+import com.fire.supplier.dto.RequestHeader;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import redis.clients.jedis.JedisCluster;
+import javax.annotation.Resource;
+import java.util.Date;
+
+import static com.fire.dto.enums.RedisKey.CHILD_ORDER_INFO;
+import static com.fire.dto.enums.RedisKey.ORDER_INFO;
+import static com.fire.dto.enums.OrderStatus.ORDER_FAIL;
+
+/**
+ * 客户查询定单状态
+ *
+ * @author QGC 2021年6月23日17:13:54
+ */
+@Service
+@Slf4j
+public class SetCallbackServiceImpl implements SetCallbackService {
+
+    @Resource
+    private RedisPriorityQueueScript redisPriorityQueueScript;
+
+    @Resource
+    private JedisCluster jedisCluster;
+
+    @Resource
+    private SupplierAuth supplierAuth;
+
+    @Override
+    public String setCallback(SetCallbackParam setCallbackParam) {
+        //查询redis 获取数据
+        String orderNo = setCallbackParam.getOrderNo();
+        long hKey = Long.valueOf(orderNo) / 10000000;
+        String childStr = jedisCluster.hget(CHILD_ORDER_INFO.key() + hKey, orderNo);
+        ObjectMapper om = new ObjectMapper();
+        MobileFlowDispatchRec mobileFlowDispatchRec = null;
+        try {
+            mobileFlowDispatchRec = om.readValue(childStr, MobileFlowDispatchRec.class);
+            Long ChannelId = mobileFlowDispatchRec.getChannelId();
+            //查询运营商
+            ChannelSupplier channelSupplier  = DataPool.supplierHashMap.get(ChannelId);
+            String pwd = channelSupplier.getPasswd();
+            //校验参数 创建Header
+            RequestHeader header = new RequestHeader();
+            header.setOrgCode(channelSupplier.getAppKey());
+            header.setPartnerId(Long.valueOf(channelSupplier.getAccount()));
+            header.setTimestamp(setCallbackParam.getTimestamp());
+            header.setSign("MD5");
+            String sign = setCallbackParam.getSign();
+            String version1Sign = supplierAuth.version1Sign(pwd, header);
+            //校验失败
+            if (!sign.equals(version1Sign)){
+                return "failed";
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return "failed";
+        }
+        //查询订单信息
+        Long orderId = mobileFlowDispatchRec.getOrderId();
+        hKey = orderId / 10000000;
+        String orderStr = jedisCluster.hget(ORDER_INFO.key() + hKey,String.valueOf(orderId));
+        ObjectMapper orderOm = new ObjectMapper();
+        FlowOrderInfo flowOrderInfo = null;
+        try {
+            flowOrderInfo = orderOm.readValue(orderStr, FlowOrderInfo.class);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return "failed";
+        }
+        //状态失败 主订单重入队列 分发订单置状态失败
+        if ("FAILED".equals(setCallbackParam.getStatus())){
+            mobileFlowDispatchRec.setSendStatus(ORDER_FAIL.status());
+            mobileFlowDispatchRec.setCallbackTime(new Date(setCallbackParam.getTimestamp()* 1000L));
+            //TODO 其他错误信息置状态
+
+            //重加入优先级队列 准备重试
+            redisPriorityQueueScript.addContent(orderId,orderStr);
+            //rides分发订单改状态
+            hKey = Long.valueOf(orderNo) / 10000000;
+            try {
+                childStr = om.writeValueAsString(mobileFlowDispatchRec);
+                jedisCluster.hset(CHILD_ORDER_INFO.key() + hKey, orderNo, childStr);
+            } catch (Exception e) {
+                e.printStackTrace();
+                return "failed";
+            }
+            //rocketMq发送消息
+
+
+
+
+
+
+
+
+        //状态成功 主订单置成功 分发订单置成功
+        }else if("SUCCESS".equals(setCallbackParam.getStatus())){
+
+
+        }else{
+            return "failed";
+        }
+
+        return "success";
+    }
+
+
+
+}

+ 44 - 0
modules/set-callback/src/main/java/com/fire/setcallback/task/CacheCustomerTask.java

@@ -0,0 +1,44 @@
+package com.fire.setcallback.task;
+
+
+
+import com.fire.setcallback.service.CacheService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+
+/**
+ * 缓存任务
+ *
+ * @author ZJQ 2021年5月18日13:41:01
+ */
+@Component
+@Slf4j
+public class CacheCustomerTask {
+    @Resource
+    private CacheService cacheService;
+
+    /**
+     * 每天凌晨2时6分0秒定时缓存商户信息
+     */
+    @Async
+    @Scheduled(cron = "0 6 2 * * ?")
+    public void cacheCustomer() {
+        cacheService.cacheSupplier();
+    }
+
+    /**
+     * spring启动时执行缓存初始化商户信息
+     */
+    @Async
+    @PostConstruct
+    public void initCustomer() {
+        cacheService.cacheSupplier();
+        log.info("spring启动时执行缓存初始化商户信息");
+    }
+
+}

+ 37 - 0
modules/set-callback/src/main/resources/bootstrap.yml

@@ -0,0 +1,37 @@
+server:
+  port: 8092
+spring:
+  application:
+    name: set-callback
+  profiles:
+    active: dev
+---
+spring:
+  config:
+    activate:
+      on-profile: dev
+  cloud:
+    nacos:
+      config:
+        server-addr: 47.106.133.48:8848
+        file-extension: yaml
+        namespace: fire
+      discovery:
+        server-addr: 47.106.133.48:8848
+        namespace: fire
+        service: set-callback
+---
+spring:
+  config:
+    activate:
+      on-profile: test
+  cloud:
+    nacos:
+      config:
+        server-addr: 139.155.226.217:8848
+        file-extension: yaml
+        namespace: fire
+      discovery:
+        server-addr: 139.155.226.217:8848
+        namespace: fire
+        service: set-callback

+ 65 - 0
modules/set-callback/src/main/resources/logback-spring.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 当scan属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 定义变量值,也可以定义成一个路径,可以使“${}”来使用变量 -->
+    <property name="log_path" value="/data/fire-log/get-order"/>
+    <!--<springProperty scope="context" name="modelName" source="spring.application.name"/>-->
+    <property name="log_encoder_code" value="[%d{yyyy-MM-dd HH:mm:ss}] [%thread] [%-5level] [%logger] %msg%n"/>
+    <!-- 设置上下文名称,用于区分不同应用程序的记录,一旦设置,不能修改 -->
+    <contextName>elk_log</contextName>
+    <!-- 获取时间戳字符串 -->
+    <timestamp key="now_time" datePattern="yyyyMMdd'T'HHmmss"/>
+    <!-- 负责写日志的组件,它有两个必要属性name和class。name指定appender名称,class指定appender的全限定名 -->
+    <!--输出到控制台-->
+    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- 对日志进行格式化 -->
+        <encoder>
+            <pattern>${log_encoder_code}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="log_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 按天回滚 daily -->
+            <fileNamePattern>${log_path}/info-log-%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 日志最大的历史 120天 -->
+            <maxHistory>120</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+        </encoder>
+    </appender>
+    <appender name="log_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <!-- 过滤器,只记录ERROR级别的日志 -->
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <level>DEBUG</level>
+            <onMatch>ACCEPT</onMatch>
+            <onMismatch>DENY</onMismatch>
+        </filter>
+        <!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--日志输出位置  可相对、和绝对路径 -->
+            <fileNamePattern>${log_path}/error-log-%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件假设设置每个月滚动,且<maxHistory>是6,
+            则只保存最近6个月的文件,删除之前的旧文件。注意,删除旧文件是,那些为了归档而创建的目录也会被删除-->
+            <maxHistory>120</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- SQL相关日志输出-->
+    <logger name="org.apache.ibatis" level="INFO" additivity="false"/>
+    <logger name="org.mybatis.spring" level="INFO" additivity="false"/>
+    <logger name="com.github.miemiedev.mybatis.paginator" level="INFO" additivity="false"/>
+    <!-- 把>=DEBUG级别的日志都输出到控制台 -->
+    <root level="INFO">
+        <appender-ref ref="console"/>
+        <!--<appender-ref ref="file" />-->
+        <appender-ref ref="log_info"/>
+        <appender-ref ref="log_error"/>
+    </root>
+    <!-- 屏蔽心跳日志-->
+    <logger name="com.alibaba.nacos" level="error" additivity="false"/>
+</configuration>

+ 69 - 0
modules/set-callback/src/main/resources/mapper/ChannelSupplierMapper.xml

@@ -0,0 +1,69 @@
+<?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.fire.order.supplier.mapper.ChannelSupplierMapper">
+
+    <resultMap type="com.fire.dto.ChannelSupplier" id="ChannelSupplierMap">
+        <result property="supplierId" column="supplier_id" jdbcType="INTEGER"/>
+        <result property="supplierName" column="supplier_name" jdbcType="VARCHAR"/>
+        <result property="linkName" column="link_name" jdbcType="VARCHAR"/>
+        <result property="mobile" column="mobile" jdbcType="VARCHAR"/>
+        <result property="email" column="email" jdbcType="VARCHAR"/>
+        <result property="address" column="address" jdbcType="VARCHAR"/>
+        <result property="balance" column="balance" jdbcType="NUMERIC"/>
+        <result property="consumeAmount" column="consume_amount" jdbcType="NUMERIC"/>
+        <result property="rechargeAmount" column="recharge_amount" jdbcType="NUMERIC"/>
+        <result property="creator" column="creator" jdbcType="VARCHAR"/>
+        <result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
+        <result property="updator" column="updator" jdbcType="VARCHAR"/>
+        <result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
+        <result property="isValid" column="is_valid" jdbcType="INTEGER"/>
+        <result property="account" column="account" jdbcType="VARCHAR"/>
+        <result property="passwd" column="passwd" jdbcType="VARCHAR"/>
+        <result property="appKey" column="app_key" jdbcType="VARCHAR"/>
+        <result property="makeOrderUrl" column="make_order_url" jdbcType="VARCHAR"/>
+        <result property="queryUrl" column="query_url" jdbcType="VARCHAR"/>
+        <result property="extUrl" column="ext_url" jdbcType="VARCHAR"/>
+        <result property="callBackUrl" column="call_back_url" jdbcType="VARCHAR"/>
+        <result property="version" column="version" jdbcType="VARCHAR"/>
+        <result property="ratio" column="ratio" jdbcType="VARCHAR"/>
+        <result property="manageUrl" column="manage_url" jdbcType="VARCHAR"/>
+        <result property="userId" column="user_id" jdbcType="VARCHAR"/>
+        <result property="alertBalance" column="alert_balance" jdbcType="INTEGER"/>
+        <result property="ext1" column="ext1" jdbcType="VARCHAR"/>
+        <result property="ext2" column="ext2" jdbcType="VARCHAR"/>
+        <result property="ext3" column="ext3" jdbcType="VARCHAR"/>
+        <result property="isDelete" column="is_delete" jdbcType="INTEGER"/>
+        <result property="channelId" column="channel_id" jdbcType="BIGINT"/>
+    </resultMap>
+
+    <!--查询所有-->
+    <select id="queryAll" resultMap="ChannelSupplierMap">
+        select a.supplier_id,
+               a.supplier_name,
+               a.link_name,
+               a.mobile,
+               a.email,
+               a.address,
+               a.balance,
+               a.consume_amount,
+               a.recharge_amount,
+               a.account,
+               a.passwd,
+               a.app_key,
+               a.make_order_url,
+               a.query_url,
+               a.ext_url,
+               a.call_back_url,
+               a.version,
+               a.ratio,
+               a.manage_url,
+               a.user_id,
+               a.alert_balance,
+               B.channel_id
+        from channel_supplier a
+                 left join access_channel_info b on a.supplier_id = b.supplier_id
+    </select>
+
+
+</mapper>
+