diff --git a/build.gradle b/build.gradle
index a860d67..0e2feff 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,6 @@
     id 'org.jetbrains.kotlin.jvm' version '1.3.31'
     id 'org.jetbrains.kotlin.plugin.spring' version '1.3.31' apply false
     id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31' apply false
-    id 'com.gradle.build-scan' version '2.0.2'
     id "com.palantir.git-version" version "0.12.2"
     id 'com.palantir.docker' version '0.22.2' apply false
 }
@@ -78,7 +77,7 @@
             commonCodecVersion = '1.12'
             lombokVersion = '1.18.8'
             javaELVersion = '3.0.0'
-            shedlockVersion = '2.5.0'
+            shedlockVersion = '4.3.0'
             jose4jVersion = '0.6.5'
             jcabiManifestsVersion = '1.1'
             kotlnLogVersion = '1.6.26'
@@ -102,7 +101,7 @@
             springSocialVersion = '1.1.6.RELEASE'
             springKafkaVersion = '2.2.8.RELEASE'
             postgresVersion = '42.2.5'
-            multiTenantLibVersion = '1.2.5'
+            multiTenantLibVersion = '1.3.2'
         }
         implementation "org.jetbrains.kotlin:kotlin-reflect"
         implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
diff --git a/config/application-devel-pg-local.properties b/config/application-devel-pg-local.properties
index 3d596e3..ea8ea11 100644
--- a/config/application-devel-pg-local.properties
+++ b/config/application-devel-pg-local.properties
@@ -25,7 +25,7 @@
 ##################################################
 ## quartz task scheduler
 shopbalance.updater.cron=-
-payapi.sourcetype.checker.scheduler=* * * * * ?
+payapi.sourcetype.checker.scheduler=-
 #############################################
 spring.cloud.consul.enabled=false
 spring.cloud.consul.host=172.28.201.70
@@ -36,15 +36,12 @@
 
 #============== kafka ===================
 # 指定kafka 代理地址，可以多个
-spring.kafka.bootstrap-servers=172.28.201.101:9192
+spring.kafka.bootstrap-servers=localhost:32770;localhost:32771
 #=============== provider  =======================
 spring.kafka.producer.retries=3
 # 每次批量发送消息的数量
 spring.kafka.producer.batch-size=16384
 spring.kafka.producer.buffer-memory=33554432
-# 指定消息key和消息体的编解码方式
-spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
-spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
 
 #===============kafka consumer  =======================
 # 指定默认消费者group id
@@ -54,5 +51,4 @@
 spring.kafka.consumer.enable-auto-commit=true
 spring.kafka.consumer.auto-commit-interval=100
 # 指定消息key和消息体的编解码方式
-spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
-spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
\ No newline at end of file
+payapi.multitenant=false
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 75accab..156a649 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@
 distributionPath=wrapper/dists
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
diff --git a/payapi/build.gradle b/payapi/build.gradle
index d8f169c..3bbc883 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -108,6 +108,7 @@
     implementation "com.supwisdom:multi-tenant-core:${multiTenantLibVersion}"
     implementation "com.supwisdom:multi-tenant-datasource:${multiTenantLibVersion}"
     implementation "com.supwisdom:multi-tenant-jwt:${multiTenantLibVersion}"
+    implementation "com.supwisdom:multi-tenant-task:${multiTenantLibVersion}"
 
     implementation "org.bitbucket.b_c:jose4j:${jose4jVersion}"
     implementation files("libs/masmgc.sdk.sms-0.0.1-SNAPSHOT.jar")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
index 1eb9422..bf31c52 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
@@ -3,33 +3,48 @@
 import com.supwisdom.dlpay.exception.TransactionException;
 import com.supwisdom.dlpay.framework.domain.TSettleLog;
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
-import com.supwisdom.dlpay.framework.util.Constants;
+import com.supwisdom.dlpay.framework.tenant.TenantWorkerTask;
 import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.multitenant.TenantContextHolder;
-import com.supwisdom.multitenant.TenantDetailsProvider;
-import net.javacrumbs.shedlock.core.SchedulerLock;
+import com.supwisdom.multitenant.task.ProcessingStatus;
+import com.supwisdom.multitenant.task.WorkerResult;
+import com.supwisdom.multitenant.task.support.TaskQueue;
+import net.javacrumbs.shedlock.spring.annotation.SchedulerLock;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
-@Component
-public class DayendSettleTask {
+@Component("dayendSettleTenantTask")
+public class DayendSettleTask implements TenantWorkerTask {
   @Autowired
   private DayendSettleService dayendSettleService;
 
-  @Autowired
-  private TenantDetailsProvider tenantDetailsProvider;
   private TSettleLog settleLog;
 
   private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class);
 
-  @Scheduled(cron = "${dayend.settletask.cron}")
-  @SchedulerLock(name = "DayendSettleTask", lockAtMostForString = "PT30M")
-  public void doSettleTask() {
+  @Scheduled(cron = "${dayend.settletask.cron:-}")
+  @SchedulerLock(name = "DayendSettleTask", lockAtMostFor = "PT30M")
+  public void settleTask() {
+    try {
+      doSettleTask();
+    } catch (Exception ex) {
+      ex.printStackTrace();
+    }
+  }
+
+  @Override
+  public WorkerResult execute(TaskQueue task) {
+    doSettleTask();
+    WorkerResult result = new WorkerResult(task);
+    result.setResult(ProcessingStatus.SUCCESS);
+    result.setMessage("成功");
+    return result;
+  }
+
+  private void doSettleTask() {
     if (logger.isDebugEnabled()) logger.debug("进入日结算任务！");
-    TenantContextHolder.getContext().setTenant(tenantDetailsProvider.defaultTenant());
 
     settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
     try {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerExecutor.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerExecutor.java
new file mode 100644
index 0000000..4eaea96
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerExecutor.java
@@ -0,0 +1,43 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+import com.supwisdom.multitenant.task.WorkerExecutor;
+import com.supwisdom.multitenant.task.WorkerResult;
+import com.supwisdom.multitenant.task.support.TaskQueue;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+import java.util.Optional;
+
+@Component
+@Slf4j
+public class TenantWorkerExecutor implements WorkerExecutor, ApplicationContextAware {
+  private ApplicationContext applicationContext;
+
+  @Override
+  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+    this.applicationContext = applicationContext;
+  }
+
+  private String taskBeanName(TaskQueue task) {
+    return String.format("%sTenantTask", task.getTaskName());
+  }
+
+  private Optional<TenantWorkerTask> findTask(TaskQueue task) {
+    try {
+      TenantWorkerTask workerTask = applicationContext.getBean(taskBeanName(task), TenantWorkerTask.class);
+      return Optional.of(workerTask);
+    } catch (BeansException ex) {
+      log.error("task <{}> not found", taskBeanName(task));
+      throw ex;
+    }
+  }
+
+  @Override
+  public WorkerResult execute(TaskQueue task) {
+    Optional<TenantWorkerTask> workerTask = findTask(task);
+    return workerTask.get().execute(task);
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerTask.java
new file mode 100644
index 0000000..aacb581
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/tenant/TenantWorkerTask.java
@@ -0,0 +1,8 @@
+package com.supwisdom.dlpay.framework.tenant;
+
+import com.supwisdom.multitenant.task.WorkerResult;
+import com.supwisdom.multitenant.task.support.TaskQueue;
+
+public interface TenantWorkerTask {
+  WorkerResult execute(TaskQueue task);
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index 6118efb..27b9c1c 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -1,11 +1,7 @@
 package com.supwisdom.dlpay
 
-import com.supwisdom.dlpay.framework.service.TenantService
 import com.supwisdom.dlpay.framework.tenant.TenantCacheKeyGen
-import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.multitenant.TenantContextHolder
-import com.supwisdom.multitenant.TenantDetails
-import com.supwisdom.multitenant.TenantDetailsProvider
 import com.supwisdom.multitenant.annotations.EnableHttpHeaderTenantInterceptor
 import com.supwisdom.multitenant.annotations.EnableSessionTenantInterceptor
 import com.supwisdom.multitenant.exceptions.TenantNotDefException
@@ -13,6 +9,8 @@
 import com.supwisdom.multitenant.jwt.annotations.EnableJwtTenantInterceptor
 import com.supwisdom.multitenant.jwt.config.JwtTenantConfig
 import com.supwisdom.multitenant.jwt.config.JwtToken
+import com.supwisdom.multitenant.storage.annotations.EnableTenantDetailsStorage
+import com.supwisdom.multitenant.task.annotations.EnableMultiTenantTaskWorker
 import io.lettuce.core.ReadFrom
 import mu.KotlinLogging
 import net.javacrumbs.shedlock.core.LockProvider
@@ -188,37 +186,37 @@
     }
 }
 
-@Component
-class MyTenantDetailsProvider : TenantDetailsProvider {
-    @Autowired
-    private lateinit var tenantService: TenantService
-    @Autowired
-    private lateinit var redisTemplate: RedisTemplate<String, String>
-
-    private val logger = KotlinLogging.logger { }
-
-    private val defaultTenant = TenantDetails().apply {
-        id = Constants.DEFAULT_TENANTID
-        dbSchema = "public"
-        dataCenter = "default"
-        enabled = true
-    }
-
-    override fun defaultTenant(): TenantDetails {
-        return defaultTenant
-    }
-
-    override fun createDetailsById(id: String): TenantDetails {
-        logger.debug { "find tenant id <$id> ..." }
-        val schema = redisTemplate.opsForValue().get(id) ?: return defaultTenant
-        return TenantDetails().apply {
-            this.id = id
-            dbSchema = schema
-            dataCenter = "default"
-            enabled = true
-        }
-    }
-}
+//@Component
+//class MyTenantDetailsProvider : TenantDetailsProvider {
+//    @Autowired
+//    private lateinit var tenantService: TenantService
+//    @Autowired
+//    private lateinit var redisTemplate: RedisTemplate<String, String>
+//
+//    private val logger = KotlinLogging.logger { }
+//
+//    private val defaultTenant = TenantDetails().apply {
+//        id = Constants.DEFAULT_TENANTID
+//        dbSchema = "public"
+//        dataCenter = "default"
+//        enabled = true
+//    }
+//
+//    override fun defaultTenant(): TenantDetails {
+//        return defaultTenant
+//    }
+//
+//    override fun createDetailsById(id: String): TenantDetails {
+//        logger.debug { "find tenant id <$id> ..." }
+//        val schema = redisTemplate.opsForValue().get(id) ?: return defaultTenant
+//        return TenantDetails().apply {
+//            this.id = id
+//            dbSchema = schema
+//            dataCenter = "default"
+//            enabled = true
+//        }
+//    }
+//}
 
 @Component
 class MyTenantJwtConfigAdapter : JwtTenantConfigAdapter {
@@ -244,9 +242,11 @@
 @EnableHttpHeaderTenantInterceptor
 @EnableSessionTenantInterceptor
 @EnableJwtTenantInterceptor
+@EnableTenantDetailsStorage
+@EnableMultiTenantTaskWorker(propertyName = "payapi.multitenant")
 @ServletComponentScan
-@EnableRetry
 @EnableAsync
+@EnableRetry
 class PayApiApplication : SpringBootServletInitializer() {
 
     override fun configure(builder: SpringApplicationBuilder): SpringApplicationBuilder {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
index c57ddb1..cb11234 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_sourcetype_chk.kt
@@ -11,14 +11,16 @@
 import com.supwisdom.dlpay.api.service.TransactionReconciliationService
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.Constants
+import com.supwisdom.dlpay.framework.tenant.TenantWorkerTask
 import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.util.ConstantUtil
 import com.supwisdom.multitenant.TenantContextHolder
 import com.supwisdom.multitenant.TenantDetails
-import com.supwisdom.multitenant.TenantDetailsProvider
+import com.supwisdom.multitenant.task.ProcessingStatus
+import com.supwisdom.multitenant.task.WorkerResult
+import com.supwisdom.multitenant.task.support.TaskQueue
 import mu.KotlinLogging
-import net.javacrumbs.shedlock.core.SchedulerLock
+import net.javacrumbs.shedlock.spring.annotation.SchedulerLock
 import org.springframework.beans.BeansException
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.scheduling.annotation.Async
@@ -69,8 +71,8 @@
  *   2. 一致("equal") , 表示一致
  *   3. 挂起("hangup"), 表示补帐出现异常
  */
-@Component
-class SourceTypeCheck {
+@Component("sourcetypeCheckTenantTask")
+class SourceTypeCheck : TenantWorkerTask {
     private val logger = KotlinLogging.logger { }
 
     @Autowired
@@ -82,9 +84,6 @@
     @Autowired
     private lateinit var sourceTypeCheckExecutor: SourceTypeCheckExecutor
 
-    @Autowired
-    private lateinit var tenantDetailsProvider: TenantDetailsProvider
-
     private fun newSourceTypeStatus(sourceType: TSourceType, accdate: String): TSourceTypeCheckStatus {
         return sourceTypeService.saveOrUpdateSourceTypeCheckStatus(TSourceTypeCheckStatus().apply {
             this.sourceType = sourceType.sourceType
@@ -161,10 +160,25 @@
         }
     }
 
+    override fun execute(task: TaskQueue?): WorkerResult {
+        doExecute()
+        return WorkerResult(task).apply {
+            result = ProcessingStatus.SUCCESS
+            message = "成功"
+        }
+    }
+
     @Scheduled(cron = "\${payapi.sourcetype.checker.scheduler:-}")
-    @SchedulerLock(name = "payapiSourceTypeCheckLock", lockAtMostForString = "PT30M")
+    @SchedulerLock(name = "payapiSourceTypeCheckLock", lockAtMostFor = "PT30M")
     fun runCheck() {
-        TenantContextHolder.getContext().tenant = tenantDetailsProvider.defaultTenant()
+        try {
+            doExecute()
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }
+    }
+
+    private fun doExecute() {
 
         val allSourcetype = sourceTypeService.allEnabledSourcetype
                 ?: return
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
index ba4b5e9..699bea3 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_task.kt
@@ -10,16 +10,20 @@
 import com.supwisdom.dlpay.api.service.DtlQueryResultService
 import com.supwisdom.dlpay.api.service.TransactionServiceProxy
 import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.tenant.TenantWorkerTask
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.util.ConstantUtil
-import net.javacrumbs.shedlock.core.SchedulerLock
+import com.supwisdom.multitenant.task.ProcessingStatus
+import com.supwisdom.multitenant.task.WorkerResult
+import com.supwisdom.multitenant.task.support.TaskQueue
+import net.javacrumbs.shedlock.spring.annotation.SchedulerLock
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.scheduling.annotation.Scheduled
 import org.springframework.stereotype.Component
 import org.springframework.stereotype.Service
 
-@Service
-class MySchedulerTask {
+@Service("shopbalanceUpdaterTenantTask")
+class MySchedulerTask : TenantWorkerTask {
     @Autowired
     private lateinit var shopaccService: ShopaccService
 
@@ -28,23 +32,38 @@
     }
 
     @Scheduled(cron = "\${shopbalance.updater.cron:-}")
-    @SchedulerLock(name = "dealShopUnupdatedDtl", lockAtMostForString = "PT10M")
+    @SchedulerLock(name = "dealShopUnupdatedDtl", lockAtMostFor = "PT10M")
     fun dealShopUnupdatedDtl() {
         try {
-            shopaccService.findUnupdatedShopDtl(100).forEach {
-                doShopBlanceUpdate(it)
-            }
+            doExecute()
         } catch (ex: Exception) {
             ex.printStackTrace()
         }
     }
+
+    private fun doExecute() {
+        shopaccService.findUnupdatedShopDtl(100).forEach {
+            doShopBlanceUpdate(it)
+        }
+    }
+
+    /**
+     * tenant task 入口
+     */
+    override fun execute(task: TaskQueue?): WorkerResult {
+        doExecute()
+        return WorkerResult(task).apply {
+            this.result = ProcessingStatus.SUCCESS
+            this.message = "成功"
+        }
+    }
 }
 
 /**
  * 定时扫描TDtlQuery,查询第三方流水状态
  * */
-@Component
-class DtlQueryResultSchedulerTask {
+@Component("dtlQueryResultTenantTask")
+class DtlQueryResultSchedulerTask : TenantWorkerTask {
     @Autowired
     private lateinit var systemUtilService: SystemUtilService
     @Autowired
@@ -57,23 +76,35 @@
     private lateinit var agentPayServiceContext: AgentPayServiceContext
 
     @Scheduled(cron = "\${query.third.transdtl.result.cron:-}")
-    @SchedulerLock(name = "DtlQueryResultSchedulerTask", lockAtMostForString = "PT10M")
+    @SchedulerLock(name = "DtlQueryResultSchedulerTask", lockAtMostFor = "PT10M")
     fun queryThirdTransdtlResult() {
         try {
-            //仅查询当天数据,查询次数在规定次数之下
-            dtlQueryResultService.getNeedQueryRecords(systemUtilService.accdate, ConstantUtil.QUERY_MAX_COUNT).forEach {
-                try {
-                    doQuery(it)
-                } catch (exp: Exception) {
-                    it.qcnt = it.qcnt + 1
-                    dtlQueryResultService.saveOrUpdateDtlQuery(it) //次数加一
-                }
-            }
+            doExecute()
         } catch (ex: Exception) {
             ex.printStackTrace()
         }
     }
 
+    override fun execute(task: TaskQueue?): WorkerResult {
+        doExecute()
+        return WorkerResult(task).apply {
+            result = ProcessingStatus.SUCCESS
+            message = "成功"
+        }
+    }
+
+    private fun doExecute() {
+        //仅查询当天数据,查询次数在规定次数之下
+        dtlQueryResultService.getNeedQueryRecords(systemUtilService.accdate, ConstantUtil.QUERY_MAX_COUNT).forEach {
+            try {
+                doQuery(it)
+            } catch (exp: Exception) {
+                it.qcnt = it.qcnt + 1
+                dtlQueryResultService.saveOrUpdateDtlQuery(it) //次数加一
+            }
+        }
+    }
+
     private fun doQuery(dtlQuery: TDtlQuery) {
         if (ConstantUtil.QUERYTYPE_NEED_QUERY != dtlQuery.status) {
             return //已结束
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt
index 290bfaa..6e50d79 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/kafka_service_impl.kt
@@ -15,10 +15,10 @@
 import org.springframework.stereotype.Service
 
 @Service
-class KafkaSendMsgServiceImpl:KafkaSendMsgService{
+class KafkaSendMsgServiceImpl : KafkaSendMsgService {
     val logger = KotlinLogging.logger { }
     @Autowired
-    private lateinit var kafkaTemplate: KafkaTemplate<String, String>
+    private lateinit var kafkaTemplate: KafkaTemplate<Any, Any>
     @Autowired
     private lateinit var msgDao: MsgDao
     @Autowired
@@ -63,13 +63,13 @@
             message.custom = gson.toJson(extras)
             message.expiretime = DateUtil.getNewTime(DateUtil.getNow(), 300)
             message.gids = it.uid
-            if(it.lastloginplatform.isNullOrEmpty()){
-                message.platform="ios"
-                kafkaTemplate.send(topic, msg.msgid, gson.toJson(message))
-                message.platform="android"
-                kafkaTemplate.send(topic, msg.msgid, gson.toJson(message))
-            }else{
-                kafkaTemplate.send(topic, msg.msgid, gson.toJson(message))
+            if (it.lastloginplatform.isNullOrEmpty()) {
+                message.platform = "ios"
+                kafkaTemplate.send(topic, msg.msgid, message)
+                message.platform = "android"
+                kafkaTemplate.send(topic, msg.msgid, message)
+            } else {
+                kafkaTemplate.send(topic, msg.msgid, message)
             }
         }
         msg.pusheduids = uids
diff --git a/payapi/src/main/resources/application.properties b/payapi/src/main/resources/application.properties
index efef870..4c93ce7 100644
--- a/payapi/src/main/resources/application.properties
+++ b/payapi/src/main/resources/application.properties
@@ -28,6 +28,14 @@
 spring.http.encoding.charset=UTF-8
 spring.http.encoding.enabled=true
 server.tomcat.uri-encoding=UTF-8
+########################################################
+# 指定消息key和消息体的编解码方式
+spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
+spring.kafka.consumer.value-deserializer=org.springframework.kafka.support.serializer.JsonDeserializer
+spring.kafka.consumer.properties.spring.json.trusted.packages=com.supwisdom.multitenant.task.support
+# 指定消息key和消息体的编解码方式
+spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
+spring.kafka.producer.value-serializer=org.springframework.kafka.support.serializer.JsonSerializer
 ##################################################
 ## quartz task scheduler
 shopbalance.updater.cron=*/10 * * * * ?
@@ -44,5 +52,7 @@
 multi-tenant.header.key=X-TENANT-ID
 multi-tenant.session.name=tenant-id
 multi-tenant.session.enableSessionScopedBean=false
-multi-tenant.dbschema=public
 multi-tenant.datasource.base-package=com.supwisdom.dlpay
+multi-tenant.task.datacenter=default
+multi-tenant.environment=default
+multi-tenant.task.worker.name=payapi
