改进支付业务,增加了办卡业务接口
diff --git a/config/application-devel-pg-local.properties b/config/application-devel-pg-local.properties
index 3b2dd4a..d985780 100644
--- a/config/application-devel-pg-local.properties
+++ b/config/application-devel-pg-local.properties
@@ -32,3 +32,26 @@
resttemplate.proxy.type=http
resttemplate.proxy.host=127.0.0.1
resttemplate.proxy.port=1087
+
+#============== kafka ===================
+# 指定kafka 代理地址,可以多个
+spring.kafka.bootstrap-servers=172.28.201.101:9192
+#=============== provider =======================
+spring.kafka.producer.retries=3
+# 每次批量发送消息的数量
+spring.kafka.producer.batch-size=16384
+spring.kafka.producer.buffer-memory=33554432
+# 指定消息key和消息体的编解码方式
+spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
+spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
+
+#===============kafka consumer =======================
+# 指定默认消费者group id
+spring.kafka.listen.auto.start=false
+spring.kafka.consumer.group-id=epaymessager1
+spring.kafka.consumer.auto-offset-reset=earliest
+spring.kafka.consumer.enable-auto-commit=true
+spring.kafka.consumer.auto-commit-interval=100
+# 指定消息key和消息体的编解码方式
+spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
+spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
\ No newline at end of file
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardParam.java
new file mode 100644
index 0000000..f992df5
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardParam.java
@@ -0,0 +1,157 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.sun.java.swing.action.CancelAction;
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.bean.groups.ConfirmAction;
+import com.supwisdom.dlpay.api.bean.groups.InitAction;
+import com.supwisdom.dlpay.api.bean.groups.QueryAction;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+
+import javax.validation.constraints.NotNull;
+
+public class PublishCardParam extends APIRequestParam {
+ @NotNull(message = "操作员ID不能为空", groups = {InitAction.class, ConfirmAction.class, QueryAction.class})
+ private String operid;
+
+ private @NotNull(message = "操作员流水号不能为空", groups = {InitAction.class, ConfirmAction.class, QueryAction.class}) String operSeqno;
+
+ @NotNull(groups = {InitAction.class})
+ private String transdate;
+
+ @NotNull(groups = {InitAction.class})
+ private String transtime;
+
+ private String userid;
+
+ @NotNull
+ private Integer totalAmount;
+
+ private String capitalSubjno;
+
+ @NotNull
+ private Integer cost;
+
+ @NotNull
+ private Integer cashPledge;
+
+ @NotNull
+ private Integer charge;
+
+ @NotNull(message = "交易摘要不能为空", groups = {InitAction.class})
+ private String summary;
+
+ @NotNull(message = "记账日期不能为空", groups = {ConfirmAction.class, CancelAction.class, QueryAction.class})
+ private String accdate;
+
+ @NotNull(message = "交易参考号不能为空", groups = {ConfirmAction.class, CancelAction.class, QueryAction.class})
+ private String refno;
+
+ public String getOperid() {
+ return operid;
+ }
+
+ public void setOperid(String operid) {
+ this.operid = operid;
+ }
+
+ public @NotNull(message = "操作员流水号不能为空", groups = {InitAction.class, ConfirmAction.class, QueryAction.class}) String getOperSeqno() {
+ return operSeqno;
+ }
+
+ public void setOperSeqno(@NotNull(message = "操作员流水号不能为空", groups = {InitAction.class, ConfirmAction.class, QueryAction.class}) String operSeqno) {
+ this.operSeqno = operSeqno;
+ }
+
+ public String getUserid() {
+ return userid;
+ }
+
+ public void setUserid(String userid) {
+ this.userid = userid;
+ }
+
+ public Integer getTotalAmount() {
+ return totalAmount;
+ }
+
+ public void setTotalAmount(Integer totalAmount) {
+ this.totalAmount = totalAmount;
+ }
+
+ public String getAccdate() {
+ return accdate;
+ }
+
+ public void setAccdate(String accdate) {
+ this.accdate = accdate;
+ }
+
+ public String getRefno() {
+ return refno;
+ }
+
+ public void setRefno(String refno) {
+ this.refno = refno;
+ }
+
+ public String getTransdate() {
+ return transdate;
+ }
+
+ public void setTransdate(String transdate) {
+ this.transdate = transdate;
+ }
+
+ public String getTranstime() {
+ return transtime;
+ }
+
+ public void setTranstime(String transtime) {
+ this.transtime = transtime;
+ }
+
+ public String getCapitalSubjno() {
+ return capitalSubjno;
+ }
+
+ public void setCapitalSubjno(String capitalSubjno) {
+ this.capitalSubjno = capitalSubjno;
+ }
+
+ public String getSummary() {
+ return summary;
+ }
+
+ public void setSummary(String summary) {
+ this.summary = summary;
+ }
+
+ public Integer getCost() {
+ return cost;
+ }
+
+ public void setCost(Integer cost) {
+ this.cost = cost;
+ }
+
+ public Integer getCashPledge() {
+ return cashPledge;
+ }
+
+ public void setCashPledge(Integer cashPledge) {
+ this.cashPledge = cashPledge;
+ }
+
+ public Integer getCharge() {
+ return charge;
+ }
+
+ public void setCharge(Integer charge) {
+ this.charge = charge;
+ }
+
+ @Override
+ public boolean checkParam() throws RequestParamCheckException {
+ return true;
+ }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardResponse.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardResponse.java
new file mode 100644
index 0000000..77be206
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/PublishCardResponse.java
@@ -0,0 +1,38 @@
+package com.supwisdom.dlpay.api.bean;
+
+import lombok.AllArgsConstructor;
+import lombok.NoArgsConstructor;
+
+@AllArgsConstructor
+@NoArgsConstructor
+public class PublishCardResponse extends ApiResponse {
+ private String refno;
+
+ private String accdate;
+
+ private String description;
+
+ public String getRefno() {
+ return refno;
+ }
+
+ public void setRefno(String refno) {
+ this.refno = refno;
+ }
+
+ public String getAccdate() {
+ return accdate;
+ }
+
+ public void setAccdate(String accdate) {
+ this.accdate = accdate;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+}
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
index a8e7808..e023ec7 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -1,6 +1,7 @@
package com.supwisdom.dlpay.paysdk.proxy;
import com.supwisdom.dlpay.api.bean.*;
+import org.reactivestreams.Publisher;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@@ -25,4 +26,16 @@
@PostMapping("/api/user/testmsg")
ApiResponse testmsg();
+
+ @PostMapping("/api/user/biz_init")
+ PublishCardResponse bizInit(@RequestBody PublishCardParam param);
+
+ @PostMapping("/api/user/biz_confirm")
+ PublishCardResponse bizConfirm(@RequestBody PublishCardParam param);
+
+ @PostMapping("/api/user/biz_refund")
+ PublishCardResponse bizRefund(@RequestBody PublishCardParam param);
+
+ @PostMapping("/api/user/biz_query")
+ PublishCardResponse bizQuery(@RequestBody PublishCardParam param);
}
diff --git a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
index 32ca0f3..29919c5 100644
--- a/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
+++ b/payapi-sdk/src/test/java/com/supwisdom/dlpay/paysdktest/CitizenCardPayProxyTest.java
@@ -30,7 +30,7 @@
@RunWith(SpringRunner.class)
@SpringBootTest(properties = {
- "payapi.url=http://localhost:8099/payapi"},
+ "payapi.url=http://localhost:8080/payapi"},
classes = CitizenCardPayProxyTest.class)
@ImportAutoConfiguration({RibbonAutoConfiguration.class,
FeignRibbonClientAutoConfiguration.class, FeignAutoConfiguration.class,
@@ -39,7 +39,7 @@
@ComponentScan(basePackages = {"com.supwisdom.dlpay.paysdk"})
public class CitizenCardPayProxyTest {
private final static String appid = "700001";
- private final static String secret = "5f788ce433ec44f299351cdf7f137e81";
+ private final static String secret = "d6dd7f0d4551419d8d11736d0f28df0d";
@Autowired
private ApiLoginProxy apiLoginProxy;
@@ -231,6 +231,38 @@
}
@Test
+ public void testPublishCard() {
+ ApiLoginHelper helper = new ApiLoginHelper(apiLoginProxy);
+ helper.login(appid, secret);
+
+ PublishCardParam param = new PublishCardParam();
+ param.setTransdate(DateUtil.getNow("yyyyMMdd"));
+ param.setTranstime(DateUtil.getNow("HHmmss"));
+ param.setOperid("1001");
+ param.setOperSeqno(param.getTransdate() + param.getTranstime());
+ param.setTotalAmount(10000);
+ param.setCapitalSubjno("112201");
+ param.setSummary("发卡");
+ param.setCost(1000);
+ param.setCharge(0);
+ param.setCashPledge(0);
+ param.setUserid("ff8080816dd8f3a6016dd8f5e5d80002");
+
+ PublishCardResponse response = userProxy.bizInit(param);
+
+ assertThat("user card biz init " + response.getRetcode() + response.getRetmsg() + response.getException(),
+ response.getRetcode(), equalTo(0));
+
+ param.setAccdate(response.getAccdate());
+ param.setRefno(response.getRefno());
+ response = userProxy.bizConfirm(param);
+
+ assertThat("user card biz confirm " + response.getRetcode() + response.getRetmsg() + response.getException(),
+ response.getRetcode(), equalTo(0));
+
+ }
+
+ @Test
public void thirdpay() {
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java
index e80344a..e11c171 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java
@@ -104,7 +104,6 @@
public static final String SUBJNO_PERSONAL_REFUND = "220211";
-
//======================= 损益类 =====================//
/**
* 手续费收入 - 支付宝充值手续费
@@ -121,6 +120,10 @@
*/
public static final String SUBJNO_SERVICEFEE_UNIONPAY = "602103";
+ /**
+ * 手续费收入 - 默认
+ */
+ public static final String SUBJNO_SERVICEFEE_DEFAULT = "602104";
/**
* 销售费用 - (消费)折扣优惠款
@@ -137,4 +140,9 @@
*/
public static final String SUBJNO_MANAGEFEE = "6602";
+ /**
+ * 卡成本费
+ */
+ public static final String SUBJNO_CARD_COST = "6025";
+
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
index b78049f..d1a85b8 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/TradeCode.java
@@ -30,5 +30,6 @@
public static final int TRANSCODE_ERCHARGE = 3500; //账户充值
+ public static final int TRANSCODE_CARD_BIZ = 1007; // 卡务业务
}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index 3688191..271af87 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -1,35 +1,40 @@
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.QueryCardsParam
-import com.supwisdom.dlpay.api.bean.QueryUserParam
+import com.supwisdom.dlpay.api.TransactionBuilder
+import com.supwisdom.dlpay.api.bean.*
+import com.supwisdom.dlpay.api.bean.groups.ConfirmAction
+import com.supwisdom.dlpay.api.bean.groups.InitAction
import com.supwisdom.dlpay.api.exception.RequestParamCheckException
-import com.supwisdom.dlpay.api.service.CardService
-import com.supwisdom.dlpay.api.service.KafkaSendMsgService
-import com.supwisdom.dlpay.api.service.UserService
+import com.supwisdom.dlpay.api.service.*
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.util.Subject
+import com.supwisdom.dlpay.framework.util.TradeCode
+import com.supwisdom.dlpay.framework.util.TradeDict
import com.supwisdom.dlpay.framework.util.TradeErrorCode
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
+import org.springframework.validation.annotation.Validated
import org.springframework.web.bind.annotation.*
import java.net.URLDecoder
-import javax.servlet.http.HttpServletRequest
-import javax.servlet.http.HttpServletResponse
+import javax.validation.Valid
@RestController
@RequestMapping("/api/user")
class UserAPIController {
@Autowired
private lateinit var useService: UserService
+
+ @Autowired
+ private lateinit var accountUtilServcie: AccountUtilServcie
@Autowired
private lateinit var cardService: CardService
@Autowired
private lateinit var kafkaSendMsgService: KafkaSendMsgService
+ @Autowired
+ private lateinit var transactionService: TransactionServiceProxy
+
@PostMapping("/open")
fun openAccount(@RequestBody param: OpenUserParam): ResponseEntity<Any> {
@@ -127,16 +132,17 @@
.transException(et, "业务处理错误"))
}
}
+
@PostMapping("/querybycardno")
fun querybycardno(@RequestBody param: QueryUserParam): ResponseEntity<Any> {
val ret = when (!param.userid.isNullOrEmpty()) {
true -> cardService.getPersonByUserid(param.userid)
false -> cardService.getPersonByCardno(param.citizencardno, param.bankcardno)
}
- return if(ret.retcode==0){
+ return if (ret.retcode == 0) {
ResponseEntity.ok(ResponseBodyBuilder.create()
- .success(ret,"ok"))
- }else{
+ .success(ret, "ok"))
+ } else {
ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(ret.retcode, ret.retmsg))
}
@@ -145,10 +151,10 @@
@PostMapping("/querycards")
fun querycards(@RequestBody param: QueryCardsParam): ResponseEntity<Any> {
val ret = cardService.getCardsByLastsaveDate(param.starttime, param.endtime)
- return if(ret.retcode==0){
+ return if (ret.retcode == 0) {
ResponseEntity.ok(ResponseBodyBuilder.create()
- .success(ret,"ok"))
- }else{
+ .success(ret, "ok"))
+ } else {
ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(ret.retcode, ret.retmsg))
}
@@ -156,8 +162,104 @@
@PostMapping("/testmsg")
fun testmsg(): ResponseEntity<Any> {
- kafkaSendMsgService.sendJpushMessage("402882816c2727a2016c2728165f0001","交易提醒","你有一笔0.01元的支出,点击查看详情","20190725133506000018", mutableMapOf(),"")
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ kafkaSendMsgService.sendJpushMessage("402882816c2727a2016c2728165f0001", "交易提醒",
+ "你有一笔0.01元的支出,点击查看详情", "20190725133506000018", mutableMapOf(), "")
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.success("ok"))
}
+
+ @PostMapping("/biz_init")
+ fun userBizInit(@RequestBody @Validated(InitAction::class) request: PublishCardParam): ResponseEntity<Any> {
+ val builder = TransactionBuilder().apply {
+ setTransInfo(request.transdate, request.transtime, TradeCode.TRANSCODE_CARD_BIZ, "balance")
+ setOutTransInfo(request.operid, request.operSeqno)
+ dtltype = "cardservice"
+ description = request.summary
+ }
+ val result = PublishCardResponse()
+
+ val user = useService.findAccountByUserid(request.userid, null)
+ ?: return ResponseBodyBuilder.failEntity(result,
+ TradeErrorCode.ACCOUNT_NOT_EXISTS,
+ "用户ID ${request.userid} 不存在")
+
+ if (user.transStatus != TradeDict.STATUS_NORMAL) {
+ return ResponseBodyBuilder.failEntity(result,
+ TradeErrorCode.ACCOUNT_NOT_EXISTS,
+ "用户ID ${request.userid} 状态异常")
+ }
+
+ val capitalSubj = accountUtilServcie.readSubject(request.capitalSubjno)
+
+ builder.person(user).apply {
+ setAmount(request.totalAmount / 100.0, TradeDict.TRADE_FLAG_IN)
+ setOpposite(capitalSubj.subjno, capitalSubj.subjname)
+ }
+
+ val depositAmount = request.totalAmount - request.cost - request.cashPledge - request.charge
+
+ if (depositAmount < 0) {
+ return ResponseBodyBuilder.failEntity(result,
+ TradeErrorCode.INPUT_DATA_ERROR,
+ "交易金额错误")
+ }
+ if (depositAmount != 0 && request.totalAmount != 0) {
+ if (depositAmount > 0) {
+ builder.addDebitCreditRecord(capitalSubj.subjno, capitalSubj.subjname,
+ user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT, request.totalAmount / 100.0, request.summary)
+ }
+ val transDesc = arrayListOf<String>()
+ if (request.cost > 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_CARD_COST)
+ builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ subject.subjno, subject.subjno, request.cost / 100.0,
+ request.summary)
+ transDesc.add("卡成本费" + "%.2f".format(request.cost / 100.0) + " 元")
+
+ }
+ if (request.cashPledge > 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_FOREGIFT)
+ builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ subject.subjno, subject.subjno, request.cashPledge / 100.0,
+ request.summary)
+ transDesc.add("卡押金" + "%.2f".format(request.cashPledge / 100.0) + " 元")
+ }
+ if (request.charge > 0) {
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_SERVICEFEE_DEFAULT)
+ builder.addDebitCreditRecord(user.accno, Subject.SUBJNO_PERSONAL_DEPOSIT,
+ subject.subjno, subject.subjno, request.charge / 100.0,
+ request.summary)
+ transDesc.add("手续费" + "%.2f".format(request.charge / 100.0) + " 元")
+ }
+ builder.description += transDesc.joinToString(";")
+ }
+ val transaction = transactionService.init(builder)
+
+ result.apply {
+ accdate = transaction.accdate
+ refno = transaction.refno
+ description = builder.description
+ }
+ return ResponseBodyBuilder.successEntity(result, "${request.summary}初始化成功")
+ }
+
+ @PostMapping("/biz_confirm")
+ fun userBizConfirm(@RequestBody @Validated(ConfirmAction::class) request: PublishCardParam): ResponseEntity<Any> {
+ val transaction = transactionService.success(request.refno)
+ val response = PublishCardResponse().apply {
+ accdate = transaction.accdate
+ refno = transaction.refno
+ }
+ return ResponseBodyBuilder.successEntity(response, "${request.summary}确认成功")
+ }
+
+ @PostMapping("/biz_refund")
+ fun userBizRefund(@RequestBody @Valid request: PublishCardParam): ResponseEntity<Any> {
+ return ResponseEntity.ok(ResponseBodyBuilder.create().success())
+ }
+
+ @GetMapping("/biz_query")
+ fun userBizQuery(@RequestBody @Valid request: PublishCardParam): ResponseEntity<Any> {
+ return ResponseEntity.ok(ResponseBodyBuilder.create().success())
+ }
}
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
index 1f63e38..c9d61a1 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/framework/framework_util.kt
@@ -8,6 +8,7 @@
import com.supwisdom.dlpay.exception.TransactionException
import com.supwisdom.dlpay.framework.util.TradeErrorCode
import mu.KotlinLogging
+import org.springframework.http.ResponseEntity
class ResponseBodyBuilder private constructor() {
@@ -16,6 +17,14 @@
private val RESERVED_KEY = setOf("retcode", "retmsg")
private val LOGGER = KotlinLogging.logger {}
fun create() = ResponseBodyBuilder()
+
+ fun successEntity(bean: ApiResponse, msg: String? = null): ResponseEntity<Any> {
+ return ResponseEntity.ok(create().success(bean, msg))
+ }
+
+ fun failEntity(bean: ApiResponse, code: Int, msg: String): ResponseEntity<Any> {
+ return ResponseEntity.ok(create().fail(bean, code, msg))
+ }
}
private var retCode = INVALIDE_RETCODE
@@ -44,6 +53,7 @@
return bean
}
+
fun fail(code: Int, msg: String): Map<String, Any> {
if (code == 0) {
throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "错误码未正确定义")
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index bcdf83c..7244bf3 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -534,6 +534,10 @@
INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
VALUES (26, '602103', 2, 'n', 1, '6021', 20190430, 2, '银联充值手续费', 6, '{tenantid}');
INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES (32, '602104', 2, 'n', 1, '6021', 20190430, 2, '收手续费', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
+VALUES (31, '6025', 2, 'y', 0, NULL, 20190430, 1, '卡成本费收入', 6, '{tenantid}');
+INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
VALUES (27, '6601', 2, 'y', 0, NULL, 20190430, 1, '销售费用', 6, '{tenantid}');
INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
VALUES (28, '660101', 2, 'y', 1, '6601', 20190430, 2, '折扣优惠款', 6, '{tenantid}');
@@ -700,6 +704,8 @@
VALUES (29, 'canteen', 'dtltypeList', '食堂就餐', '流水类型', '{tenantid}');
INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
VALUES (30, 'shopmarket', 'dtltypeList', '商超消费', '流水类型', '{tenantid}');
+INSERT INTO "tb_dictionary" ("id", "dictval", "dicttype", "dictcaption", "dicttypename", "tenantid")
+VALUES (31, 'cardservice', 'dtltypeList', '卡务流水', '流水类型', '{tenantid}');