与pos一些对接接口原型
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
index 78ea9d4..14fc1d7 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/APIRequestParam.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.framework.util;
 
-import org.apache.log4j.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import java.beans.Introspector;
 import java.lang.reflect.Field;
@@ -8,7 +9,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-public class APIRequestParam {
+public abstract class APIRequestParam {
   @Sign
   private String sign;
   @Sign
@@ -16,7 +17,7 @@
   @Sign
   private String version;
 
-  private static final Logger logger = Logger.getLogger(APIRequestParam.class);
+  private static final Logger logger = LoggerFactory.getLogger(APIRequestParam.class);
 
   public String getSign() {
     return sign;
@@ -96,4 +97,6 @@
     }
     return calcSignAndCheck(paramMap,key);
   }
+
+  public abstract boolean checkParam();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
index 336239e..6fd831b 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeErrorCode.java
@@ -131,4 +131,10 @@
 
   public static final int BUSINESS_PAYTYPE_NOSUPPORT = 30003; //支付方式不支持
 
+
+  //================= POS消费业务 ==================//
+  public static final int POS_TIMESTAMP_ERROR = 40000; //业务处理错误
+
+  public static final int POS_NOT_EXISTS = 40001; //设备不存在
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
index 14d13db..e848ae9 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/dao/DeviceDao.java
@@ -27,4 +27,8 @@
 
 
     TDevice findTDeviceById(Integer id);
+
+    TDevice findByDevphyid(String devphyid);
+
+
 }
diff --git a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
index c0f7343..6083f5f 100644
--- a/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/restaurant/util/RestaurantConstant.java
@@ -9,4 +9,7 @@
   public static final String RULETYPE_QUOTA = "quota"; //定额
   public static final String RULETYPE_REDUCTION = "reduction"; //减免
 
+
+  public static final int POS_TIME_ERROR_DIFFMINS = 10; //设备时钟误差
+
 }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index f498fee..014a139 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -2,251 +2,149 @@
 
 import com.supwisdom.dlpay.exception.RequestParamCheckException
 import com.supwisdom.dlpay.framework.util.*
-import com.supwisdom.dlpay.util.ConstantUtil
+import com.supwisdom.dlpay.restaurant.util.RestaurantConstant
 
-// ============================ USER ============================ //
-class OpenUserParam : APIRequestParam() {
-    @Sign
-    var uid: String = ""    //第三方用户ID,必传
-    @Sign
-    var name: String = ""   //必传
-    @Sign
-    var sex: String? = null
-    @Sign
-    var idtype: String = "" //必传
-    @Sign
-    var idno: String = ""   //必传
-    @Sign
-    var mobile: String? = null
-    @Sign
-    var tel: String? = null
-    @Sign
-    var email: String? = null
-    @Sign
-    var address: String? = null
-    @Sign
-    var zipcode: String? = null
+class ParamUtil {
+    companion object {
+        fun checkTimestamp(timestamp: String) {
+            if (!DateUtil.checkDatetimeValid(timestamp, DateUtil.DATETIME_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数错误[设备时间戳]")
+            val nowtime = DateUtil.getNow()
+            if (DateUtil.compareDatetime(nowtime, timestamp, -1 * RestaurantConstant.POS_TIME_ERROR_DIFFMINS * 60) > 0 || DateUtil.compareDatetime(nowtime, timestamp, RestaurantConstant.POS_TIME_ERROR_DIFFMINS * 60) < 0)
+                throw RequestParamCheckException(TradeErrorCode.POS_TIMESTAMP_ERROR, "设备时钟错误[设备时钟与服务器时钟相差${RestaurantConstant.POS_TIME_ERROR_DIFFMINS}分钟!]")
+        }
+    }
+}
 
-    fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
-        if (StringUtil.isEmpty(name)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "姓名不能为空")
-        if (!StringUtil.isEmpty(sex) && ConstantUtil.SEX_MALE != sex && ConstantUtil.SEX_FEMALE != sex) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "性别非法[male|female]")
-        if (StringUtil.isEmpty(idtype) || !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件类型非法")
-        if (StringUtil.isEmpty(idno) || !StringUtil.isCharAndNum(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件号不能为空,且仅支持数字和字母")
-        if (ConstantUtil.IDTYPE_IDENTITY == idtype && !StringUtil.isIdentity(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "身份证格式错误")
-        if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "手机号格式错误")
-        if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "邮箱格式错误")
+class PosLoginParam : APIRequestParam() {
+    @Sign
+    var devphyid: String = ""
+    @Sign
+    var devtype: String = ""
+    @Sign
+    var devparaverno: String = ""
+    @Sign
+    var cardverno: String = ""
+    @Sign
+    var devsoftverno: String = ""
+    @Sign
+    var timestamp: String = ""
+
+
+    override fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(devphyid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备物理ID]")
+        if (StringUtil.isEmpty(devtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备类型]")
+        if (StringUtil.isEmpty(devparaverno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备参数版本号]")
+        if (!NumberUtil.isDigits(cardverno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数错误[白名单版本号]")
+        if (StringUtil.isEmpty(devsoftverno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备软件版本号]")
+        ParamUtil.checkTimestamp(timestamp)
 
         return true
     }
 }
 
-class QueryUserParam : APIRequestParam() {
+class PosHeartBeatParam : APIRequestParam() {
     @Sign
-    var userid: String? = null  // 用户ID二选一 (两者都传取userid)
+    var devphyid: String = ""
     @Sign
-    var uid: String? = null    // 用户ID二选一
+    var devparaverno: String = ""
+    @Sign
+    var cardverno: String = ""
+    @Sign
+    var devsoftverno: String = ""
 
-    fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
+
+    override fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(devphyid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备物理ID]")
+        if (StringUtil.isEmpty(devparaverno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备参数版本号]")
+        if (!NumberUtil.isDigits(cardverno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[白名单版本号]")
+        if (StringUtil.isEmpty(devsoftverno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备软件版本号]")
 
         return true
     }
 }
 
-class ModifyUserParam : APIRequestParam() {
+class UpdateDevparaParam : APIRequestParam() {
     @Sign
-    var userid: String? = null  // 用户ID二选一 (两者都传取userid)
+    var devphyid: String = ""
     @Sign
-    var uid: String? = null    // 用户ID二选一
+    var devparagroupid: Int = 0
     @Sign
-    var name: String? = null
-    @Sign
-    var sex: String? = null
-    @Sign
-    var idtype: String? = null
-    @Sign
-    var idno: String? = null
-    @Sign
-    var mobile: String? = null
-    @Sign
-    var tel: String? = null
-    @Sign
-    var email: String? = null
-    @Sign
-    var address: String? = null
-    @Sign
-    var zipcode: String? = null
+    var timestamp: String = ""
 
-    fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(userid) && StringUtil.isEmpty(uid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "用户唯一号不能为空")
-        if (!StringUtil.isEmpty(sex) && ConstantUtil.SEX_MALE != sex && ConstantUtil.SEX_FEMALE != sex) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "性别非法[male|female]")
-        if (!StringUtil.isEmpty(idtype) && !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件类型非法")
-        if (!StringUtil.isEmpty(idno) && !StringUtil.isCharAndNum(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件号不能为空,且仅支持数字和字母")
-        if (!StringUtil.isEmpty(idno) && StringUtil.isEmpty(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件号不能为空时,请指定证件类型")
-        if (!StringUtil.isEmpty(idno) && ConstantUtil.IDTYPE_IDENTITY == idtype && !StringUtil.isIdentity(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "身份证格式错误")
-        if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "手机号格式错误")
-        if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "邮箱格式错误")
+    override fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(devphyid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备物理ID]")
+        if (null == devparagroupid || devparagroupid < 1) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数错误[设备参数参数组ID]")
+        ParamUtil.checkTimestamp(timestamp)
+
+        return true
+    }
+}
+
+class DownloadWhiteListParam : APIRequestParam() {
+    @Sign
+    var devphyid: String = ""
+    @Sign
+    var cardverno: String = ""
+    @Sign
+    var maxcount: Int = 0
+    @Sign
+    var timestamp: String = ""
+
+
+    override fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(devphyid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备物理ID]")
+        if (!NumberUtil.isDigits(cardverno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[白名单版本号]")
+        if (null == maxcount || maxcount < 1) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数错误[名单数目]")
+        ParamUtil.checkTimestamp(timestamp)
+
+        return true
+    }
+}
+
+class QueryPosSalesParam : APIRequestParam() {
+    @Sign
+    var devphyid: String = ""
+    @Sign
+    var transdate: String = ""
+    @Sign
+    var mealflag: Boolean = false
+    @Sign
+    var timestamp: String = ""
+
+    override fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(devphyid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备物理ID]")
+        if (!DateUtil.checkDatetimeValid(transdate, DateUtil.DATE_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数错误[交易日期]")
+        if (null == mealflag) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数错误[分餐标志]")
+        ParamUtil.checkTimestamp(timestamp)
+
+        return true
+    }
+
+}
+
+class QueryPosDtlParam : APIRequestParam() {
+    @Sign
+    var devphyid: String = ""
+    @Sign
+    var transdate: String = ""
+    @Sign
+    var pageno: Int = 0
+    @Sign
+    var timestamp: String = ""
+
+    override fun checkParam(): Boolean {
+        if (StringUtil.isEmpty(devphyid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数为空[设备物理ID]")
+        if (!DateUtil.checkDatetimeValid(transdate, DateUtil.DATE_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数错误[交易日期]")
+        if (null == pageno || pageno < 1) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请求参数错误[页码]")
+        ParamUtil.checkTimestamp(timestamp)
 
         return true
     }
 }
 
 
-// ============================ SHOP ============================ //
-class OpenShopParam : APIRequestParam() {
-    @Sign
-    var shopUniqueId: String = "" //必传
-    @Sign
-    var shoptype: Int = 1
-    @Sign
-    var fshopid: Int? = null
-    @Sign
-    var shopname: String = "" //必传
-    @Sign
-    var contactman: String? = null
-    @Sign
-    var idtype: String? = null
-    @Sign
-    var idno: String? = null
-    @Sign
-    var mobile: String? = null
-    @Sign
-    var email: String? = null
-    @Sign
-    var address: String? = null
-    @Sign
-    var zipcode: String? = null
-
-    fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(shopUniqueId)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "商户唯一号不能为空")
-        if (ConstantUtil.SHOPTYPE_GROUP != shoptype && ConstantUtil.SHOPTYPE_LEAF != shoptype) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请指定商户类型")
-        if (StringUtil.isEmpty(shopname)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "商户名称不能为空")
-        if (!StringUtil.isEmpty(idtype) && !ConstantUtil.IDTYPE_DICTS.contains(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件类型非法")
-        if (!StringUtil.isEmpty(idno) && !StringUtil.isCharAndNum(idno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件号不能为空,且仅支持数字和字母")
-        if (!StringUtil.isEmpty(idno) && StringUtil.isEmpty(idtype)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "证件号不能为空时,请指定证件类型")
-        if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "手机号格式错误")
-        if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "邮箱格式错误")
-
-        return true
-    }
-}
-
-class QueryShopParam : APIRequestParam() {
-    @Sign
-    var shopid: Int? = null  //注册时返回的shopid
-    @Sign
-    var shopaccno: String? = null  //注册时返回的shopaccno
-    @Sign
-    var shopUniqueId: String? = null //注册传的商户唯一号
-
-    fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(shopUniqueId) && null == shopid && StringUtil.isEmpty(shopaccno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "商户唯一标志不能为空")
-
-        return true
-    }
-}
 
 
-// ============================ CONSUME ============================ //
-class ConsumeFeetype {
-    var feetype: String = ""
-    var amount: Int = 0
-
-    override fun toString(): String {
-        return "{feetype='$feetype', amount=$amount}"
-    }
-}
-
-class QueryDtlResultParam : APIRequestParam() {
-    @Sign
-    var refno:String?=null //二选一
-    @Sign
-    var billno:String?=null //二选一 (billno+shopaccno) 传billno时,shopaccno必传
-    @Sign
-    var shopaccno: String?=null
-
-    fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(refno) && (StringUtil.isEmpty(billno) || StringUtil.isEmpty(shopaccno))) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "流水唯一号不能为空")
-
-        return true
-    }
-}
-
-class CitizenCardPayinitParam : APIRequestParam() {
-    @Sign
-    var cardNo: String = "" //必传
-    @Sign
-    var shopaccno: String = "" //必传
-    @Sign
-    var amount: Int = 0 //必传
-
-    var feelist: List<ConsumeFeetype>? = null //TODO: 怎么拼接签名字符串??
-    @Sign
-    var billno: String = "" //必传
-    @Sign
-    var transdate: String = "" //必传
-    @Sign
-    var transtime: String = "" //必传
-
-    fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(cardNo)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "卡唯一号不能为空")
-        if (StringUtil.isEmpty(shopaccno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请指定交易商户")
-        if (amount <= 0) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易金额必须大于零")
-        if (StringUtil.isEmpty(billno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "对接系统唯一订单号不能为空")
-        if (!DateUtil.checkDatetimeValid(transdate, DateUtil.DATE_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易日期错误[yyyyMMdd]")
-        if (!DateUtil.checkDatetimeValid(transtime, DateUtil.TIME_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易时间错误[HHmmss]")
-
-        return true
-    }
-}
-
-class CitizenCardPayfinishParam : APIRequestParam() {
-    @Sign
-    var refno:String=""
-
-    fun checkParam(): Boolean {
-        if (StringUtil.isEmpty(refno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易参考号不能为空")
-
-        return true
-    }
-}
-
-class YktCardPayinitParam : APIRequestParam() {
-    @Sign
-    var uid: String? = null //未注册,可能不传
-    @Sign
-    var shopaccno: String = "" //必传
-    @Sign
-    var amount: Int = 0 //必传
-
-    var feelist: List<ConsumeFeetype>? = null //TODO: 怎么拼接签名字符串??
-    @Sign
-    var billno: String = "" //必传
-    @Sign
-    var transdate: String = "" //必传
-    @Sign
-    var transtime: String = "" //必传
-    @Sign
-    var stuempno: String = "" //必传
-    @Sign
-    var yktshopid: String? = null
-    @Sign
-    var devphyid: String? = null
-
-    fun checkParam(): Boolean {
-
-        if (StringUtil.isEmpty(shopaccno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "请指定交易商户")
-        if (amount <= 0) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易金额必须大于零")
-        if (StringUtil.isEmpty(billno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "对接系统唯一订单号不能为空")
-        if (!DateUtil.checkDatetimeValid(transdate, DateUtil.DATE_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易日期错误[yyyyMMdd]")
-        if (!DateUtil.checkDatetimeValid(transtime, DateUtil.TIME_FMT)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "交易时间错误[HHmmss]")
-        if (StringUtil.isEmpty(stuempno)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "一卡通唯一号不能为空")
-        if(!StringUtil.isEmpty(yktshopid) && !NumberUtil.isDigits(yktshopid)) throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "一卡通商户号非整数")
-
-        return true
-    }
-}
 
 
 
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt
deleted file mode 100644
index ff29e99..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/comsume_builder.kt
+++ /dev/null
@@ -1,368 +0,0 @@
-package com.supwisdom.dlpay.api
-
-import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TPerson
-import com.supwisdom.dlpay.api.domain.TUserdtl
-import com.supwisdom.dlpay.api.service.AccountUtilServcie
-import com.supwisdom.dlpay.api.service.PersonBalancePayService
-import com.supwisdom.dlpay.exception.TransactionCheckException
-import com.supwisdom.dlpay.framework.domain.TFeetypeConfig
-import com.supwisdom.dlpay.framework.domain.TShopacc
-import com.supwisdom.dlpay.framework.domain.TSubject
-import com.supwisdom.dlpay.framework.util.*
-
-class AccountHolder<T> private constructor(val accountId: String, val idType: Int) {
-    companion object {
-        const val IDTYPE_PERSON = 1
-        const val IDTYPE_SHOP = 2
-        const val IDTYPE_SUBJECT = 3
-        const val IDTYPE_FEETYPE = 4
-
-        fun person(userid: String): AccountHolder<TAccount> {
-            return AccountHolder(userid, IDTYPE_PERSON)
-        }
-
-        fun shop(shopid: String): AccountHolder<TShopacc> {
-            return AccountHolder(shopid, IDTYPE_SHOP)
-        }
-
-        fun subject(subjNo: String): AccountHolder<TSubject> {
-            return AccountHolder(subjNo, IDTYPE_SUBJECT)
-        }
-
-        fun feetype(feetype: String, paytype: String): AccountHolder<TFeetypeConfig> {
-            return AccountHolder("$feetype@$paytype", IDTYPE_FEETYPE)
-        }
-    }
-
-    internal lateinit var builder: PersonTransBuilder
-
-    internal val childrenHolder = mutableListOf<AccountHolder<*>>()
-
-
-    fun <U> with(holder: AccountHolder<U>): AccountHolder<T> {
-        holder.builder = this.builder
-        childrenHolder.add(holder)
-        return this
-    }
-
-    @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
-    fun <T> get(): T {
-        return when (idType) {
-            IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdateNowait(accountId)
-            IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId.toInt())
-            IDTYPE_SUBJECT -> builder.accountUtil.readSubject(accountId)
-            IDTYPE_FEETYPE -> builder.accountUtil.readFeetype(accountId.split("@")[0], accountId.split("@")[1])
-            else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "账户类型未知type<$idType>")
-        } as T
-    }
-
-    @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
-    fun <T> withLock(): T {
-        return when (idType) {
-            IDTYPE_PERSON -> builder.accountUtil.readAccountForUpdateNowait(accountId)
-            IDTYPE_SHOP -> builder.accountUtil.readShopAcc(accountId.toInt())
-            IDTYPE_SUBJECT -> builder.accountUtil.readSubject(accountId)
-            IDTYPE_FEETYPE -> builder.accountUtil.readFeetype(accountId.split("@")[0], accountId.split("@")[1])
-            else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "账户类型未知type<$idType>")
-        } as T
-    }
-}
-
-class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) {
-    companion object {
-        fun newBuilder(accUitl: AccountUtilServcie) = PersonTransBuilder(accUitl)
-    }
-
-    inner class TransDetail(val debitAccNo: String, val debitSubjNo: String,
-                            val creditAccNo: String, val creditSubjNo: String,
-                            val amount: Double, val summary: String,
-                            val rowno: Int)
-
-    ///////////////////////////////////////////////////////////////////////////////
-    // 以下为输入参数,调用接口时指定的参数值
-    lateinit var person: TPerson
-    lateinit var tradetype: Tradetype
-    lateinit var refno: String
-    lateinit var status: String
-    lateinit var shopaccno: String
-    val extendMap = mutableMapOf<String, String>() //存调第三方需要的参数信息
-    val resultMap = mutableMapOf<String, String>() //存调第三方结果数据
-
-    var transcode = 0
-
-    var transDate = ""
-    var transTime = ""
-    /**
-     * 是否允许透支
-     */
-    var overdraft = false
-    var description = ""
-
-    /**
-     * 支付方式
-     * */
-    var paytype = ""  //枚举?
-    var payinfo = ""
-
-    /**
-     * 外部流水号
-     * */
-    var outtradeno = "" //发起支付系统的流水号(对接系统根据此流水号查询本地流水对账)
-
-    var tryLockAccount = false
-
-    ////////////////////////////////////////////////////////////////////////////////////
-    // 以下为内部参数,不需要调用者处理
-    val details = mutableListOf<TransDetail>()
-    var amount: Double = 0.0
-    var accountUtil = accUitl
-
-    /////////////////////////////////////////////
-
-    fun setOwner(per: TPerson): PersonTransBuilder {
-        this.person = per
-        return this
-    }
-
-    fun enableOverdraft(b: Boolean = false): PersonTransBuilder {
-        this.overdraft = b
-        return this
-    }
-
-    fun setTransDatetime(date: String, time: String): PersonTransBuilder {
-        this.transDate = date
-        this.transTime = time
-        return this
-    }
-
-    fun setTransinfo(transcode: Int, description: String): PersonTransBuilder {
-        this.transcode = transcode
-        this.description = description
-        return this
-    }
-
-    fun selectPaytype(paytype: String, payinfo: String): PersonTransBuilder {
-        this.paytype = paytype
-        this.payinfo = payinfo
-        return this
-    }
-
-    fun setOuttradeno(outtradeno: String): PersonTransBuilder {
-        this.outtradeno = outtradeno
-        return this
-    }
-
-    fun chooseTradetype(tradetype: Tradetype): PersonTransBuilder {
-        this.tradetype = tradetype
-        return this
-    }
-
-    fun tryLock(lock: Boolean): PersonTransBuilder {
-        this.tryLockAccount = lock
-        return this
-    }
-
-    fun setRefno(refno: String): PersonTransBuilder {
-        this.refno = refno
-        return this
-    }
-
-    fun addExtendParam(key: String, value: String): PersonTransBuilder {
-        this.extendMap.plus(mapOf(key to value))
-        return this
-    }
-
-    fun addExtendParam(param: Map<String, String>): PersonTransBuilder {
-        this.extendMap.plus(param)
-        return this
-    }
-    fun addResult(key: String, value: String): PersonTransBuilder {
-        this.resultMap.plus(mapOf(key to value))
-        return this
-    }
-
-    fun addResult(param: Map<String, String>): PersonTransBuilder {
-        this.resultMap.plus(param)
-        return this
-    }
-
-    private fun prepareData() {
-        if (transcode == 0) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易码")
-        }
-
-        // fixme : 是否要检查 recharge , consume 之外的类型
-        when (this.tradetype) {
-            //充值必须指明用户和支付方式
-            Tradetype.RECHARGE -> {
-                if (StringUtil.isEmpty(this.paytype))
-                    throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定充值方式")
-            }
-
-            //消费
-            Tradetype.CONSUME -> {
-                if (StringUtil.isEmpty(this.paytype))
-                    this.paytype = TradeDict.PAYTYPE_BALANCE   //默认余额支付
-            }
-        }
-
-        if (this.details.size < 1) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易明细")
-        }
-
-        amount = this.details.sumByDouble { detail ->
-            detail.amount
-        }
-
-        if (!StringUtil.isEmpty(this.transDate) &&
-                !DateUtil.checkDatetimeValid(this.transDate, "yyyyMMdd")) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易日期格式错误[yyyyMMdd]")
-        }
-        if (!StringUtil.isEmpty(this.transTime) &&
-                !DateUtil.checkDatetimeValid(this.transTime, "HHmmss")) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易时间格式错误[HHmmss]")
-        }
-
-        if (StringUtil.isEmpty(this.outtradeno)) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未传递外部流水号")
-        }
-
-
-    }
-
-    private fun preCheckAccount() {
-        when (person.status) {
-            TradeDict.STATUS_CLOSED ->
-                throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已注销")
-            TradeDict.STATUS_LOCKED ->
-                throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已冻结锁定")
-        }
-    }
-
-    @Suppress("UNCHECKED_CAST", "IMPLICIT_CAST_TO_ANY")
-    fun <U> getAccountAndSubjNo(holder: AccountHolder<U>): Pair<String, String> {
-        return if (this.tryLockAccount) {
-            when (holder.idType) {
-                AccountHolder.IDTYPE_PERSON -> holder.withLock<TAccount>().let {
-                    it.accno to it.subjno
-                }
-                AccountHolder.IDTYPE_SHOP -> holder.withLock<TShopacc>().let {
-                    if(null==this.shopaccno) this.shopaccno=it.shopaccno
-                    it.shopaccno to it.subjno
-                }
-                AccountHolder.IDTYPE_SUBJECT -> holder.withLock<TSubject>().let {
-                    it.subjno to it.subjno
-                }
-                else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型")
-            }
-        } else {
-            when (holder.idType) {
-                AccountHolder.IDTYPE_PERSON -> holder.get<TAccount>().let {
-                    it.accno to it.subjno
-                }
-                AccountHolder.IDTYPE_SHOP -> holder.get<TShopacc>().let {
-                    if(null==this.shopaccno) this.shopaccno=it.shopaccno
-                    it.shopaccno to it.subjno
-                }
-                AccountHolder.IDTYPE_SUBJECT -> holder.get<TSubject>().let {
-                    it.subjno to it.subjno
-                }
-                else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "不支持的账户类型")
-            }
-        }
-    }
-
-    fun <T, U> addDetail(debit: AccountHolder<T>, credit: AccountHolder<U>,
-                         amount: Double, summary: String): PersonTransBuilder {
-        debit.builder = this
-        credit.builder = this
-
-        var debitAccNo = ""
-        var debitSubjNo = ""
-        getAccountAndSubjNo(debit).apply {
-            debitAccNo = first
-            debitSubjNo = second
-        }
-        var creditAccNo = ""
-        var creditSubjNo = ""
-        getAccountAndSubjNo(credit).apply {
-            creditAccNo = first
-            creditSubjNo = second
-        }
-        this.details.add(TransDetail(debitAccNo, debitSubjNo, creditAccNo, creditSubjNo,
-                amount, summary, this.details.size + 1))
-        return this
-    }
-
-    fun addDetail(accountHolder: AccountHolder<TFeetypeConfig>,
-                  amount: Double): PersonTransBuilder {
-        accountHolder.builder = this
-        val transtype = accountHolder.get<TFeetypeConfig>()
-
-        var debitAccNo = ""
-        var debitSubjNo = ""
-
-        var creditAccNo = ""
-        var creditSubjNo = ""
-
-        accountHolder.childrenHolder.map {
-            getAccountAndSubjNo(it)
-        }.forEach {
-            if (it.second == transtype.drsubjno) {
-                debitAccNo = it.first
-                debitSubjNo = it.second
-            } else if (it.second == transtype.crsubjno) {
-                creditAccNo = it.first
-                creditSubjNo = it.second
-            }
-        }
-
-        if (debitAccNo.isEmpty()) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                    "交易配置<${transtype.feetype}@${transtype.paytype}> 借方账号配置错误")
-        }
-        if (creditAccNo.isEmpty()) {
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
-                    "交易配置<${transtype.feetype}@${transtype.paytype}> 贷方账号配置错误")
-        }
-        this.details.add(TransDetail(debitAccNo, debitSubjNo, creditAccNo, creditSubjNo,
-                amount, transtype.summary, this.details.size + 1))
-        return this
-    }
-
-    /**
-     * 一步交易完成
-     */
-    fun done(service: PersonBalancePayService): TUserdtl {
-        prepareData()
-        preCheckAccount()
-        return service.process(this)
-    }
-
-    fun init(service: PersonBalancePayService) : TUserdtl{
-        prepareData()
-        preCheckAccount()
-        return service.init(this)
-    }
-
-    fun wip(service: PersonBalancePayService): TUserdtl {
-        if (null == this.refno)
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
-        return service.wip(this)
-    }
-
-    fun finish(service: PersonBalancePayService, status: String): TUserdtl {
-        if (null == this.refno)
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
-        this.status = status
-        return service.finish(this)
-    }
-
-    fun success(service: PersonBalancePayService): TUserdtl{
-        if (null == this.refno)
-            throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易参考号<refno>未指定")
-        this.status = TradeDict.DTL_STATUS_SUCCESS
-        return service.finish(this)
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/common_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/common_api_controller.kt
new file mode 100644
index 0000000..9709b57
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/common_api_controller.kt
@@ -0,0 +1,99 @@
+package com.supwisdom.dlpay.api.controller
+
+import com.supwisdom.dlpay.api.bean.*
+import com.supwisdom.dlpay.api.service.CommonApiService
+import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import org.apache.log4j.Logger
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.ResponseEntity
+import org.springframework.web.bind.annotation.*
+
+@RestController
+@RequestMapping("/api/common")
+class CommonAPIController {
+    companion object {
+        private val logger = Logger.getLogger(CommonAPIController::class.java)
+    }
+
+    @Autowired
+    lateinit var commonApiService: CommonApiService
+
+    /**
+     * ============================================================================
+     * POS签到
+     * ============================================================================
+     * */
+    @PostMapping("/poslogin")
+    fun posLogin(@RequestBody param: PosLoginParam): ResponseEntity<Any> {
+        logger.info("收到设备[${param.devphyid}]签到请求: ")
+        val device = commonApiService.getDeviceByDevphyid(param.devphyid)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "业务处理错误"))
+    }
+
+
+    /**
+     * ============================================================================
+     * POS心跳
+     * ============================================================================
+     * */
+    @PostMapping("/posheartbeat")
+    fun heartbeat(@RequestBody param: PosHeartBeatParam): ResponseEntity<Any> {
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "业务处理错误"))
+    }
+
+    /**
+     * ============================================================================
+     * 更新设备参数组
+     * ============================================================================
+     * */
+    @PostMapping("/updatedevpara")
+    fun updateDevpara(@RequestBody param: UpdateDevparaParam): ResponseEntity<Any> {
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "业务处理错误"))
+    }
+
+
+    /**
+     * ============================================================================
+     * 下载白名单
+     * ============================================================================
+     * */
+    @PostMapping("/downloadwhitelist")
+    fun downloadWhiteList(@RequestBody param: DownloadWhiteListParam): ResponseEntity<Any>{
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "业务处理错误"))
+    }
+
+    /**
+     * ============================================================================
+     * 查询营业额
+     * ============================================================================
+     * */
+    @PostMapping("/querypossales")
+    fun queryPosSales(@RequestBody param: QueryPosSalesParam): ResponseEntity<Any>{
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "业务处理错误"))
+    }
+
+    /**
+     * ============================================================================
+     * 查询流水
+     * ============================================================================
+     * */
+    @PostMapping("/queryposdtl")
+    fun queryPosDtl(@RequestBody param: QueryPosDtlParam): ResponseEntity<Any>{
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "业务处理错误"))
+    }
+
+
+
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
deleted file mode 100644
index 066e43c..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ /dev/null
@@ -1,455 +0,0 @@
-package com.supwisdom.dlpay.api.controller
-
-import com.supwisdom.dlpay.api.AccountHolder
-import com.supwisdom.dlpay.api.CallService
-import com.supwisdom.dlpay.api.PersonTransBuilder
-import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam
-import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam
-import com.supwisdom.dlpay.api.bean.QueryDtlResultParam
-import com.supwisdom.dlpay.api.bean.YktCardPayinitParam
-import com.supwisdom.dlpay.api.service.*
-import com.supwisdom.dlpay.exception.RequestParamCheckException
-import com.supwisdom.dlpay.exception.TransactionException
-import com.supwisdom.dlpay.exception.TransactionProcessException
-import com.supwisdom.dlpay.framework.ResponseBodyBuilder
-import com.supwisdom.dlpay.framework.service.CommonService
-import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.*
-import com.supwisdom.dlpay.util.ConstantUtil
-import com.supwisdom.dlpay.util.PaytypeUtil
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.http.ResponseEntity
-import org.springframework.web.bind.annotation.*
-import javax.servlet.http.HttpServletRequest
-import javax.servlet.http.HttpServletResponse
-
-@RestController
-@RequestMapping("/api/consume")
-class ConsumeController {
-    @Autowired
-    lateinit var accountUtilServcie: AccountUtilServcie
-    @Autowired
-    lateinit var personBalancePayService: PersonBalancePayService
-    @Autowired
-    lateinit var paytypeService: PaytypeService
-    @Autowired
-    lateinit var userService: UserService
-    @Autowired
-    lateinit var systemUtilService: SystemUtilService
-    @Autowired
-    lateinit var consumePayService: ConsumePayService
-    @Autowired
-    lateinit var commonService: CommonService
-
-    /**
-     * 流水结果查询统一接口
-     * */
-    fun queryDtlResult(@RequestBody param: QueryDtlResultParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            val dtl = if (StringUtil.isEmpty(param.refno)) {
-                personBalancePayService.getUserdtlForUpdateNowait(param.refno!!)
-            } else {
-                personBalancePayService.getUserdtlByBillnoForUpdateNowait(param.billno!!, param.shopaccno!!)
-            }
-            val person = dtl.userid?.let { userService.findPersonByUserid(dtl.userid) }
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .data("refno", dtl.refno)
-                    .data("amount", dtl.amount)
-                    .data("paytype", dtl.paytype)
-                    .data("payinfo", dtl.payinfo)
-                    .also {
-                        if (null != person) {
-                            it.data("name", person.name)
-                        }
-                    }
-                    .success("查询成功"))
-
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "查询错误"))
-        }
-
-    }
-
-    /**
-     * ============================================================================
-     *                           账户【余额支付】
-     * ============================================================================
-     * */
-    @PostMapping("/balance/pay")
-    fun balancePay(@RequestBody param: CitizenCardPayinitParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
-            if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_BALANCE)) {
-                val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .chooseTradetype(Tradetype.CONSUME) //消费
-                        .setOwner(person) //记名
-                        .setTransinfo(TradeCode.TRANSCODE_BALANCE_PAY, "账户余额支付")
-                        .setTransDatetime(param.transdate, param.transtime) //交易时间
-                        .selectPaytype(TradeDict.PAYTYPE_BALANCE, param.cardNo)
-                        .addDetail(AccountHolder.person(person.userid),
-                                AccountHolder.shop(param.shopaccno),
-                                param.amount / 100.0, "账户余额消费")
-                        .also { builder ->
-                            param.feelist?.forEach {
-                                when(it.feetype){
-                                    TradeDict.FEETYPE_CONSUME_MEALER -> {
-                                        if (it.amount <= 0) {
-                                            throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "费用类别<${it.feetype}>的金额不能为负")
-                                        }
-                                        builder.addDetail(AccountHolder.feetype(it.feetype, TradeDict.PAYTYPE_BALANCE)
-                                                .with(AccountHolder.shop(param.shopaccno))
-                                                .with(AccountHolder.person(person.userid))
-                                                , it.amount / 100.0)
-                                    }
-                                    TradeDict.FEETYPE_CONSUME_DISCOUNT->{
-                                        TODO("折扣逻辑暂缺")
-                                    }
-                                    else -> throw TransactionProcessException(TradeErrorCode.FEETYPE_NOT_NOSUPPORT, "费用类别<${it.feetype}>不支持")
-                                }
-
-                            }
-                        }
-                        .done(personBalancePayService)
-
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("refno", dtl.refno)
-                        .data("amount", dtl.amount)
-                        .success("交易成功"))
-            }
-
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<账户余额>"))
-
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-
-
-    /**
-     * ============================================================================
-     *                           市民卡【交易初始化】
-     * ============================================================================
-     * */
-    @PostMapping("/citizencard/payinit")
-    fun citizencardPayinit(@RequestBody param: CitizenCardPayinitParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
-            if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_CITIZEN_CARD)) {
-                val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .chooseTradetype(Tradetype.CONSUME) //消费
-                        .setOwner(person) //记名
-                        .setTransinfo(TradeCode.TRANSCODE_CITIZENCARD_PAY, "市民卡代扣消费")
-                        .setTransDatetime(param.transdate, param.transtime) //交易时间
-                        .selectPaytype(TradeDict.PAYTYPE_CITIZEN_CARD, param.cardNo)
-                        .addDetail(AccountHolder.subject(Subject.SUBJNO_PAY_CITIZEN_CARD),
-                                AccountHolder.shop(param.shopaccno),
-                                param.amount / 100.0, "市民卡代扣消费")
-                        .also { builder ->
-                            param.feelist?.forEach {
-                                //fixme: 科目 -> 商户 与个人无关
-                                builder.addDetail(AccountHolder.feetype(it.feetype, TradeDict.PAYTYPE_CITIZEN_CARD)
-                                        .with(AccountHolder.shop(param.shopaccno))
-                                        .with(AccountHolder.subject(Subject.SUBJNO_PAY_CITIZEN_CARD))
-                                        , it.amount / 100.0)
-                            }
-                        }
-                        .init(personBalancePayService)
-
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("refno", dtl.refno)
-                        .data("amount", dtl.amount)
-                        .success("交易初始化成功"))
-            }
-
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>"))
-
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-    /**
-     * ============================================================================
-     *                           市民卡【交易确认】
-     * ============================================================================
-     * */
-    @PostMapping("/citizencard/payfinish")
-    fun citizencardPayinit(@RequestBody param: CitizenCardPayfinishParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            var dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                    .setRefno(param.refno)
-                    .wip(personBalancePayService)
-            val code = CallService.CallCitizenCardPay(consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, dtl.shopaccno), dtl)
-            if (code.retcode == "0") {
-                dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .setRefno(param.refno)
-                        .addResult(code.data)
-                        .success(personBalancePayService) //流水置成功
-
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("refno", dtl.refno)
-                        .data("billno", dtl.outtradeno)
-                        .success())
-            } else {
-                PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .setRefno(param.refno)
-                        .addResult("errmsg", code.retmsg!!)
-                        .finish(personBalancePayService, TradeDict.DTL_STATUS_FAIL) //流水置成功
-
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
-            }
-
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-
-
-    /**
-     * ============================================================================
-     *                           一卡通支付【交易初始化】
-     * ============================================================================
-     * */
-    @PostMapping("/ykt/payinit")
-    fun yktPayInit(@RequestBody param: YktCardPayinitParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } ?: null //没注册,可能匿名?
-            if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person==null)) {
-                val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .chooseTradetype(Tradetype.CONSUME) //消费
-                        .also {
-                            if (null != person) it.setOwner(person)
-                        }
-                        .setTransinfo(TradeCode.TRANSCODE_YKTCARD_PAY, "一卡通支付")
-                        .setTransDatetime(param.transdate, param.transtime) //交易时间
-                        .selectPaytype(TradeDict.PAYTYPE_YKT_CARD, param.stuempno)
-                        .addDetail(AccountHolder.subject(Subject.SUBJNO_PAY_YKT),
-                                AccountHolder.shop(param.shopaccno),
-                                param.amount / 100.0, "一卡通支付")
-                        .also { builder ->
-                            param.feelist?.forEach {
-                                //fixme: 科目 -> 商户 与个人无关
-                                builder.addDetail(AccountHolder.feetype(it.feetype, TradeDict.PAYTYPE_YKT_CARD)
-                                        .with(AccountHolder.shop(param.shopaccno))
-                                        .with(AccountHolder.subject(Subject.SUBJNO_PAY_YKT))
-                                        , it.amount / 100.0)
-                            }
-                        }
-                        .addExtendParam("stuempno", param.stuempno)
-                        .addExtendParam("yktshopid", param.yktshopid ?: "")
-                        .addExtendParam("devphyid", param.devphyid ?: "")
-                        //.addExtendParam(param.extendmap)  //fixme: 保存调一卡通附加参数 (是否直接传附加参数map)
-                        .init(personBalancePayService)
-
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("refno", dtl.refno)
-                        .data("amount", dtl.amount)
-                        .success("交易初始化成功"))
-
-            }
-
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<一卡通支付>"))
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-
-    /**
-     * ============================================================================
-     *                           一卡通支付【交易确认】
-     * ============================================================================
-     * */
-    @PostMapping("/ykt/payfinish")
-    fun yktPayFinish(@RequestBody param:CitizenCardPayfinishParam,request: HttpServletRequest,response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            var dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                    .setRefno(param.refno)
-                    .wip(personBalancePayService)
-            val extendMap = consumePayService.getUserdtlExtendParamMap(dtl.refno)
-            val code = CallService.callYktPay(consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_YKT_CARD, dtl.shopaccno, dtl.userid==null),
-                    dtl, DateUtil.getNow(), extendMap["stuempno"]!!, extendMap["yktshopid"]!!, extendMap["devphyid"])
-            if (code.retcode == "0") {
-                dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .setRefno(param.refno)
-                        .addResult(code.data)
-                        .success(personBalancePayService) //流水置成功
-
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("refno", dtl.refno)
-                        .data("billno", dtl.outtradeno)
-                        .success())
-            } else {
-                PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .setRefno(param.refno)
-                        .addResult("errmsg", code.retmsg!!)
-                        .finish(personBalancePayService, TradeDict.DTL_STATUS_FAIL) //流水置成功
-
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
-            }
-
-        }catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-// ============================================== //
-//
-//    @GetMapping("/account/payinit")
-//    fun accountPayInit(userid: String, amount: Int, manageFee: Int): ResponseEntity<Any> {
-//        val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-//                .setTransDatetime("20190411", "112311")
-//                .enableOverdraft(false)
-//                .addDetail(AccountHolder.person(userid),
-//                        AccountHolder.shop("12323"),
-//                        amount / 100.0, "")
-//                .addDetail(AccountHolder.person(userid), AccountHolder.transType(301),
-//                        manageFee / 100.0, "")
-//                .done(personBalancePayService, false)
-//
-//        return ResponseEntity.ok(dtl)
-//    }
-//
-//    @GetMapping("/account/payfinish")
-//    fun accountPayFinish(refno: String): ResponseEntity<Any> {
-//        val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-//                .done(refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService)
-//        return ResponseEntity.ok(dtl)
-//    }
-
-
-
-//
-//    /**
-//     * 微信支付
-//     * wechattype
-//     * qrcode-扫微信二维码支付
-//     * app-原生app微信支付
-//     * mp-微信公众号支付
-//     * h5-微信h5支付
-//     *
-//     * */
-//    @PostMapping("/wechat/payinit")
-//    fun wechatPayInit(userid: String, amount: Int, manageFee: Int,
-//                      stuempno: String, shopid: String, transdate: String, transtime: String,
-//                      outtradeno: String, payinfo: String, feetype: String,
-//                      wechattype: String, realip: String?, qrcode: String?, openid: String?): ResponseEntity<Any> {
-//        return try {
-//            val paytype = paytypeService.getByPaytype(PaytypeUtil.WECHAT)
-//            if (paytype == null || ConstantUtil.ENABLE_YES != paytype.enable) {
-//                ResponseEntity.ok(ResponseBodyBuilder.create()
-//                        .fail(1, "支付方式未开启"))
-//            }
-//            val person = userService.findByThirdUniqueIdenty(stuempno)
-//            val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
-//                    .setTransDatetime(transdate, transtime)
-//                    .selectPaytype(PaytypeUtil.WECHAT, payinfo)
-//                    .setOuttradeno(outtradeno)
-//                    .also {
-//                        if (null != person) it.setOwner(person)
-//                    }
-//                    .tryLock(true)
-//                    .setTransinfo(TradeCode.TRANSCODE_WECHAT, "微信支付")
-//                    .chooseTradetype(Tradetype.CONSUME)
-//                    .also {
-//                        when (feetype) {
-//                            TradeDict.FEETYPE_CONSUME_MEALER -> {
-//                                it.addDetail(AccountHolder.subject(Subject.SUBJNO_PAY_WECHAT),
-//                                        AccountHolder.shop(shopid),
-//                                        amount / 100.0, "微信支付")
-//                                        .addDetail(AccountHolder.transType(TranstypeCode.TT_CONSUUME_MANAGE_FEE)
-//                                                .with(AccountHolder.shop(shopid)),
-//                                                manageFee / 100.0)
-//                            }
-//                            TradeDict.FEETYPE_CONSUME_DISCOUNT -> {
-//                                it.addDetail(AccountHolder.subject(Subject.SUBJNO_PAY_WECHAT),
-//                                        AccountHolder.shop(shopid),
-//                                        (amount - manageFee) / 100.0, "微信支付")
-//                                        .addDetail(AccountHolder.subject(Subject.SUBJNO_CONSUME_DISCOUNT),
-//                                                AccountHolder.shop(shopid),
-//                                                manageFee / 100.0, "优惠折扣")
-//                            }
-//                            else -> {
-//                                it.addDetail(AccountHolder.subject(Subject.SUBJNO_PAY_WECHAT),
-//                                        AccountHolder.shop(shopid),
-//                                        amount / 100.0, "微信支付")
-//                            }
-//                        }
-//                    }.done(personBalancePayService, false)
-//            val code = CallService.callWechatPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.WECHAT),
-//                    dtl, DateUtil.getNow(), wechattype, realip, qrcode, openid)
-//            if (code.retcode == "0") {
-//                ResponseEntity.ok(ResponseBodyBuilder.create()
-//                        .data("refno", dtl.refno)
-//                        .success())
-//            } else {
-//                ResponseEntity.ok(ResponseBodyBuilder.create()
-//                        .fail(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易请求失败-${code.retcode}"))
-//            }
-//        } catch (e: TransactionException) {
-//            ResponseEntity.ok(ResponseBodyBuilder.create()
-//                    .transException(e, "交易初始化异常"))
-//        }
-//    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
deleted file mode 100644
index fe3d1a6..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/notify_api_controller.kt
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.supwisdom.dlpay.api.controller
-
-import com.supwisdom.dlpay.api.PersonTransBuilder
-import com.supwisdom.dlpay.api.service.AccountUtilServcie
-import com.supwisdom.dlpay.api.service.PaytypeService
-import com.supwisdom.dlpay.api.service.PersonBalancePayService
-import com.supwisdom.dlpay.framework.util.MD5
-import com.supwisdom.dlpay.framework.util.StringUtil
-import com.supwisdom.dlpay.framework.util.TradeDict
-import com.supwisdom.dlpay.framework.util.XmlUtils
-import com.supwisdom.dlpay.util.PaytypeUtil
-import org.dom4j.io.SAXReader
-import org.slf4j.LoggerFactory
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.util.StringUtils
-import org.springframework.web.bind.annotation.PathVariable
-import org.springframework.web.bind.annotation.RequestMapping
-import org.springframework.web.bind.annotation.ResponseBody
-import org.springframework.web.bind.annotation.RestController
-import java.util.HashMap
-import javax.servlet.http.HttpServletRequest
-import javax.servlet.http.HttpServletResponse
-
-/**
- * Created by shuwei on 2019/4/22.
- */
-@RestController
-@RequestMapping("/api/notify")
-class NotifyController {
-    private val logger = LoggerFactory.getLogger(NotifyController::class.java)
-    @Autowired
-    lateinit var personBalancePayService: PersonBalancePayService
-    @Autowired
-    lateinit var paytypeService: PaytypeService
-    @Autowired
-    lateinit var accountUtilServcie: AccountUtilServcie
-
-    @RequestMapping(value = "/wechat")
-    @ResponseBody
-    fun index(@PathVariable schema: String, request: HttpServletRequest,
-              response: HttpServletResponse): String {
-        try {
-            // 解析结果存储在HashMap
-            var map: MutableMap<String, String> = HashMap()
-            val inputStream = request.inputStream
-            // 读取输入流
-            val reader = SAXReader()
-            val document = reader.read(inputStream)
-            // 得到xml根元素
-            val root = document.rootElement
-            // 得到根元素的所有子节点
-            val elementList = root.elements()
-            // 遍历所有子节点
-         /*   for (e in elementList) {
-                map[e.name] = e.text
-                logger.error("*************" + e.name + "=" + e.text + "************************")
-            }*/
-            // 释放资源
-            inputStream.close()
-
-            val sign = map["sign"]
-            if (StringUtils.isEmpty(sign)) {
-                logger.error("签名错误")
-                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名错误]]></return_msg></xml>"
-            }
-            map = StringUtil.paraFilter(map)
-            //TODO 校验签名
-            var signStr = StringUtil.createLinkString(map)
-            val config = paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.WECHAT)
-            if (config["appkey"].isNullOrEmpty()) {
-                logger.error("签名错误")
-                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名错误]]></return_msg></xml>"
-            }
-            val key = config["appkey"]
-            signStr += "&key=$key"
-            val signRet = MD5.encodeByMD5(signStr)
-            logger.error("*******signStr=$signStr")
-            if (!signRet.equals(sign, ignoreCase = true)) {
-                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[签名失败]]></return_msg></xml>"
-            }
-            logger.error("*******signRet=$signRet,sign=$sign*****************")
-            val return_code = map["return_code"]
-            val result_code = map["result_code"]
-            val out_trade_no = map["out_trade_no"]
-            if (StringUtils.isEmpty(out_trade_no)) {
-                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[订单信息错误]]></return_msg></xml>"
-            }
-            if (!StringUtils.isEmpty(return_code) && "SUCCESS" == return_code
-                    && !StringUtils.isEmpty(result_code) && "SUCCESS" == result_code) {
-                //map.get("transaction_id") 第三方流水号
-                PersonTransBuilder.newBuilder(accountUtilServcie)
-                        .setRefno(out_trade_no!!)
-                        .addResult(map)
-                        .success(personBalancePayService)
-            }
-            return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>"
-        } catch (e: Exception) {
-            e.printStackTrace()
-            logger.error("------------step7----------------" + e.message)
-            return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[解析失败]]></return_msg></xml>"
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
deleted file mode 100644
index 5f92a0c..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/shop_api_controller.kt
+++ /dev/null
@@ -1,83 +0,0 @@
-package com.supwisdom.dlpay.api.controller
-
-import com.supwisdom.dlpay.api.bean.OpenShopParam
-import com.supwisdom.dlpay.api.bean.QueryShopParam
-import com.supwisdom.dlpay.framework.ResponseBodyBuilder
-import com.supwisdom.dlpay.api.service.ShopService
-import com.supwisdom.dlpay.exception.RequestParamCheckException
-import com.supwisdom.dlpay.exception.TransactionException
-import com.supwisdom.dlpay.framework.service.CommonService
-import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.http.ResponseEntity
-import org.springframework.web.bind.annotation.*
-import java.net.URLDecoder
-import javax.servlet.http.HttpServletRequest
-import javax.servlet.http.HttpServletResponse
-
-@RestController
-@RequestMapping("/api/shop")
-class ShopAPIController {
-    @Autowired
-    private lateinit var shopService: ShopService
-    @Autowired
-    private lateinit var commonService: CommonService
-
-    @PostMapping("/open")
-    fun openAccount(@RequestBody param: OpenShopParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-            shopService.findByThirdUniqueId(param.shopUniqueId)?.let {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.BUSINESS_SHOP_EXISTS, "该商户唯一号[${param.shopUniqueId}]已经存在"))
-            }
-
-            param.shopname = param.shopname?.let { URLDecoder.decode(param.shopname, Charsets.UTF_8.toString()) } //解码
-            param.contactman = param.contactman?.let { URLDecoder.decode(param.contactman, Charsets.UTF_8.toString()) } //解码
-            param.address = param.address?.let { URLDecoder.decode(param.address, Charsets.UTF_8.toString()) } //解码
-            shopService.registerShop(param)?.let {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("shopid", it.shopid)
-                        .data("shopaccno", it.shopaccno ?: "")
-                        .success("注册成功"))
-            }
-
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "商户注册失败"))
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-    @GetMapping("/query")
-    fun queryShop(@RequestBody param: QueryShopParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            shopService.findByShopBySearch(param.shopid, param.shopaccno, param.shopUniqueId)?.let {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("shop", it)
-                        .success())
-            }
-
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.SHOP_NOT_EXISTS, "商户不存在"))
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
deleted file mode 100644
index 5b838e4..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ /dev/null
@@ -1,146 +0,0 @@
-package com.supwisdom.dlpay.api.controller
-
-import com.supwisdom.dlpay.api.bean.ModifyUserParam
-import com.supwisdom.dlpay.api.bean.OpenUserParam
-import com.supwisdom.dlpay.api.bean.QueryUserParam
-import com.supwisdom.dlpay.api.service.UserService
-import com.supwisdom.dlpay.exception.RequestParamCheckException
-import com.supwisdom.dlpay.exception.TransactionException
-import com.supwisdom.dlpay.framework.ResponseBodyBuilder
-import com.supwisdom.dlpay.framework.service.CommonService
-import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.http.ResponseEntity
-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 java.net.URLDecoder
-import javax.servlet.http.HttpServletRequest
-import javax.servlet.http.HttpServletResponse
-
-@RestController
-@RequestMapping("/api/user")
-class UserAPIController {
-    @Autowired
-    private lateinit var useService: UserService
-    @Autowired
-    private lateinit var commonService: CommonService
-
-    @PostMapping("/open")
-    fun openAccount(@RequestBody param: OpenUserParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-            useService.findByThirdUniqueIdenty(param.uid).let {
-                if (null != it) {
-                    ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(TradeErrorCode.REGISTER_USER_EXIST, "改用户唯一号已经注册"))
-                }
-
-                param.name = URLDecoder.decode(param.name, Charsets.UTF_8.toString()) //解码
-                param.address = param.address?.let { URLDecoder.decode(param.address, Charsets.UTF_8.toString()) }  //解码
-                useService.registerUser(param).let {
-                    if (null != it) {
-                        ResponseEntity.ok(ResponseBodyBuilder.create()
-                                .data("userid", it.userid)
-                                .data("uid", param.uid)
-                                .success())
-                    }
-
-                    ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "用户注册失败"))
-                }
-            }
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-    @PostMapping("/query")
-    fun queryAccount(@RequestBody param: QueryUserParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-
-            useService.findByUseridOrThirdUniqueIdenty(param.userid, param.uid).let {
-                if (null != it) {
-                    val account = useService.findAccountByUserid(it.userid, null)
-                    val pointacc = useService.findPointsAccountByUserid(it.userid)
-                    ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .data("userid", it.userid)
-                            .data("name", it.name)
-                            .data("idtype", it.idtype)
-                            .data("idno", it.idno)
-                            .data("mobile", it.mobile)
-                            .data("email", it.email)
-                            .data("status", it.status)
-                            .data("balance", account.let {
-                                if (null == it) {
-                                    0.0
-                                } else {
-                                    it.availbal
-                                }
-                            }) //账户余额
-                            .data("points", pointacc.let {
-                                if (null == it) {
-                                    0
-                                } else {
-                                    it.points
-                                }
-                            }) //积分
-                            .success())
-                }
-
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户不存在"))
-            }
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-    @PostMapping("/modify")
-    fun modifyAccount(@RequestBody param: ModifyUserParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
-        return try {
-            if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
-                ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
-            }
-            useService.findByUseridOrThirdUniqueIdenty(param.userid, param.uid)?.let {
-                param.name = param.name?.let { URLDecoder.decode(param.name, Charsets.UTF_8.toString()) } //解码
-                param.address = param.address?.let { URLDecoder.decode(param.address, Charsets.UTF_8.toString()) } //解码
-                if (useService.modifyUserInfo(it, param)) {
-                    ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .success("修改成功"))
-                } else {
-                    ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "账户信息修改失败"))
-                }
-            }
-
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户不存在"))
-        } catch (ex: RequestParamCheckException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .requestException(ex, "请求参数错误"))
-        } catch (et: TransactionException) {
-            ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .transException(et, "业务处理错误"))
-        }
-    }
-
-
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/common_api_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/common_api_service.kt
new file mode 100644
index 0000000..3da2af8
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/common_api_service.kt
@@ -0,0 +1,9 @@
+package com.supwisdom.dlpay.api.service
+
+import com.supwisdom.dlpay.restaurant.domain.TDevice
+
+interface CommonApiService {
+
+    fun getDeviceByDevphyid(devphyid: String): TDevice
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/consume_pay_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/consume_pay_service.kt
deleted file mode 100644
index 54d8475..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/consume_pay_service.kt
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.supwisdom.dlpay.api.service
-
-import org.springframework.transaction.annotation.Propagation
-import org.springframework.transaction.annotation.Transactional
-
-interface ConsumePayService{
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun checkShopPaytype(shopaccno: String, paytype: String, anonymousflag: Boolean? = false): Boolean
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun getPaytypeConfig(paytype: String, shopaccno: String, anonymousflag: Boolean? = false, ignoreStatus: Boolean? = false): Map<String, String?>
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun getUserdtlExtendParamMap(refno: String): Map<String, String>
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/Consume_pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/Consume_pay_service_impl.kt
deleted file mode 100644
index 3c40253..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/Consume_pay_service_impl.kt
+++ /dev/null
@@ -1,99 +0,0 @@
-package com.supwisdom.dlpay.api.service.impl
-
-import com.supwisdom.dlpay.api.dao.PaytypeDao
-import com.supwisdom.dlpay.api.dao.ShopPaytypeConfigDao
-import com.supwisdom.dlpay.api.dao.ShopPaytypeDao
-import com.supwisdom.dlpay.api.dao.UserdtlBusinessDao
-import com.supwisdom.dlpay.api.domain.TUserdtlBusiness
-import com.supwisdom.dlpay.api.service.ConsumePayService
-import com.supwisdom.dlpay.exception.TransactionProcessException
-import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import com.supwisdom.dlpay.util.ConstantUtil
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Service
-
-@Service
-class ConsumePayServiceImpl: ConsumePayService{
-    @Autowired
-    lateinit var paytypeDao: PaytypeDao
-    @Autowired
-    lateinit var shopPaytypeDao: ShopPaytypeDao
-    @Autowired
-    lateinit var shopPaytypeConfigDao: ShopPaytypeConfigDao
-    @Autowired
-    lateinit var userdtlBusinessDao: UserdtlBusinessDao
-
-    override fun checkShopPaytype(shopaccno: String, paytype: String, anonymousflag: Boolean?): Boolean{
-        paytypeDao.getByPaytype(paytype).let {
-            if (null == it) {
-                throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "系统不支持支付方式[$paytype]")
-            } else {
-                if (ConstantUtil.ENABLE_YES != it.enable || ConstantUtil.ENABLE_YES != it.consumeEnable) {
-                    throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "系统未启用支付方式[$paytype]消费")
-                }
-                if (true == anonymousflag && ConstantUtil.ENABLE_YES != it.anonymousEnable) {
-                    throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "系统支付方式[$paytype]未启用匿名消费")
-                }
-            }
-        }
-        shopPaytypeDao.getById(paytype, shopaccno).let {
-            if (null == it) {
-                throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]未启用支付方式[$paytype]")
-            } else {
-                if (ConstantUtil.ENABLE_YES != it.consumeEnable) {
-                    throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]未启用支付方式[$paytype]")
-                }
-                if (true == anonymousflag && ConstantUtil.ENABLE_YES != it.anonymousEnable) {
-                    throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]的支付方式[$paytype]未启用匿名消费")
-                }
-            }
-        }
-        return true
-    }
-
-    override fun getPaytypeConfig(paytype: String, shopaccno: String, anonymousflag: Boolean?, ignoreStatus: Boolean?): Map<String, String?> {
-        paytypeDao.getByPaytype(paytype).let {
-            if (null == it) {
-                throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "系统不支持支付方式[$paytype]")
-            } else {
-                //对账取配置时不关心状态,不能报错
-                if (true != ignoreStatus && (ConstantUtil.ENABLE_YES != it.enable || ConstantUtil.ENABLE_YES != it.consumeEnable)) {
-                    throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "系统未启用支付方式[$paytype]消费")
-                }
-                if (true != ignoreStatus && true == anonymousflag && ConstantUtil.ENABLE_YES != it.anonymousEnable) {
-                    throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "系统支付方式[$paytype]未启用匿名消费")
-                }
-            }
-        }
-
-        shopPaytypeDao.getById(paytype, shopaccno).let {
-            if (null == it) {
-                throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]未启用支付方式[$paytype]")
-            } else {
-                //对账取配置时不关心状态,不能报错
-                if (true != ignoreStatus && ConstantUtil.ENABLE_YES != it.consumeEnable) {
-                    throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]未启用支付方式[$paytype]")
-                }
-                if (true != ignoreStatus && true == anonymousflag && ConstantUtil.ENABLE_YES != it.anonymousEnable) {
-                    throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]的支付方式[$paytype]未启用匿名消费")
-                }
-            }
-        }
-
-        shopPaytypeConfigDao.getShopPaytypeConfigs(paytype, shopaccno)?.let {
-            if (it.size < 1) {
-                throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]的支付方式[$paytype]未配置参数")
-            } else {
-                val result = mutableMapOf<String, String?>()
-                it.forEach { result.plus(mapOf(it.configid to it.configValue)) }
-                return result
-            }
-        } ?: throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "该商户[$shopaccno]的支付方式[$paytype]未配置参数")
-    }
-
-    override fun getUserdtlExtendParamMap(refno: String): Map<String, String> {
-        return userdtlBusinessDao.getByRefno(refno)?.let {
-            it.contentMap
-        } ?: mutableMapOf<String, String>()
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/common_api_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/common_api_service_impl.kt
new file mode 100644
index 0000000..1e4d557
--- /dev/null
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/common_api_service_impl.kt
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.api.service.impl
+
+import com.supwisdom.dlpay.api.service.CommonApiService
+import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.restaurant.dao.DeviceDao
+import com.supwisdom.dlpay.restaurant.domain.TDevice
+import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.stereotype.Service
+
+@Service
+class CommonApiServiceImpl : CommonApiService {
+    @Autowired
+    lateinit var deviceDao: DeviceDao
+
+    override fun getDeviceByDevphyid(devphyid: String): TDevice {
+        return deviceDao.findByDevphyid(devphyid)
+                ?: throw TransactionProcessException(TradeErrorCode.POS_NOT_EXISTS, "设备[$devphyid]不存在")
+    }
+
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
deleted file mode 100644
index a322f11..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/pay_service_impl.kt
+++ /dev/null
@@ -1,335 +0,0 @@
-package com.supwisdom.dlpay.api.service.impl
-
-import com.supwisdom.dlpay.api.PersonTransBuilder
-import com.supwisdom.dlpay.api.dao.AccountDao
-import com.supwisdom.dlpay.api.dao.DebitCreditDtlDao
-import com.supwisdom.dlpay.api.dao.UserdtlBusinessDao
-import com.supwisdom.dlpay.api.dao.UserdtlDao
-import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TDebitCreditDtl
-import com.supwisdom.dlpay.api.domain.TUserdtl
-import com.supwisdom.dlpay.api.domain.TUserdtlBusiness
-import com.supwisdom.dlpay.api.service.AccountUtilServcie
-import com.supwisdom.dlpay.api.service.PersonBalancePayService
-import com.supwisdom.dlpay.exception.TransactionException
-import com.supwisdom.dlpay.exception.TransactionProcessException
-import com.supwisdom.dlpay.framework.dao.*
-import com.supwisdom.dlpay.framework.domain.TFeetypeConfig
-import com.supwisdom.dlpay.framework.domain.TShopacc
-import com.supwisdom.dlpay.framework.domain.TSubject
-import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.*
-import org.hibernate.exception.LockTimeoutException
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.dao.CannotAcquireLockException
-import org.springframework.stereotype.Service
-import javax.persistence.EntityManager
-import javax.persistence.PersistenceContext
-
-
-@Service
-class AccountUtilServcieImpl : AccountUtilServcie {
-
-    @Autowired
-    lateinit var accountDao: AccountDao
-
-    @Autowired
-    lateinit var shopaccDao: ShopaccDao
-
-    @Autowired
-    lateinit var subjectDao: SubjectDao
-
-    @Autowired
-    lateinit var feetypeConfigDao: FeetypeConfigDao
-
-    override fun readAccountForUpdateNowait(userid: String): TAccount {
-        return try {
-            accountDao.getByUseridForUpdateNowait(userid)
-                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户<$userid>不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "账户<$userid>交易繁忙,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-
-    override fun readAccount(userid: String): TAccount {
-        return accountDao.findByUserid(userid)
-                ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户<$userid>不存在")
-    }
-
-    override fun readShopAcc(shopId: Int): TShopacc {
-        return shopaccDao.findByShopid(shopId)
-                ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户<$shopId>不存在")
-    }
-
-    override fun readSubject(subjno: String): TSubject {
-        return subjectDao.findBySubjno(subjno)
-                ?: throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在")
-    }
-
-    override fun readFeetype(feetype: String, paytype: String): TFeetypeConfig {
-        return feetypeConfigDao.getById(feetype, paytype)
-                ?: throw TransactionProcessException(TradeErrorCode.FEETYPE_NOT_EXISTS, "在支付方式<$paytype>下不存在费用类别<$feetype>")
-    }
-}
-
-@Service
-class PersonBalancePayServiceImpl : PersonBalancePayService {
-    @Autowired
-    lateinit var userdtlDao: UserdtlDao
-    @Autowired
-    lateinit var debitCreditDtlDao: DebitCreditDtlDao
-
-    @Autowired
-    lateinit var accountDao: AccountDao
-
-    @Autowired
-    lateinit var userdtlBusinessDao: UserdtlBusinessDao
-
-    @PersistenceContext
-    lateinit var em: EntityManager
-
-    @Autowired
-    lateinit var systemUtilService: SystemUtilService
-
-
-    private fun getlockAccount(accno: String): TAccount {
-        return accountDao.getByAccnoForUpdate(accno)
-                ?: throw throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账号<$accno>不存在")
-    }
-
-    private fun getlockAccountNowait(accno: String): TAccount {
-        return try {
-            accountDao.getByAccnoForUpdateNowait(accno)
-                    ?: throw throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账号<$accno>不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "账号<$accno>交易繁忙,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-
-    private fun getLockUserdtlNowait(refno: String): TUserdtl {
-        return try {
-            userdtlDao.findByRefnoForUpdateNowait(refno)
-                    ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.LOCK_READ_TIMEOUT, "交易参考号<$refno>流水被锁定,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-
-    private fun getLockUserdtl(refno: String): TUserdtl {
-        return userdtlDao.findByRefnoForUpdate(refno)
-                ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "交易参考号<$refno>不存在")
-    }
-
-    private fun doDealAccount(accno: String, amount: Double, overdraft: Boolean): TAccount {
-        val account = getlockAccount(accno)
-        if (account.tacCheck())
-            throw TransactionProcessException(TradeErrorCode.ACCOUNT_TAC_ERROR, "账户<$accno>tac校验异常")
-
-        account.addAmount(amount) //入账
-        if (account.checkOverflow())
-            throw TransactionProcessException(TradeErrorCode.OVERFLOW_BALANCE_ERROR, "账户<$accno>已超最大余额限制")
-
-        if (!overdraft && account.checkOverdraft())
-            throw TransactionProcessException(TradeErrorCode.SHORT_BALANCE_ERROR, "账户<$accno>余额不足")
-
-        return accountDao.save(account) //入库更新
-    }
-
-    private fun doDealShopacc(shopaccno: String, amount: Double) {
-        return
-    }
-
-    override fun process(builder: PersonTransBuilder): TUserdtl {
-        return finish(init(builder), TradeDict.DTL_STATUS_SUCCESS, builder.resultMap)
-    }
-
-    override fun init(builder: PersonTransBuilder): TUserdtl {
-        //判断第三方流水号重复  标准:shopaccno + outtradeno 唯一?
-        var userdtl = userdtlDao.findByOuttradenoAndShopaccno(builder.outtradeno, builder.shopaccno) //加锁?
-        if (null != userdtl) {
-            if (TradeDict.DTL_STATUS_INIT != userdtl.status) {
-                throw TransactionProcessException(TradeErrorCode.OUTTRADENO_ALREADY_EXISTS, "外部流水号重复") //非初始化状态,直接报错
-            }
-            //fixme: 判断是同一笔交易重发(标准??)  是->已初始化直接返回;否 -> 报错:外部流水号重复
-            if(builder.amount == userdtl.amount && builder.paytype == userdtl.paytype && builder.transDate == userdtl.transdate && builder.transTime==userdtl.transtime){
-                return userdtl // 交易日期,时间重发时是否会变??
-            }else{
-                throw TransactionProcessException(TradeErrorCode.OUTTRADENO_ALREADY_EXISTS, "外部流水号重复")
-            }
-        }
-
-        userdtl = TUserdtl() // 新建流水
-        userdtl.refno = systemUtilService.refno
-        userdtl.accdate = systemUtilService.accdate
-        userdtl.userid = builder.person.userid
-        if (StringUtil.isEmpty(builder.transDate)) {
-            userdtl.transdate = systemUtilService.sysdatetime.hostdate
-        } else {
-            userdtl.transdate = builder.transDate
-        }
-        if (StringUtil.isEmpty(builder.transTime)) {
-            userdtl.transdate = systemUtilService.sysdatetime.hosttime
-        } else {
-            userdtl.transtime = builder.transTime
-        }
-        userdtl.paytype = builder.paytype
-        userdtl.payinfo = builder.payinfo
-        userdtl.transcode = builder.transcode
-        if (StringUtil.isEmpty(builder.description)) {
-            userdtl.transdesc = systemUtilService.getTranscodeName(builder.transcode, null)
-        } else {
-            userdtl.transdesc = builder.description
-        }
-        userdtl.outtradeno = builder.outtradeno
-        userdtl.shopaccno = builder.shopaccno
-//        userdtl.operid =
-        when (builder.tradetype) {
-            Tradetype.RECHARGE -> userdtl.tradeflag = 1
-            Tradetype.CONSUME -> userdtl.tradeflag = 2
-        }
-        userdtl.createtime = systemUtilService.sysdatetime.hostdatetime
-
-        userdtl.amount = builder.amount
-        userdtl.status = TradeDict.DTL_STATUS_INIT
-        userdtlDao.save(userdtl)
-
-        builder.details.forEach {
-            TDebitCreditDtl().apply {
-                refno = userdtl.refno
-                seqno = it.rowno
-                drsubjno = it.debitSubjNo
-                draccno = it.debitAccNo
-                crsubjno = it.creditSubjNo
-                craccno = it.creditAccNo
-                amount = it.amount
-                summary = it.summary
-                debitCreditDtlDao.save(this)
-            }
-        }
-
-        if(builder.extendMap.isNotEmpty()){
-            userdtlBusinessDao.save(TUserdtlBusiness(userdtl.refno, builder.extendMap)) //保存参数
-        }
-
-        return userdtl
-    }
-
-    override fun finish(paydtl: TUserdtl, status: String, businessData: Map<String, String>?): TUserdtl {
-        return finish(paydtl.refno, status, businessData)
-    }
-
-    private fun fail(userdtl: TUserdtl, businessData: Map<String, String>?) {
-        //失败
-        if (TradeDict.DTL_STATUS_SUCCESS == userdtl.status)
-            throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水已经交易成功")
-        userdtl.status = TradeDict.DTL_STATUS_FAIL
-        userdtl.endtime = systemUtilService.sysdatetime.hostdatetime
-        userdtl.remark = businessData?.get("errmsg")
-        userdtlDao.save(userdtl)
-    }
-
-    private fun success(userdtl: TUserdtl, businessData: Map<String, String>?) {
-        if (TradeDict.DTL_STATUS_SUCCESS == userdtl.status) {
-            return
-        }
-        //TODO 校验已经成功的流水,不重复入账
-        debitCreditDtlDao.findByRefno(userdtl.refno).forEach { detail ->
-            //个人账户入账
-            if (Subject.SUBJNO_PERSONAL_DEPOSIT == detail.drsubjno) {
-                doDealAccount(detail.draccno, -1 * detail.amount, false) //借方消费
-            }
-            if (Subject.SUBJNO_PERSONAL_DEPOSIT == detail.crsubjno) {
-                doDealAccount(detail.craccno, detail.amount, false) //贷方充值
-            }
-
-            //商户入账
-            if (Subject.SUBJNO_MACHANT_INCOME == detail.drsubjno) {
-                doDealShopacc(detail.draccno, -1 * detail.amount)
-            }
-            if (Subject.SUBJNO_MACHANT_INCOME == detail.crsubjno) {
-                doDealShopacc(detail.craccno, detail.amount)
-            }
-        }
-
-        userdtl.status = TradeDict.DTL_STATUS_SUCCESS
-        userdtl.accdate = systemUtilService.accdate //入账成功时更新
-        userdtl.endtime = systemUtilService.sysdatetime.hostdatetime
-        //TODO 存储一些业务参数
-        userdtlDao.save(userdtl)
-    }
-
-    override fun finish(refno: String, status: String, businessData: Map<String, String>?): TUserdtl {
-        val userdtl = getLockUserdtl(refno)
-        return when (status) {
-            TradeDict.DTL_STATUS_FAIL -> {
-                fail(userdtl, businessData)
-                userdtl
-            }
-            TradeDict.DTL_STATUS_SUCCESS -> {
-                //成功
-                success(userdtl, businessData)
-                userdtl
-            }
-            else -> throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR, "未指定明确的交易结束状态")
-        }
-    }
-
-    override fun wip(paydtl: TUserdtl): TUserdtl {
-        return wip(paydtl.refno)
-    }
-
-    override fun wip(refno: String): TUserdtl {
-        val userdtl = getLockUserdtlNowait(refno)
-        if (TradeDict.DTL_STATUS_WIP == userdtl.status) {
-            return userdtl
-        }
-
-        if (TradeDict.DTL_STATUS_INIT != userdtl.status) {
-            throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_NOT_INIT,
-                    "交易参考号<$refno>非初始化流水")
-        }
-        userdtl.status = TradeDict.DTL_STATUS_WIP  //待支付
-        return userdtlDao.save(userdtl)
-    }
-
-    override fun wip(builder: PersonTransBuilder): TUserdtl {
-        return wip(builder.refno)
-    }
-
-    override fun finish(builder: PersonTransBuilder): TUserdtl{
-        return finish(builder.refno, builder.status, builder.resultMap)
-    }
-
-    override fun getUserdtlForUpdateNowait(refno: String): TUserdtl{
-        return try {
-            userdtlDao.findByRefnoForUpdateNowait(refno)
-                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "交易参考号<$refno>流水不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "流水<$refno>被锁定,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-
-    override fun getUserdtlByBillnoForUpdateNowait(billno: String, shopaccno: String): TUserdtl {
-        return try {
-            userdtlDao.findByBillnoForUpdateNowait(billno, shopaccno)
-                    ?: throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "商户流水号<$billno>流水不存在")
-        } catch (ex: Exception) {
-            when (ex) {
-                is CannotAcquireLockException, is LockTimeoutException -> throw TransactionException(TradeErrorCode.ACCOUNT_TRADE_BUSY, "商户流水号<$billno>流水被锁定,请稍后再试")
-                else -> throw ex
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
deleted file mode 100644
index 07c6c40..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/shop_service_impl.kt
+++ /dev/null
@@ -1,94 +0,0 @@
-package com.supwisdom.dlpay.api.service.impl
-
-import com.supwisdom.dlpay.api.bean.OpenShopParam
-import com.supwisdom.dlpay.framework.dao.ShopDao
-import com.supwisdom.dlpay.framework.dao.ShopaccDao
-import com.supwisdom.dlpay.framework.domain.TShop
-import com.supwisdom.dlpay.framework.domain.TShopacc
-import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.framework.util.Subject
-import com.supwisdom.dlpay.api.service.ShopService
-import com.supwisdom.dlpay.exception.TransactionProcessException
-import com.supwisdom.dlpay.framework.util.StringUtil
-import com.supwisdom.dlpay.framework.util.TradeDict
-import com.supwisdom.dlpay.framework.util.TradeErrorCode
-import com.supwisdom.dlpay.util.ConstantUtil
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Service
-
-/**
- * Created by shuwei on 2019/4/15.
- */
-@Service
-class ShopServiceImpl : ShopService {
-    @Autowired
-    private lateinit var shopDao: ShopDao
-    @Autowired
-    private lateinit var shopaccDao: ShopaccDao
-    @Autowired
-    private lateinit var systemUtilService: SystemUtilService
-
-    override fun findByThirdUniqueId(uniqueId: String): TShop? {
-       return shopDao.getByThirdUniqueIdenty(uniqueId)
-    }
-
-    override fun registerShop(param: OpenShopParam): TShop {
-        val systemdatetime = systemUtilService.sysdatetime
-        var shop = shopDao.getByThirdUniqueIdentyForUpdate(param.shopUniqueId)
-        if (null != shop) {
-            throw TransactionProcessException(TradeErrorCode.BUSINESS_SHOP_EXISTS, "该商户唯一号[${param.shopUniqueId}]已经存在")
-        }
-        if (null != param.fshopid) {
-            shopDao.getTShopByShopid(param.fshopid).let {
-                if (null == it) {
-                    throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "上级商户不存在已经存在")
-                }
-            }
-        }
-        shop = shopDao.save(TShop().apply {
-            fshopid = param.fshopid
-            shopname = param.shopname
-            shoptype = param.shoptype
-            status = TradeDict.STATUS_NORMAL
-            contactman = param.contactman
-            idtype = param.idtype
-            idno = param.idno
-            mobile = param.mobile
-            email = param.email
-            addr = param.address
-            zipcode = param.zipcode
-            opendate = systemdatetime.hostdate
-            thirdUniqueIdenty = param.shopUniqueId
-        })
-        if (ConstantUtil.SHOPTYPE_GROUP != shop.shoptype) {
-            //非商户组要创建账号
-            val shopaccno = String.format("2%09d", shop.shopid)
-            shopaccDao.save(TShopacc().apply {
-                this.shopaccno = shopaccno
-                this.shopid = shop.shopid
-                this.shopname = shop.shopname
-                this.subjno = Subject.SUBJNO_MACHANT_INCOME
-                this.status = TradeDict.STATUS_NORMAL
-                this.opendate = shop.opendate
-            })
-            shop.shopaccno = shopaccno
-            shopDao.save(shop) //更新账号
-        }
-        return shop
-    }
-
-    override fun findByShopId(shopid: Int): TShop {
-        return shopDao.getTShopByShopid(shopid)
-                ?: throw TransactionProcessException(TradeErrorCode.SHOP_NOT_EXISTS, "商户[ID=$shopid]不存在")
-    }
-
-    override fun findByShopBySearch(shopid: Int?, shopaccno: String?, shopUniqueId: String?): TShop? {
-        return if (null != shopid) {
-            shopDao.getTShopByShopid(shopid)
-        } else if (!StringUtil.isEmpty(shopaccno)) {
-            shopDao.getTShopByShopaccno(shopaccno)
-        } else {
-            shopDao.getByThirdUniqueIdenty(shopUniqueId)
-        }
-    }
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
deleted file mode 100644
index fa30ada..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
+++ /dev/null
@@ -1,170 +0,0 @@
-package com.supwisdom.dlpay.api.service.impl
-
-import com.supwisdom.dlpay.api.bean.ModifyUserParam
-import com.supwisdom.dlpay.api.bean.OpenUserParam
-import com.supwisdom.dlpay.api.dao.AccountDao
-import com.supwisdom.dlpay.api.dao.PersonDao
-import com.supwisdom.dlpay.api.dao.PersonIdentityDao
-import com.supwisdom.dlpay.api.dao.PointsAccountDao
-import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TPerson
-import com.supwisdom.dlpay.api.domain.TPersonIdentity
-import com.supwisdom.dlpay.api.domain.TPointsAccount
-import com.supwisdom.dlpay.framework.service.SystemUtilService
-import com.supwisdom.dlpay.api.service.UserService
-import com.supwisdom.dlpay.exception.TransactionProcessException
-import com.supwisdom.dlpay.framework.util.*
-import org.springframework.beans.factory.annotation.Autowired
-import org.springframework.stereotype.Service
-
-/**
- * Created by shuwei on 2019/4/15.
- */
-@Service
-class UserServiceImpl : UserService {
-    @Autowired
-    private lateinit var personDao: PersonDao
-    @Autowired
-    private lateinit var accountDao: AccountDao
-    @Autowired
-    private lateinit var personIdentityDao: PersonIdentityDao
-    @Autowired
-    private lateinit var pointsAccountDao: PointsAccountDao
-    @Autowired
-    private lateinit var systemUtilService: SystemUtilService
-
-    override fun registerUser(param: OpenUserParam): TPerson {
-        var person = personDao.findByIdentity(param.idtype, param.idno)
-        if (null != person && param.name != person.name)
-            throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR, "证件指定用户与请求的用户名不匹配")
-
-        val systemdatetime = systemUtilService.sysdatetime
-        if (null == person) {
-            person = personDao.save(TPerson().apply {
-                name = param.name
-                sex = param.sex
-                status = TradeDict.STATUS_NORMAL
-                idtype = param.idtype
-                idno = param.idno
-                email = param.email
-                tel = param.tel
-                mobile = param.mobile
-                addr = param.address
-                zipcode = param.zipcode
-                lastsaved = systemdatetime.hostdatetime
-            })
-        }
-
-        if (accountDao.findByUseridAndSubjno(person.userid, Subject.SUBJNO_PERSONAL_DEPOSIT) == null) {
-            //开户
-            TAccount().apply {
-                accname = person.name
-                subjno = Subject.SUBJNO_PERSONAL_DEPOSIT
-                userid = person.userid
-                status = person.status
-                balance = 0.0
-                availbal = 0.0
-                frozebal = 0.0
-                lowfreeFlag = false
-                lowfreeLimit = lowfreeLimit
-                daylimit = daylimit
-                maxbal = systemUtilService.getSysparaValueAsDouble(SysparaUtil.SYSPARAID_NO1, SysparaUtil.SYSPARA_NO1_DEFAULT)
-                lasttransdate = systemdatetime.hostdate
-                lastdayTransamt = 0.0
-                lastdayDpsamt = 0.0
-                opendate = systemdatetime.hostdate
-                tac = this.generateTac()
-                accountDao.save(this)
-            }
-        }
-        personIdentityDao.save(TPersonIdentity().apply {
-            thirdUid = param.uid
-            this.person = person
-            status = person.status
-            lossflag = 0
-            lockflag = 0
-            createtime = systemdatetime.hostdatetime
-        }) //保存绑定关系
-
-        return person
-    }
-
-    override fun findByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson? {
-        return personIdentityDao.getByThirdUid(thirdUniqueIdenty)?.let { it.person }
-    }
-
-    override fun findByUseridOrThirdUniqueIdenty(userid: String?, thirdUniqueIdenty: String?): TPerson? {
-        return if (!StringUtil.isEmpty(userid)) {
-            personDao.findByUserid(userid)
-        } else {
-            personIdentityDao.getByThirdUid(thirdUniqueIdenty)?.let { it.person }
-        }
-    }
-
-    override fun modifyUserInfo(person: TPerson, param: ModifyUserParam): Boolean {
-        if (!StringUtil.isEmpty(param.name) && param.name != person.name) {
-            person.name = param.name
-            accountDao.findByUseridAndSubjno(person.userid, Subject.SUBJNO_PERSONAL_DEPOSIT)?.let {
-                it.accname = param.name
-                accountDao.save(it)
-            }
-        }
-        if (!StringUtil.isEmpty(param.sex)) person.sex = param.sex
-        if (!StringUtil.isEmpty(param.idno)) {
-            person.idtype = param.idtype
-            person.idno = param.idno
-        }
-        if (!StringUtil.isEmpty(param.mobile)) person.mobile = param.mobile
-        if (!StringUtil.isEmpty(param.tel)) person.tel = param.tel
-        if (!StringUtil.isEmpty(param.email)) person.email = param.email
-        if (!StringUtil.isEmpty(param.address)) person.addr = param.address
-        if (!StringUtil.isEmpty(param.zipcode)) person.zipcode = param.zipcode
-        personDao.save(person)
-        return true
-    }
-
-    override fun findPersonByUserid(userid: String): TPerson? {
-        return personDao.findByUserid(userid)
-    }
-
-    override fun findAccountByUserid(userid: String, subjno: String?): TAccount? {
-        return if (!StringUtil.isEmpty(subjno)) {
-            accountDao.findByUseridAndSubjno(userid, subjno)
-        } else {
-            accountDao.findByUseridAndSubjno(userid, Subject.SUBJNO_PERSONAL_DEPOSIT)
-        }
-    }
-
-    override fun findPointsAccountByUserid(userid: String): TPointsAccount? {
-        return pointsAccountDao.findByUserid(userid)
-    }
-
-    override fun findPersonIdentity(thirdUniqueIdenty: String): TPersonIdentity? {
-        return personIdentityDao.getByThirdUid(thirdUniqueIdenty)
-    }
-
-    override fun findPersonByIdentityCheckStatus(thirdUniqueIdenty: String): TPerson {
-        personIdentityDao.getByThirdUid(thirdUniqueIdenty).let {
-            if (null != it) {
-                if (TradeDict.STATUS_NORMAL != it.status) {
-                    throw TransactionProcessException(TradeErrorCode.PERSON_STATUS_ERROR, "账户状态异常")
-                }
-                if (1 == it.lossflag) {
-                    throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_LOSS, "账户已挂失")
-                }
-                if (1 == it.lockflag) {
-                    throw TransactionProcessException(TradeErrorCode.ACCOUNT_IS_LOCKED, "账户已冻结")
-                }
-
-                if (null != it.person) {
-                    return it.person
-                } else {
-                    throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户不存在")
-                }
-            }
-
-            throw TransactionProcessException(TradeErrorCode.ACCOUNT_NOT_EXISTS, "账户不存在")
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/pay_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/pay_service.kt
deleted file mode 100644
index 568d9bb..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/pay_service.kt
+++ /dev/null
@@ -1,73 +0,0 @@
-package com.supwisdom.dlpay.api.service
-
-import com.supwisdom.dlpay.api.PersonTransBuilder
-import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TUserdtl
-import com.supwisdom.dlpay.framework.domain.TFeetypeConfig
-import com.supwisdom.dlpay.framework.domain.TShopacc
-import com.supwisdom.dlpay.framework.domain.TSubject
-import com.supwisdom.dlpay.framework.domain.TTranstype
-import org.springframework.transaction.annotation.Propagation
-import org.springframework.transaction.annotation.Transactional
-
-interface AccountUtilServcie {
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun readAccountForUpdateNowait(userid: String): TAccount
-
-
-    fun readAccount(userid: String): TAccount
-
-    fun readShopAcc(shopId: Int): TShopacc
-
-    fun readSubject(subjno: String): TSubject
-
-    fun readFeetype(feetype: String, paytype: String): TFeetypeConfig
-}
-
-interface PersonBalancePayService {
-
-    /**
-     * 一步完成交易
-     */
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun process(builder: PersonTransBuilder): TUserdtl
-
-    /**
-     * 两步交易,交易初始化方法,检查交易参数,记录交易流水
-     */
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun init(builder: PersonTransBuilder): TUserdtl
-
-    /**
-     * 两步交易,完成交易过程,包括更新交易状态(成功、失败),更新借贷双方余额
-     */
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun finish(paydtl: TUserdtl, status: String, businessData: Map<String, String>?): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun finish(refno: String, status: String, businessData: Map<String, String>?): TUserdtl
-
-    /**
-     * 两步交易,交易过程中判断交易状态,并更新交易状态为 wip
-     * 如果交易记录被锁,立刻抛出异常
-     * @throws TransactionProcessException
-     */
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun wip(paydtl: TUserdtl): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun wip(refno: String): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun wip(builder: PersonTransBuilder): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun finish(builder: PersonTransBuilder): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun getUserdtlForUpdateNowait(refno: String): TUserdtl
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun getUserdtlByBillnoForUpdateNowait(billno: String, shopaccno: String): TUserdtl
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/shop_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/shop_service.kt
deleted file mode 100644
index 697bc11..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/shop_service.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.supwisdom.dlpay.api.service
-
-import com.supwisdom.dlpay.api.bean.OpenShopParam
-import com.supwisdom.dlpay.framework.domain.TShop
-import org.springframework.transaction.annotation.Propagation
-import org.springframework.transaction.annotation.Transactional
-
-/**
- * Created by shuwei on 2019/4/15.
- */
-interface ShopService {
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun registerShop(param: OpenShopParam): TShop
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findByThirdUniqueId(uniqueId: String): TShop?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findByShopId(shopid: Int): TShop
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findByShopBySearch(shopid: Int?, shopaccno: String?, shopUniqueId: String?): TShop?
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
deleted file mode 100644
index c4d9b20..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.supwisdom.dlpay.api.service
-
-import com.supwisdom.dlpay.api.bean.ModifyUserParam
-import com.supwisdom.dlpay.api.bean.OpenUserParam
-import com.supwisdom.dlpay.api.domain.TAccount
-import com.supwisdom.dlpay.api.domain.TPerson
-import com.supwisdom.dlpay.api.domain.TPersonIdentity
-import com.supwisdom.dlpay.api.domain.TPointsAccount
-import org.springframework.transaction.annotation.Propagation
-import org.springframework.transaction.annotation.Transactional
-
-/**
- * Created by shuwei on 2019/4/15.
- */
-interface UserService {
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
-    fun registerUser(param: OpenUserParam): TPerson
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findByThirdUniqueIdenty(thirdUniqueIdenty: String): TPerson?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findByUseridOrThirdUniqueIdenty(userid: String?, thirdUniqueIdenty: String?): TPerson?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun modifyUserInfo(person:TPerson,param: ModifyUserParam):Boolean
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findPersonByUserid(userid: String): TPerson?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findAccountByUserid(userid: String, subjno:String?): TAccount?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findPointsAccountByUserid(userid: String): TPointsAccount?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findPersonIdentity(thirdUniqueIdenty: String):TPersonIdentity?
-
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
-    fun findPersonByIdentityCheckStatus(thirdUniqueIdenty: String): TPerson
-
-}
\ No newline at end of file
diff --git a/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt
deleted file mode 100644
index d857281..0000000
--- a/src/main/kotlin/com/supwisdom/dlpay/app/bean/app_request_param.kt
+++ /dev/null
@@ -1,2 +0,0 @@
-package com.supwisdom.dlpay.app.bean
-
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
index 0293457..df4aef2 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
@@ -74,7 +74,7 @@
         if (retCode == INVALIDE_RETCODE) {
             throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未设置返回码!")
         } else if (retCode != 0) {
-            LOGGER.error("【 ==== ERROR ==== 】: " + Gson().toJson(this.respData))
+            LOGGER.error(" ==== ERROR ==== 【retcode=[$retCode],retmsg=[$retMsg]】: data=" + Gson().toJson(this.respData))
         }else{
             LOGGER.info("retcode=[0],retmsg=[$retMsg] return success!!! \n" + Gson().toJson(this.respData))
         }
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/service/framework_service.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/service/framework_service.kt
index 99161e3..c958d06 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/service/framework_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/service/framework_service.kt
@@ -1,6 +1,5 @@
 package com.supwisdom.dlpay.framework.service
 
-import com.supwisdom.dlpay.api.bean.ConsumeFeetype
 import javax.servlet.http.HttpServletRequest
 
 interface CommonService{
diff --git a/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
index 17e6ca9..e5eed93 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/framework/service/impl/framework_service_impl.kt
@@ -1,10 +1,6 @@
 package com.supwisdom.dlpay.framework.service.impl
 
-import com.google.gson.Gson
-import com.google.gson.reflect.TypeToken
 import com.jcabi.manifests.Manifests
-import com.supwisdom.dlpay.api.bean.ConsumeFeetype
-import com.supwisdom.dlpay.exception.RequestParamCheckException
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.core.JwtConfig
 import com.supwisdom.dlpay.framework.core.JwtTokenUtil