diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/dao/QrcodePatternDao.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/dao/QrcodePatternDao.java
index d63e9d0..198645e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/dao/QrcodePatternDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/dao/QrcodePatternDao.java
@@ -7,4 +7,8 @@
 
 public interface QrcodePatternDao extends CrudRepository<QrcodePattern, Integer> {
   List<QrcodePattern> findByTenantid(String tenantid);
+
+  void deleteByTenantid(String tenantid);
+
+  List<QrcodePattern> findBySourceTypeAndTenantid(String sourceType, String tenantid);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java
index 8f2809d..7de65cd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/AgentServiceProxy.java
@@ -5,6 +5,7 @@
 import com.supwisdom.dlpay.agent.domain.QrcodePayTrans;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.tenant.TenantContext;
+import org.jetbrains.annotations.NotNull;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -36,15 +37,19 @@
         systemUtilService.getSysdatetime().getHostdate(), billno, TenantContext.getTenantSchema());
   }
 
-  public QrcodePayTrans qrcodePayTransSaveOrUpdate(QrcodePayTrans bean) {
+  public QrcodePayTrans qrcodePayTransSaveOrUpdate(@NotNull QrcodePayTrans bean) {
     if (bean.getTenantid().isEmpty()) {
       bean.setTenantid(TenantContext.getTenantSchema());
     }
     return qrcodeTransDao.save(bean);
   }
 
+  public QrcodePattern qrcodeMatch(String code, String format) {
+    return qrcodeMatch(code);
+  }
+
   public QrcodePattern qrcodeMatch(String code) {
-    List<QrcodePattern> pattern = qrcodePatternService.getAllQrCodePattern();
+    List<QrcodePattern> pattern = qrcodePatternService.getAllQrcodePattern();
     List<QrcodePattern> found = new ArrayList<>();
     for (QrcodePattern item : pattern) {
       if (Pattern.matches(item.getPattern(), code)) {
@@ -57,9 +62,7 @@
     if (found.size() > 1) {
       Set<String> foundST = new HashSet<>();
       for (QrcodePattern item : found) {
-        if (!foundST.contains(item.getSourceType())) {
-          foundST.add(item.getSourceType());
-        }
+        foundST.add(item.getSourceType());
       }
       if (foundST.size() > 1) {
         throw new IllegalArgumentException("Qrcode匹配错误，找到多个sourcetype");
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/QrcodePatternService.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/QrcodePatternService.java
index d3a0397..2ea2c3d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/QrcodePatternService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/QrcodePatternService.java
@@ -5,5 +5,11 @@
 import java.util.List;
 
 public interface QrcodePatternService {
-  List<QrcodePattern> getAllQrCodePattern();
+  List<QrcodePattern> getAllQrcodePattern();
+
+  void deleteAllQrcodePattern();
+
+  QrcodePattern saveOrUpdateQrcodePattern(QrcodePattern pattern);
+
+  List<QrcodePattern> findAllBySourcetype(String sourceType);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
index 2d7ad9f..4da560f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/agent/service/impl/QrcodePatternServiceImpl.java
@@ -4,7 +4,8 @@
 import com.supwisdom.dlpay.agent.domain.QrcodePattern;
 import com.supwisdom.dlpay.agent.service.QrcodePatternService;
 import com.supwisdom.dlpay.framework.tenant.TenantContext;
-import org.springframework.beans.factory.annotation.Autowired;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
@@ -12,12 +13,36 @@
 
 @Service
 public class QrcodePatternServiceImpl implements QrcodePatternService {
-  @Autowired
-  private QrcodePatternDao qrcodePatternDao;
+  private final QrcodePatternDao qrcodePatternDao;
+
+  public QrcodePatternServiceImpl(QrcodePatternDao qrcodePatternDao) {
+    this.qrcodePatternDao = qrcodePatternDao;
+  }
 
   @Override
   @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern')")
-  public List<QrcodePattern> getAllQrCodePattern() {
+  public List<QrcodePattern> getAllQrcodePattern() {
     return qrcodePatternDao.findByTenantid(TenantContext.getTenantSchema());
   }
+
+  @Override
+  @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'")
+  public void deleteAllQrcodePattern() {
+    qrcodePatternDao.deleteByTenantid(TenantContext.getTenantSchema());
+  }
+
+  @Override
+  @CacheEvict(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern') + '.*'")
+  public QrcodePattern saveOrUpdateQrcodePattern(@NotNull QrcodePattern pattern) {
+    if (pattern.getTenantid() == null || pattern.getTenantid().isEmpty()) {
+      pattern.setTenantid(TenantContext.getTenantSchema());
+    }
+    return qrcodePatternDao.save(pattern);
+  }
+
+  @Override
+  @Cacheable(cacheNames = "qrcode_pattern_cache", key = "@tenantHolder.genKey('qrcode_pattern', #sourceType)")
+  public List<QrcodePattern> findAllBySourcetype(String sourceType) {
+    return qrcodePatternDao.findBySourceTypeAndTenantid(sourceType, TenantContext.getTenantSchema());
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
index 9e0ad35..a4767f2 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TPersondtl.java
@@ -97,6 +97,9 @@
   @Column(name = "DTLTYPE", length = 20)
   private String dtltype;
 
+  @Column(name = "anonymous")
+  private Boolean anonymous;
+
   public String getDtltype() {
     return dtltype;
   }
@@ -288,4 +291,12 @@
   public void setTenantid(String tenantid) {
     this.tenantid = tenantid;
   }
+
+  public Boolean getAnonymous() {
+    return anonymous;
+  }
+
+  public void setAnonymous(Boolean anonymous) {
+    this.anonymous = anonymous;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSourceType.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSourceType.java
index 8d09f92..d20efaf 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSourceType.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TSourceType.java
@@ -49,8 +49,11 @@
   @NotNull
   private Boolean checkable; // 是否需要清算
 
-  @Column(name = "asset_subjno")
-  private @NotNull String assetSubjno;
+  @Column(name = "pay_subjno", length = 12)
+  private @NotNull String paySubjno;
+
+  @Column(name = "deposite_subjno", length = 12)
+  private String depositeSubjno;
 
   @Column(name = "PAYDESC", length = 200)
   private String paydesc;
@@ -149,11 +152,19 @@
     this.sourceTypeId = sourceTypeId;
   }
 
-  public @NotNull String getAssetSubjno() {
-    return assetSubjno;
+  public @NotNull String getPaySubjno() {
+    return paySubjno;
   }
 
-  public void setAssetSubjno(@NotNull String assetSubjno) {
-    this.assetSubjno = assetSubjno;
+  public void setPaySubjno(@NotNull String paySubjno) {
+    this.paySubjno = paySubjno;
+  }
+
+  public String getDepositeSubjno() {
+    return depositeSubjno;
+  }
+
+  public void setDepositeSubjno(String depositeSubjno) {
+    this.depositeSubjno = depositeSubjno;
   }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
index 303a3b0..f76cffa 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
@@ -37,6 +37,8 @@
 
   TShopacc getByShopaccno(String shopaccno);
 
+  TShopacc getByShopaccnoAndTenantId(String shopaccno, String tenantid);
+
   @Transactional
   @Modifying(clearAutomatically = true)
   @Query("update TShopacc set shopname=?1 where shopaccno=?2")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
index f88623d..78ecb03 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
@@ -26,6 +26,8 @@
 
   TSubject findBySubjno(String subjno);
 
+  TSubject findBySubjnoAndTenantId(String subjno, String tenantid);
+
   @Query("from TSubject where displayflag='y' order by subjno ")
   List<TSubject> findAllDisplaySubjects();
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubject.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubject.java
index d02d05e..d76cd59 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubject.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubject.java
@@ -2,11 +2,13 @@
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
+import java.io.Serializable;
 
 @Entity
 @Table(name = "TB_SUBJECT",
     indexes = {@Index(name = "subject_idx", columnList = "subjno, tenantid", unique = true)})
-public class TSubject {
+public class TSubject implements Serializable, DictionaryTable {
+
   @Id
   @Column(name = "subjid")
   @NotNull
@@ -133,4 +135,14 @@
   public void setId(Integer id) {
     this.id = id;
   }
+
+  @Override
+  public String getDictKey() {
+    return this.subjno;
+  }
+
+  @Override
+  public Object getDictValue() {
+    return this.subjname;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
index ca18764..7eda63d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
@@ -18,11 +18,13 @@
   /**
    * 获取记账日期
    */
+  @Transactional
   String getAccdate();
 
   /**
    * 获取流水号
    */
+  @Transactional
   String getRefno();
 
   /**
@@ -32,6 +34,7 @@
 
 
   /********************** 获取【系统参数】【业务参数】通用方法 **********************/
+  @Transactional
   String getSysparaValue(int paraid);
 
   String getSysparaValue(int paraid, String defaultValue);
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
index c7c9d89..9eac02d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
@@ -13,4 +13,5 @@
   public static final String SOURCE_TYPE = "sourcetypeList";
   public static final String TRANS_CODE = "transcodeList";
   public static final String PAY_TYPE = "paytypelist";
+  public static final String ALL_SUBJECT = "allSubjectList";
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
index 2bf71b3..6d46a45 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/ParamController.java
@@ -9,10 +9,10 @@
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.*;
+import com.supwisdom.dlpay.system.service.DictionaryProxy;
 import com.supwisdom.dlpay.system.service.ParamService;
 import com.supwisdom.dlpay.util.ConstantUtil;
 import com.supwisdom.dlpay.util.WebCheckException;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.Model;
@@ -24,10 +24,17 @@
 
 @Controller
 public class ParamController {
-  @Autowired
-  private ParamService paramService;
-  @Autowired
-  private SystemUtilService systemUtilService;
+  private final ParamService paramService;
+  private final SystemUtilService systemUtilService;
+  private final DictionaryProxy dictionaryProxy;
+
+  public ParamController(ParamService paramService,
+                         SystemUtilService systemUtilService,
+                         DictionaryProxy dictionaryProxy) {
+    this.paramService = paramService;
+    this.systemUtilService = systemUtilService;
+    this.dictionaryProxy = dictionaryProxy;
+  }
 
   @GetMapping("/param/syspara")
   public String sysparaView() {
@@ -379,6 +386,8 @@
   @GetMapping("/param/load4addsourcetype")
   @PreAuthorize("hasPermission('/param/load4addsourcetype','')")
   public String load4AddPaytype(Model model) {
+    model.addAttribute("subjectList",
+        dictionaryProxy.getDictionaryAsList(Dictionary.ALL_SUBJECT));
     return "system/param/sourcetypeform";
   }
 
@@ -495,23 +504,27 @@
                                @RequestParam(value = "anonymousEnable", required = false, defaultValue = "no") String anonymousEnable,
                                @RequestParam(value = "reversable", required = false, defaultValue = "no") String reversable,
                                @RequestParam(value = "checkable", required = false, defaultValue = "no") String checkable,
+                               @RequestParam(value = "paySubjno", required = false, defaultValue = "-") String paySubjno,
+                               @RequestParam(value = "depositeSubjno", required = false, defaultValue = "-") String depositeSubjno,
                                @RequestParam("paydesc") String paydesc) {
     try {
-      TSourceType tPaytype = paramService.getSourceType(sourcetype);
-      if (null != tPaytype) {
+      TSourceType sourcetypeBean = paramService.getSourceType(sourcetype);
+      if (null != sourcetypeBean) {
         return JsonResult.error("支付方式已经存在");
       }
-      tPaytype = new TSourceType();
-      tPaytype.setSourceType(sourcetype.trim());
+      sourcetypeBean = new TSourceType();
+      sourcetypeBean.setSourceType(sourcetype.trim());
       if (StringUtil.isEmpty(paydesc)) return JsonResult.error("支付名称不能为空！");
-      tPaytype.setPaydesc(paydesc.trim());
-      tPaytype.setEnable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(enable));
-      tPaytype.setChargeEnable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(chargeEnable));
-      tPaytype.setConsumeEnable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(consumeEnable));
-      tPaytype.setAnonymousEnable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(anonymousEnable));
-      tPaytype.setReversable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(reversable));
-      tPaytype.setCheckable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(checkable));
-      if (paramService.saveOrUpdateSourceType(tPaytype)) {
+      sourcetypeBean.setPaydesc(paydesc.trim());
+      sourcetypeBean.setEnable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(enable));
+      sourcetypeBean.setChargeEnable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(chargeEnable));
+      sourcetypeBean.setConsumeEnable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(consumeEnable));
+      sourcetypeBean.setAnonymousEnable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(anonymousEnable));
+      sourcetypeBean.setReversable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(reversable));
+      sourcetypeBean.setCheckable(ConstantUtil.ENABLE_YES.equalsIgnoreCase(checkable));
+      sourcetypeBean.setPaySubjno(paySubjno);
+      sourcetypeBean.setDepositeSubjno(depositeSubjno);
+      if (paramService.saveOrUpdateSourceType(sourcetypeBean)) {
         return JsonResult.ok("新增成功");
       } else {
         return JsonResult.error("新增失败");
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
index d7d1027..b7824dd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/DictionaryDataService.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.system.service;
 
 import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.domain.TSubject;
 import com.supwisdom.dlpay.framework.domain.TTranscode;
 
 import java.util.List;
@@ -16,4 +17,5 @@
 
   List<TTranscode> getTransCode();
 
+  List<TSubject> getAllSubject();
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/DictionaryProxy.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/DictionaryProxy.java
index c78b89c..361ee89 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/DictionaryProxy.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/DictionaryProxy.java
@@ -49,6 +49,8 @@
       return (List<T>) paramService.getAllSourceType();
     } else if (Dictionary.TRANS_CODE.equals(dictType)) {
       return (List<T>) dictionaryDataService.getTransCode();
+    } else if (Dictionary.ALL_SUBJECT.equals(dictType)) {
+      return (List<T>) dictionaryDataService.getAllSubject();
     } else {
       return (List<T>) dictionaryDataService.getDictionaryByDictType(dictType);
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
index a28bdbf..be4365a 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/DictionaryDataServiceImpl.java
@@ -1,8 +1,10 @@
 package com.supwisdom.dlpay.system.service.impl;
 
 import com.supwisdom.dlpay.framework.dao.DictionaryDao;
+import com.supwisdom.dlpay.framework.dao.SubjectDao;
 import com.supwisdom.dlpay.framework.dao.TranscodeDao;
 import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.domain.TSubject;
 import com.supwisdom.dlpay.framework.domain.TTranscode;
 import com.supwisdom.dlpay.system.service.DictionaryDataService;
 import org.springframework.cache.annotation.CacheEvict;
@@ -16,11 +18,14 @@
 public class DictionaryDataServiceImpl implements DictionaryDataService {
   private final DictionaryDao dictionaryDao;
   private final TranscodeDao transcodeDao;
+  private final SubjectDao subjectDao;
 
   public DictionaryDataServiceImpl(DictionaryDao dictionaryDao,
-                                   TranscodeDao transcodeDao) {
+                                   TranscodeDao transcodeDao,
+                                   SubjectDao subjectDao) {
     this.dictionaryDao = dictionaryDao;
     this.transcodeDao = transcodeDao;
+    this.subjectDao = subjectDao;
   }
 
   @Override
@@ -89,4 +94,10 @@
     }
     return new ArrayList<>();
   }
+
+  @Override
+  @Cacheable(cacheNames = "dictionary_cache", key = "@tenantHolder.genKey('allsubject')")
+  public List<TSubject> getAllSubject() {
+    return subjectDao.findAllDisplaySubjects();
+  }
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 6a6a75e..9d923d2 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -6,8 +6,8 @@
 import com.supwisdom.dlpay.agent.service.AgentServiceProxy
 import com.supwisdom.dlpay.api.*
 import com.supwisdom.dlpay.api.bean.*
-import com.supwisdom.dlpay.api.bean.groups.Confirm
-import com.supwisdom.dlpay.api.bean.groups.InitStep
+import com.supwisdom.dlpay.api.bean.groups.ConfirmAction
+import com.supwisdom.dlpay.api.bean.groups.InitAction
 import com.supwisdom.dlpay.api.domain.TSourceType
 import com.supwisdom.dlpay.api.service.*
 import com.supwisdom.dlpay.exception.TransactionCheckException
@@ -445,20 +445,21 @@
     }
 
     @RequestMapping("/qrcode/init", method = [RequestMethod.POST, RequestMethod.GET])
-    fun qrcodePayInit(@Validated(InitStep::class) @RequestBody param: QrcodePayParam): ResponseEntity<ApiResponse> {
+    fun qrcodePayInit(@Validated(InitAction::class) @RequestBody param: QrcodePayParam): ResponseEntity<ApiResponse> {
+        val apiResp = QrcodePayResponse()
         // 1. 检查 qrcode
         val qrcode = agentServiceProxy.qrcodeMatch(param.qrcode)
                 ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(QrcodePayResponse(), TradeErrorCode.BUSINESS_DEAL_ERROR, "未识别的支付码"))
+                        .fail(apiResp, TradeErrorCode.BUSINESS_DEAL_ERROR, "未识别的支付码"))
 
         val sourceType = sourceTypeService.getBySourceType(qrcode.sourceType)
                 ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(QrcodePayResponse(), TradeErrorCode.BUSINESS_DEAL_ERROR,
+                        .fail(apiResp, TradeErrorCode.BUSINESS_DEAL_ERROR,
                                 "不支持的支付方式<${qrcode.sourceType}>"))
-        if (sourceType.assetSubjno.isEmpty()
-                || !StringUtils.isNumeric(sourceType.assetSubjno)) {
+        if (sourceType.paySubjno.isEmpty()
+                || !StringUtils.isNumeric(sourceType.paySubjno)) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(QrcodePayResponse(), TradeErrorCode.BUSINESS_DEAL_ERROR,
+                    .fail(apiResp, TradeErrorCode.BUSINESS_DEAL_ERROR,
                             "支付方式<${qrcode.sourceType}>未配置科目号"))
         }
         // 2. 记录 qrcode 交易明细表
@@ -475,7 +476,7 @@
         // 4. 重新读取 qrcode 交易明细表，以获取 service.auth 查询后的结果数据
         val qrcodeTransResp = agentServiceProxy.qrcodePayTransFindByMerchIdAndBillno(qrcodeTrans.agentMerchId,
                 qrcodeTrans.billno)
-        val apiResp = QrcodePayResponse().also {
+        apiResp.also {
             it.sourceType = sourceType.sourceType
             it.paydesc = qrcodeSummary(sourceType)
         }
@@ -516,7 +517,7 @@
     private fun qrcodeSummary(st: TSourceType): String = st.paydesc + "扫码付"
 
     @PostMapping("/qrcodepay/confirm")
-    fun qrcodePayConfirm(@Validated(Confirm::class) @RequestBody param: QrcodePayParam): ResponseEntity<ApiResponse> {
+    fun qrcodePayConfirm(@Validated(ConfirmAction::class) @RequestBody param: QrcodePayParam): ResponseEntity<ApiResponse> {
         //1. 交易检查
         val apiResponse = QrcodePayResponse()
         val qrcodeTrans = agentServiceProxy.qrcodePayTransFindByMerchIdAndBillno(param.shopaccno,
@@ -550,11 +551,12 @@
 
         //2. 初始化交易流水
         // sourcetype 资产类科目
-        val stSubject = accountUtilServcie.readSubject(sourceType.assetSubjno)
+        val stSubject = accountUtilServcie.readSubject(sourceType.paySubjno)
         // build 交易明细
         val builder = TransactionBuilder().apply {
             setTransInfo(param.transdate, param.transtime, TradeCode.TRANSCODE_QRCODE, qrcodeTrans.sourceType)
             setOutTransInfo(qrcodeTrans.agentMerchId, qrcodeTrans.billno)
+            payinfo = qrcodeSummary(sourceType)
         }
 
         val shopacc = accountUtilServcie.readShopbyShopaccno(qrcodeTrans.agentMerchId)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
index 1ab0d37..1807686 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
@@ -9,9 +9,9 @@
 import com.supwisdom.dlpay.framework.dao.ShopaccDao
 import com.supwisdom.dlpay.framework.dao.SubjectDao
 import com.supwisdom.dlpay.framework.domain.TFeetypeConfig
-import com.supwisdom.dlpay.framework.domain.TShop
 import com.supwisdom.dlpay.framework.domain.TShopacc
 import com.supwisdom.dlpay.framework.domain.TSubject
+import com.supwisdom.dlpay.framework.tenant.TenantContext
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
 import org.hibernate.exception.LockTimeoutException
 import org.springframework.beans.factory.annotation.Autowired
@@ -74,13 +74,13 @@
     }
 
     override fun readShopbyShopaccno(shopaccno: String): TShopacc {
-        return shopaccDao.findByShopaccno(shopaccno)?.also {
+        return shopaccDao.getByShopaccnoAndTenantId(shopaccno, TenantContext.getTenantSchema())?.also {
             shopAccCheck(it)
         } ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopaccno>不存在")
     }
 
     override fun readSubject(subjno: String): TSubject {
-        return subjectDao.findBySubjno(subjno)
+        return subjectDao.findBySubjnoAndTenantId(subjno, TenantContext.getTenantSchema())
                 ?: throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在")
     }
 
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index edb618c..2a8c984 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -109,6 +109,7 @@
                     tenantid = transaction.tenantid
                     this.dtltype = builder.dtltype
                     this.status = status
+                    this.anonymous = builder.person().isAnonymous()
                 }.also {
                     //                    persondtlDao.save(it)
                     transaction.personDtl = it
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index f1d7f88..ac1da71 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -439,23 +439,23 @@
 
 
 INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable",
-"consume_enable", "anonymous_enable", "reversable", "asset_subjno", "tenantid")
-VALUES ('D3820D49DACA49199E36537F6719665F', 'citizenCard', 't', '大理市民卡', 't', 'f', 't', 'f', 't', '112234', '{tenantid}');
+"consume_enable", "anonymous_enable", "reversable", "pay_subjno", "deposite_subjno", "tenantid")
+VALUES ('D3820D49DACA49199E36537F6719665F', 'citizenCard', 't', '大理市民卡', 't', 'f', 't', 'f', 't', '112234', '-', '{tenantid}');
 INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable",
-"consume_enable", "anonymous_enable", "reversable", "asset_subjno","tenantid")
-VALUES ('0997477F40904AD1A2E37FD15345CE00', 'balance', 'f', '账户余额', 't', 'f', 't', 'f', 't', '-', '{tenantid}');
+"consume_enable", "anonymous_enable", "reversable", "pay_subjno","deposite_subjno","tenantid")
+VALUES ('0997477F40904AD1A2E37FD15345CE00', 'balance', 'f', '账户余额', 't', 'f', 't', 'f', 't', '-', '-', '{tenantid}');
 INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable",
-"consume_enable", "anonymous_enable", "reversable", ""asset_subjno",tenantid")
-VALUES ('F0CA47ADC0F24DFCA0D95DF4136CC2D0', 'thirdpart', 'f', '其他第三方支付', 't', 't', 'f', 'f', 'f','-', '{tenantid}');
+"consume_enable", "anonymous_enable", "reversable", "pay_subjno","deposite_subjno", "tenantid")
+VALUES ('F0CA47ADC0F24DFCA0D95DF4136CC2D0', 'thirdpart', 'f', '其他第三方支付', 't', 't', 'f', 'f', 'f','-','-', '{tenantid}');
 INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable",
-"consume_enable", "anonymous_enable", "reversable", "asset_subjno","tenantid")
-VALUES ('F5B344726FA24BD896E70DEE3D3F46CA', 'swyktv5', 't', '一卡通支付', 't', 't', 't', 't', 't','-', '{tenantid}');
+"consume_enable", "anonymous_enable", "reversable", "pay_subjno","deposite_subjno","tenantid")
+VALUES ('F5B344726FA24BD896E70DEE3D3F46CA', 'swyktv5', 't', '一卡通支付', 't', 't', 't', 't', 't','-','-', '{tenantid}');
 INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable",
-"consume_enable", "anonymous_enable", "reversable", "asset_subjno","tenantid")
-VALUES ('28EE54CD3B044CC197D6C5B0E309F8B8', 'alipay', 't', '支付宝', 't', 't', 't', 't', 'f', '112230', '{tenantid}');
+"consume_enable", "anonymous_enable", "reversable", "pay_subjno","deposite_subjno","tenantid")
+VALUES ('28EE54CD3B044CC197D6C5B0E309F8B8', 'alipay', 't', '支付宝', 't', 't', 't', 't', 'f', '112230','112210', '{tenantid}');
 INSERT INTO "tb_sourcetype" ("sourcetype_id", "sourcetype", "checkable", "paydesc", "enable", "charge_enable",
-"consume_enable", "anonymous_enable", "reversable", "asset_subjno","tenantid")
-VALUES ('DAEF88B54B684347B2B83940C38C7671', 'wechat', 't', '微信支付', 't', 't', 't', 't', 'f', '112231', '{tenantid}');
+"consume_enable", "anonymous_enable", "reversable", "pay_subjno","deposite_subjno","tenantid")
+VALUES ('DAEF88B54B684347B2B83940C38C7671', 'wechat', 't', '微信支付', 't', 't', 't', 't', 'f', '112231','112211', '{tenantid}');
 
 -- 支付方式
 INSERT INTO TB_SOURCETYPE_CONFIG (ID, SOURCETYPE,CONFIGID,CONFIG_NAME,CONFIG_VALUE,GLOBALFLAG, "tenantid")
diff --git a/payapi/src/main/resources/static/libs/custom.js b/payapi/src/main/resources/static/libs/custom.js
index 21e9601..12564c2 100644
--- a/payapi/src/main/resources/static/libs/custom.js
+++ b/payapi/src/main/resources/static/libs/custom.js
@@ -65,6 +65,7 @@
                     .addNewDict("idtypeList")
                     .addNewDict("sexList")
                     .addNewDict("accountStatusList")
+                    .addNewDict("allSubjectList")
             },
             getDict: function (dictType) {
                 var dict, that = this;
diff --git a/payapi/src/main/resources/templates/system/param/sourcetype.html b/payapi/src/main/resources/templates/system/param/sourcetype.html
index 32ed15d..74087c2 100644
--- a/payapi/src/main/resources/templates/system/param/sourcetype.html
+++ b/payapi/src/main/resources/templates/system/param/sourcetype.html
@@ -9,13 +9,16 @@
     <div class="layui-card-body">
         <div class="layui-form toolbar">
             搜索：
-            <input id="search-global-sourceType" class="layui-input search-input" type="text" maxlength="40" style="width: 300px;"
+            <input id="search-global-sourceType" class="layui-input search-input" type="text" maxlength="40"
+                   style="width: 300px;"
                    placeholder="输入支付方式查询"/>
             <button id="btn-search-param" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
             </button>
-            <button id="btn-add-param" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新 增
+            <button id="btn-add-param" class="layui-btn icon-btn" data-type="add"><i class="layui-icon">&#xe654;</i>新
+                增
             </button>
-            <button id="btn-reset-param" class="layui-btn layui-btn-primary" data-type="reset"><i class="layui-icon"></i>清 空
+            <button id="btn-reset-param" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
             </button>
         </div>
         <table class="layui-table" id="sourcetypeTable" lay-filter="sourcetypeTable-filter"></table>
@@ -24,24 +27,29 @@
 
 <!-- 表格状态列 -->
 <script type="text/html" id="enable-tpl-state">
-    <input type="checkbox" lay-filter="enable-tpl-state" value="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
+    <input type="checkbox" lay-filter="enable-tpl-state" value="{{d.sourceType}}" lay-skin="switch"
+           lay-text="启用|关闭"
            {{d.enable== true?'checked':''}}/>
 </script>
 <script type="text/html" id="chargeenable-tpl-state">
     {{# if(d.enable == true){ }}
-    <input type="checkbox" lay-filter="chargeenable-tpl-state" value="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
+    <input type="checkbox" lay-filter="chargeenable-tpl-state" value="{{d.sourceType}}" lay-skin="switch"
+           lay-text="启用|关闭"
            {{(d.enable== true && d.chargeEnable== true)?'checked':''}}/>
     {{# }else{ }}
-    <input type="checkbox" lay-filter="chargeenable-tpl-state" value="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
+    <input type="checkbox" lay-filter="chargeenable-tpl-state" value="{{d.sourceType}}" lay-skin="switch"
+           lay-text="启用|关闭"
            {{(d.enable== true && d.chargeEnable== true)?'checked':''}} disabled/>
     {{# } }}
 </script>
 <script type="text/html" id="consumeenable-tpl-state">
     {{# if(d.enable == true){ }}
-    <input type="checkbox" lay-filter="consumeenable-tpl-state" value="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
+    <input type="checkbox" lay-filter="consumeenable-tpl-state" value="{{d.sourceType}}" lay-skin="switch"
+           lay-text="启用|关闭"
            {{(d.enable== true && d.consumeEnable== true)?'checked':''}}/>
     {{# }else{ }}
-    <input type="checkbox" lay-filter="consumeenable-tpl-state" value="{{d.sourceType}}" lay-skin="switch" lay-text="启用|关闭"
+    <input type="checkbox" lay-filter="consumeenable-tpl-state" value="{{d.sourceType}}" lay-skin="switch"
+           lay-text="启用|关闭"
            {{(d.enable== true && d.consumeEnable== true)?'checked':''}} disabled/>
     {{# } }}
 </script>
@@ -91,8 +99,25 @@
             page: true,
             cols: [
                 [
-                    {field: 'sourceType', title: '支付方式', width: 200, align: 'center', fixed: 'left', sort: true},
-                    {field: 'paydesc', title: '名称', align: 'center', sort: true, edit:'text'},
+                    {
+                        field: 'sourceType',
+                        title: '支付方式',
+                        width: 130,
+                        align: 'center',
+                        fixed: 'left',
+                        sort: true
+                    },
+                    {field: 'paydesc', title: '名称', align: 'center', sort: true, edit: 'text'},
+                    {
+                        field: 'paySubjno', title: '支付科目号', templet: function (item) {
+                            return getTempDictValue('allSubjectList', item.paySubjno);
+                        }
+                    },
+                    {
+                        field: 'depositeSubjno', title: '充值科目号', templet: function (item) {
+                            return getTempDictValue('allSubjectList', item.depositeSubjno);
+                        }
+                    },
                     {field: 'enable', title: '状态', align: 'center', templet: '#enable-tpl-state', sort: true},
                     {
                         field: 'chargeEnable',
@@ -169,7 +194,7 @@
                 _csrf: token
             }, function (data) {
                 if (data.code === 200) {
-                    layer.msg(data.msg, {icon: 1, time:1000});
+                    layer.msg(data.msg, {icon: 1, time: 1000});
                     table.reload('sourcetypeTable');
                 } else if (data.code === 401) {
                     layer.msg(data.msg, {icon: 2, time: 1500}, function () {
@@ -180,7 +205,7 @@
                     $(obj.elem).prop('checked', !obj.elem.checked);
                     form.render('checkbox');
                 }
-            },function () {
+            }, function () {
                 layer.msg('请求失败了，请稍后再试', {icon: 2});
                 $(obj.elem).prop('checked', !obj.elem.checked);
                 form.render('checkbox');
@@ -242,7 +267,7 @@
             var row = obj.data; //得到所在行所有键值
             var newval = obj.value; //得到修改后的值
             admin.go('[[@{/param/updatesourcetypename}]]', {
-               sourcetype: row.sourceType,
+                sourcetype: row.sourceType,
                 paydesc: newval,
                 _csrf: $("meta[name='_csrf_token']").attr("value")
             }, function (data) {
@@ -256,7 +281,7 @@
                     layer.msg(data.msg, {icon: 2});
                     table.reload('sourcetypeTable');
                 }
-            },function () {
+            }, function () {
                 layer.msg('修改失败了，请稍后再试', {icon: 2});
                 table.reload('sourcetypeTable');
             });
@@ -265,11 +290,11 @@
         //监听单元格
         table.on('tool(sourcetypeTable-filter)', function (obj) {
             var data = obj.data;
-            if('del' === obj.event){
+            if ('del' === obj.event) {
                 if (confirm("确定要删除支付方式[" + data.sourceType + "_" + data.paydesc + "]吗？")) {
                     layer.load(2);
                     admin.go('[[@{/param/deletesourcetype}]]', {
-                       sourcetype: data.sourceType,
+                        sourcetype: data.sourceType,
                         _csrf: $("meta[name='_csrf_token']").attr("value")
                     }, function (data) {
                         console.log(data.code);
@@ -291,10 +316,10 @@
                         layer.msg('请求失败了，请稍后再试', {icon: 2});
                     });
                 }
-            }else if('config' ===obj.event){
+            } else if ('config' === obj.event) {
                 admin.popupCenter({
                     title: "配置参数【" + data.sourceType + "_" + data.paydesc + "】",
-                    path: '[[@{/param/load4sourcetypeconfig}]]?sourcetype='+data.sourceType,
+                    path: '[[@{/param/load4sourcetypeconfig}]]?sourcetype=' + data.sourceType,
                     area: '800px',
                     finish: function () {
                         table.reload('sourcetypeTable');
diff --git a/payapi/src/main/resources/templates/system/param/sourcetypeform.html b/payapi/src/main/resources/templates/system/param/sourcetypeform.html
index f99ad4c..2b9304d 100644
--- a/payapi/src/main/resources/templates/system/param/sourcetypeform.html
+++ b/payapi/src/main/resources/templates/system/param/sourcetypeform.html
@@ -14,6 +14,28 @@
         </div>
     </div>
     <div class="layui-form-item">
+        <label class="layui-form-label">支付科目号</label>
+        <div class="layui-input-block">
+            <select name="paySubjno">
+                <option value="-">不支持</option>
+                <option th:each="bean : ${subjectList}" th:value="${bean.subjno}"
+                        th:text="${bean.subjname} + '(' + ${bean.subjno} + ')'">
+                </option>
+            </select>
+        </div>
+    </div>
+    <div class="layui-form-item">
+        <label class="layui-form-label">充值科目号</label>
+        <div class="layui-input-block">
+            <select name="depositeSubjno">
+                <option value="-">不支持</option>
+                <option th:each="bean : ${subjectList}" th:value="${bean.subjno}"
+                        th:text="${bean.subjname} + '(' + ${bean.subjno} + ')'">
+                </option>
+            </select>
+        </div>
+    </div>
+    <div class="layui-form-item">
         <label class="layui-form-label">状态</label>
         <div class="layui-input-block">
             <input name="enable" type="checkbox" lay-skin="switch" lay-text="启用|关闭" value="yes"
@@ -74,6 +96,7 @@
         var admin = layui.admin;
         var form = layui.form;
         form.render('checkbox');
+        form.render('select');
         form.verify({
             "sourceType": function (e) {
                 var msg = "";
