From: Tang Cheng Date: Thu, 23 May 2019 02:17:49 +0000 (+0800) Subject: 重构优化代码,增加交易主表记录操作员(个人,商户或者系统操作员) X-Git-Tag: 1.0.0^2~198 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=3e6ad08ffebc88f032a5d14632622a561ae0f6be;p=epayment%2Ffood_payapi.git 重构优化代码,增加交易主表记录操作员(个人,商户或者系统操作员) --- 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 78983aee..a4969cb3 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 @@ public class TTransactionMain { @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 @@ public class TTransactionMain { 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 c786deab..d551c985 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 class TradeDict { 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 eb124dda..461f6dd4 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 @@ class ConsumeController { 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 @@ class ConsumeController { 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 f5817087..19481168 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 @@ import java.sql.Timestamp 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 @@ class TransactionServiceImpl : TransactionService { 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 @@ class TransactionServiceImpl : TransactionService { 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 7dd9f806..5d379fe8 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 @@ class TransactionBuilder { 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 @@ class TransactionBuilder { 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) }