与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