重构优化代码,增加交易主表记录操作员(个人,商户或者系统操作员)
diff --git a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
index 78983ae..a4969cb 100644
--- a/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
+++ b/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionMain.java
@@ -38,6 +38,12 @@
@Column(name = "outid", length = 60)
private String outId;
+ @Column(name = "OPERID", precision = 9)
+ private String operid; //操作员ID
+
+ @Column(name = "OPERTYPE", length = 10)
+ private String opertype; // person - 个人, shop - 商户, operator - 操作员
+
@Column(name = "create_time")
private Timestamp createTime;
@@ -184,6 +190,22 @@
this.endTime = endTime;
}
+ public String getOperid() {
+ return operid;
+ }
+
+ public void setOperid(String operid) {
+ this.operid = operid;
+ }
+
+ public String getOpertype() {
+ return opertype;
+ }
+
+ public void setOpertype(String opertype) {
+ this.opertype = opertype;
+ }
+
public Double sumAmountByAccno(String accno, String subjno,
int balanceFlag, String debitOrCredit) {
Double debitSum = 0.0;
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
index c786dea..d551c98 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/TradeDict.java
@@ -36,6 +36,22 @@
public static final String DTL_STATUS_NONE = "none";
+ /**
+ * 操作员类型
+ * person - 个人
+ * shop - 商户
+ * operator - 操作员
+ */
+
+ public static final String OPERTYPE_PERSON = "person";
+ public static final String OPERTYPE_SHOP = "shop";
+ public static final String OPERTYPE_OPER = "operator";
+
+ /**
+ * 收支
+ * out - 支出
+ * in - 收入
+ */
public static final String TRADE_FLAG_OUT = "out";
public static final String TRADE_FLAG_IN = "in";
/**
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
index eb124dd..461f6dd 100644
--- 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
@@ -156,6 +156,7 @@
payinfo = "账户余额消费"
outId = shopacc.shopaccno
outtradeno = param.billno
+ operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
}.person(account).apply {
description = "账户余额消费"
amount = param.amount / 100.0
@@ -230,6 +231,7 @@
description = "市民卡代扣消费"
outId = shopacc.shopaccno
outtradeno = param.billno
+ operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
}.person(account).apply {
amount = param.amount / 100.0
opposite = AccountProxy(shopacc)
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
index f581708..1948116 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_service_impl.kt
@@ -22,8 +22,8 @@
class TransactionServiceImpl : TransactionService {
companion object {
- val PERSON_BALANCE_FLAG = 2
- val SHOP_BALANCE_FLAG = 2
+ const val PERSON_BALANCE_FLAG = 2
+ const val SHOP_BALANCE_FLAG = 2
}
@Autowired
@@ -42,78 +42,7 @@
lateinit var systemUtilService: SystemUtilService
private fun preCheck(builder: TransactionBuilder) {
- if (builder.outId.isNotEmpty() && builder.outtradeno.isEmpty()) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "第三方账号未指定第三方流水号")
- }
-
- if (builder.transDate.length != 8 || builder.transTime.length != 6) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "交易发生日期错误")
- }
-
- if (builder.transCode <= 0) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "交易码错误")
- }
-
- if (builder.hasPerson()) {
- builder.person().also {
- if (!it.hasOpposite()) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "个人交易对方账户未设置")
- }
- if (it.payinfo.isEmpty() || it.paytype.isEmpty()) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "个人交易信息未设置")
- }
- when (it.tradeFlag()) {
- TradeDict.TRADE_FLAG_IN -> {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "不支持的交易")
- }
- TradeDict.TRADE_FLAG_OUT -> {
- if (builder.reverseFlag != TradeDict.REVERSE_FLAG_NONE && it.amount > 0) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "消费冲正交易,余额不能大于0")
- } else if (builder.reverseFlag == TradeDict.REVERSE_FLAG_NONE && it.amount < 0) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "消费交易,余额不能小于0")
- }
- }
- else -> {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "个人交易方向未设置")
- }
- }
-
- }
- }
-
- if (builder.hasShop()) {
- builder.shop().also {
- if (!it.hasOpposite()) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "商户交易对方账户未设置")
- }
- when (it.tradeFlag()) {
- TradeDict.TRADE_FLAG_IN -> {
- if (it.amount < 0) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "商户收入交易金额不能小于0")
- }
- }
- TradeDict.TRADE_FLAG_OUT -> {
- if (it.amount > 0) {
- throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "商户支出交易金额不能小于0")
- }
- }
- else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "商户交易方向未设置")
- }
- }
- }
+ builder.preCheck()
}
private fun builderRecords(builder: TransactionBuilder, status: String): TTransactionMain {
@@ -126,6 +55,8 @@
outTradeNo = builder.outtradeno
outId = builder.outId
createTime = Timestamp(systemUtilService.sysdatetime.sysdate.time)
+ operid = builder.operId
+ opertype = builder.operType
}
if (builder.hasPerson()) {
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
index 7dd9f80..5d379fe 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/transaction_builder.kt
@@ -136,6 +136,15 @@
var description: String = ""
var remark: String = ""
+ var operId: String = ""
+ var operType: String = ""
+
+ fun operator(id: String, type: String): TransactionBuilder {
+ this.operId = id
+ this.operType = type
+ return this
+ }
+
fun person(): PersonTranactionBuilder {
return this.personBuilder
}
@@ -201,6 +210,87 @@
return debitCreditLines.toList()
}
+ fun preCheck() {
+ if (outId.isNotEmpty() && outtradeno.isEmpty()) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "第三方账号未指定第三方流水号")
+ }
+
+ if (transDate.length != 8 || transTime.length != 6) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "交易发生日期错误")
+ }
+
+ if (transCode <= 0) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "交易码错误")
+ }
+
+ if ((operId.isNotEmpty() || operType.isNotEmpty())
+ && operType !in setOf(TradeDict.OPERTYPE_OPER, TradeDict.OPERTYPE_PERSON, TradeDict.OPERTYPE_SHOP)) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "操作员类型错误")
+ }
+
+ if (hasPerson()) {
+ person().also {
+ if (!it.hasOpposite()) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "个人交易对方账户未设置")
+ }
+ if (it.payinfo.isEmpty() || it.paytype.isEmpty()) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "个人交易信息未设置")
+ }
+ when (it.tradeFlag()) {
+ TradeDict.TRADE_FLAG_IN -> {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "不支持的交易")
+ }
+ TradeDict.TRADE_FLAG_OUT -> {
+ if (reverseFlag != TradeDict.REVERSE_FLAG_NONE && it.amount > 0) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "消费冲正交易,余额不能大于0")
+ } else if (reverseFlag == TradeDict.REVERSE_FLAG_NONE && it.amount < 0) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "消费交易,余额不能小于0")
+ }
+ }
+ else -> {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "个人交易方向未设置")
+ }
+ }
+
+ }
+ }
+
+ if (hasShop()) {
+ shop().also {
+ if (!it.hasOpposite()) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "商户交易对方账户未设置")
+ }
+ when (it.tradeFlag()) {
+ TradeDict.TRADE_FLAG_IN -> {
+ if (it.amount < 0) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "商户收入交易金额不能小于0")
+ }
+ }
+ TradeDict.TRADE_FLAG_OUT -> {
+ if (it.amount > 0) {
+ throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "商户支出交易金额不能小于0")
+ }
+ }
+ else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "商户交易方向未设置")
+ }
+ }
+ }
+ }
+
fun init(transactionService: TransactionService): TTransactionMain {
return transactionService.init(this)
}