From bb1e84b94474f1d513c25b2122576370a29d5033 Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 11 May 2023 12:35:05 +0800
Subject: [PATCH] 会员等级设置

---
 src/main/java/cc/mrbird/febs/pay/service/impl/NBYHServiceImpl.java         |   67 +++++++--
 src/main/resources/lkl/prd/api_cert.cer                                    |   22 +++
 src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java    |   25 +++
 src/main/resources/lkl/prd/api_public_key.pem                              |    9 +
 src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java     |   41 +++++
 src/test/java/cc/mrbird/febs/ProfitTest.java                               |    4 
 src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java     |   24 +++
 src/main/resources/lkl/prd/api_private_key.pem                             |   28 ++++
 src/main/resources/templates/febs/views/modules/system/cashOutSetting.html |   55 +++++++
 src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java       |   92 ++++++-------
 src/main/java/cc/mrbird/febs/mall/dto/CashOutSettingDto.java               |    6 
 11 files changed, 303 insertions(+), 70 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
index 9ecd9a5..82c087e 100644
--- a/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
+++ b/src/main/java/cc/mrbird/febs/common/enumerates/DataDictionaryEnum.java
@@ -6,6 +6,30 @@
 @Getter
 public enum DataDictionaryEnum {
     /**
+     * 银行转账设置-客户号
+     */
+    BANK_TRANS_softwareId("BANK_TRANS_SET","BANK_TRANS_softwareId"),
+    /**
+     * 银行转账设置-客户号
+     */
+    BANK_TRANS_customerId("BANK_TRANS_SET","BANK_TRANS_customerId"),
+    /**
+     * 银行转账设置-付款账号
+     */
+    BANK_TRANS_FKZH("BANK_TRANS_SET","BANK_TRANS_FKZH"),
+    /**
+     * 银行转账设置-签名端口
+     */
+    BANK_TRANS_VERIFY_PORT("BANK_TRANS_SET","BANK_TRANS_VERIFY_PORT"),
+    /**
+     * 银行转账设置-签名ip
+     */
+    BANK_TRANS_VERIFY_IP("BANK_TRANS_SET","BANK_TRANS_VERIFY_IP"),
+    /**
+     * 银行转账设置-接收报文url
+     */
+    BANK_TRANS_URL("BANK_TRANS_SET","BANK_TRANS_URL"),
+    /**
      * 星级补贴百分比
      */
     PERK_AGENT_ACHIEVE_PERCENT("PERK_SET","PERK_AGENT_ACHIEVE_PERCENT"),
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
index 1518632..19b024b 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/AdminSystemController.java
@@ -55,6 +55,31 @@
     @PostMapping(value = "/cashOutSetting")
     public FebsResponse cashOutSetting(CashOutSettingDto cashOutSettingDto) {
         commonService.addDataDic(DataDictionaryEnum.CASHOUT_SETTING.getType(), DataDictionaryEnum.CASHOUT_SETTING.getCode(), cashOutSettingDto, "提现设置");
+
+        commonService.updateDataDic(
+                DataDictionaryEnum.BANK_TRANS_URL.getType(),
+                DataDictionaryEnum.BANK_TRANS_URL.getCode(),
+                cashOutSettingDto.getUrlStr());
+        commonService.updateDataDic(
+                DataDictionaryEnum.BANK_TRANS_VERIFY_IP.getType(),
+                DataDictionaryEnum.BANK_TRANS_VERIFY_IP.getCode(),
+                cashOutSettingDto.getVerifyIp());
+        commonService.updateDataDic(
+                DataDictionaryEnum.BANK_TRANS_VERIFY_PORT.getType(),
+                DataDictionaryEnum.BANK_TRANS_VERIFY_PORT.getCode(),
+                cashOutSettingDto.getVerifyPort());
+        commonService.updateDataDic(
+                DataDictionaryEnum.BANK_TRANS_FKZH.getType(),
+                DataDictionaryEnum.BANK_TRANS_FKZH.getCode(),
+                cashOutSettingDto.getFkzh());
+        commonService.updateDataDic(
+                DataDictionaryEnum.BANK_TRANS_customerId.getType(),
+                DataDictionaryEnum.BANK_TRANS_customerId.getCode(),
+                cashOutSettingDto.getCustomerId());
+        commonService.updateDataDic(
+                DataDictionaryEnum.BANK_TRANS_softwareId.getType(),
+                DataDictionaryEnum.BANK_TRANS_softwareId.getCode(),
+                cashOutSettingDto.getSoftwareId());
         return new FebsResponse().success();
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
index 7e5e601..9845ee6 100644
--- a/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
+++ b/src/main/java/cc/mrbird/febs/mall/controller/ViewSystemController.java
@@ -106,9 +106,46 @@
     @RequiresPermissions("cashOutSetting:update")
     public String cashOutSetting(Model model) {
         DataDictionaryCustom dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(DataDictionaryEnum.CASHOUT_SETTING.getType(), DataDictionaryEnum.CASHOUT_SETTING.getCode());
-        if (dic != null) {
-            model.addAttribute("cashout", JSONObject.parseObject(dic.getValue(), CashOutSettingDto.class));
+        CashOutSettingDto cashOutSettingDto = JSONObject.parseObject(dic.getValue(), CashOutSettingDto.class);
+
+        DataDictionaryCustom urlDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_URL.getType(),
+                DataDictionaryEnum.BANK_TRANS_URL.getCode());
+        if (urlDic != null) {
+            cashOutSettingDto.setUrlStr(urlDic.getValue());
         }
+        DataDictionaryCustom verifyIpDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_VERIFY_IP.getType(),
+                DataDictionaryEnum.BANK_TRANS_VERIFY_IP.getCode());
+        if (verifyIpDic != null) {
+            cashOutSettingDto.setVerifyIp(verifyIpDic.getValue());
+        }
+        DataDictionaryCustom verifyPortDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_VERIFY_PORT.getType(),
+                DataDictionaryEnum.BANK_TRANS_VERIFY_PORT.getCode());
+        if (verifyPortDic != null) {
+            cashOutSettingDto.setVerifyPort(verifyPortDic.getValue());
+        }
+        DataDictionaryCustom fkzhDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_FKZH.getType(),
+                DataDictionaryEnum.BANK_TRANS_FKZH.getCode());
+        if (fkzhDic != null) {
+            cashOutSettingDto.setFkzh(fkzhDic.getValue());
+        }
+        DataDictionaryCustom customerIdDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_customerId.getType(),
+                DataDictionaryEnum.BANK_TRANS_customerId.getCode());
+        if (customerIdDic != null) {
+            cashOutSettingDto.setCustomerId(customerIdDic.getValue());
+        }
+        DataDictionaryCustom softwareIdDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_softwareId.getType(),
+                DataDictionaryEnum.BANK_TRANS_softwareId.getCode());
+        if (softwareIdDic != null) {
+            cashOutSettingDto.setSoftwareId(softwareIdDic.getValue());
+        }
+
+        model.addAttribute("cashout", cashOutSettingDto);
         return FebsUtil.view("modules/system/cashOutSetting");
     }
 
diff --git a/src/main/java/cc/mrbird/febs/mall/dto/CashOutSettingDto.java b/src/main/java/cc/mrbird/febs/mall/dto/CashOutSettingDto.java
index 3323b3b..2e8051d 100644
--- a/src/main/java/cc/mrbird/febs/mall/dto/CashOutSettingDto.java
+++ b/src/main/java/cc/mrbird/febs/mall/dto/CashOutSettingDto.java
@@ -22,4 +22,10 @@
     private Integer workingDays;
     //互转手续费率
     private Integer insideFee;
+    private String urlStr;
+    private String verifyIp;
+    private String verifyPort;
+    private String fkzh;
+    private String customerId;
+    private String softwareId;
 }
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java
index 5e3c641..ff30448 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/LaKaLaServiceImpl.java
@@ -89,7 +89,7 @@
      */
     public static final String mchSerialNo = "01848940fd41";
 
-    public static final String mchSerialNo_prd = "01848940fd41";
+    public static final String mchSerialNo_prd = "018804e5ecd9";
 
     /**
      * 商户号
@@ -323,9 +323,7 @@
                         return "FAIL";
                     }
 
-                    Object trade_info_list = respDataChild.get("order_trade_info_list");
-                    JSONObject respChild = JSONUtil.parseObj(trade_info_list);
-                    String tradeStatus = respChild.get("trade_status").toString();
+                    String tradeStatus = respDataChild.getJSONArray("order_trade_info_list").getJSONObject(0).get("trade_status").toString();
                     if(!"S".equals(tradeStatus)){
                         return "FAIL";
                     }
@@ -375,54 +373,48 @@
     }
 
     public static void main(String[] args) {
-
-    /**
-     * {"req_time":"20221026100323",
-     * "version":"1.0",
-     * "req_data":{
-     *      "out_order_no":"GHSNVDY8033038232443530",
-     *      "merchant_no":"8222900701107M5",
-     *      "total_amount":1,
-     *      "order_efficient_time":"20221118220823",
-     *      "notify_url":"",
-     *      "support_cancel":0,
-     *      "support_refund":1,
-     *      "support_repeat_pay":1,
-     *      "order_info":"测试"}}
-     */
-        LaKaLaCreateOrderReqDate laKaLaCreateOrderReqDate = new LaKaLaCreateOrderReqDate();
-        laKaLaCreateOrderReqDate.setOut_order_no("GHSNVDY8033038232443530");
-
-        LaKaLaBasicReqDate laKaLaBasicReqDate = new LaKaLaBasicReqDate();
-        laKaLaBasicReqDate.setReq_time(DateUtil.format(new Date(),"yyyyMMddHHmmss"));
-        laKaLaBasicReqDate.setVersion("3.0");
-        JSONObject jsonObject = JSONUtil.parseObj(laKaLaCreateOrderReqDate);
-        laKaLaBasicReqDate.setReq_data(jsonObject);
-
-        String s = "{\n" +
-                "    \"code\":\"000000\",\n" +
-                "    \"msg\":\"操作成功\",\n" +
-                "    \"resp_time\":\"20230419151705\",\n" +
-                "    \"resp_data\":{\n" +
-                "        \"merchant_no\":\"8222900701107M5\",\n" +
-                "        \"channel_id\":\"95\",\n" +
-                "        \"out_order_no\":\"HLM20230419151704\",\n" +
-                "        \"order_create_time\":\"20230419151705\",\n" +
-                "        \"order_efficient_time\":\"20230419161704\",\n" +
-                "        \"pay_order_no\":\"23041911012001101011000965837\",\n" +
-                "        \"total_amount\":\"1\",\n" +
-                "        \"counter_url\":\"http://q.huijingcai.top/r/0000?pageStyle%3DV2%26token%3DCCSSIZlwnaqWmBw3FHY5U40nGcX7pxoKuxVhhVI7XyulHEUboR1I0VTIqJRMAjgj3IjCMWvoWjp9%2BXHpkA%3D%3D%26amount%3D1%26payOrderNo%3D23041911012001101011000965837\"\n" +
-                "    }\n" +
-                "}";
-
+        String s = "{\"code\":\"000000\"," +
+                "\"msg\":\"操作成功\"," +
+                "\"resp_time\":\"20230510154634\"," +
+                "\"resp_data\":{\"pay_order_no\":\"23051011012001101011000969911\"," +
+                "\"out_order_no\":\"2023051015455302379\"," +
+                "\"channel_id\":\"95\"," +
+                "\"trans_merchant_no\":\"8222900701107M5\"," +
+                "\"trans_term_no\":\"A1062976\"," +
+                "\"merchant_no\":\"8222900701107M5\"," +
+                "\"term_no\":\"A1062976\"," +
+                "\"order_status\":\"2\"," +
+                "\"order_info\":\"礼包一\"," +
+                "\"total_amount\":1," +
+                "\"order_create_time\":\"20230510154556\"," +
+                "\"order_efficient_time\":\"20230510164555\"," +
+                "\"settle_type\":\"0\"," +
+                "\"split_mark\":\"\"," +
+                "\"counter_param\":null," +
+                "\"counter_remark\":null," +
+                "\"busi_type_param\":\"\"," +
+                "\"sgn_info\":[]," +
+                "\"goods_mark\":\"\"," +
+                "\"goods_field\":\"\"," +
+                "\"order_trade_info_list\":[{\"trade_no\":\"2023051066210308370172\"," +
+                "\"log_No\":\"66210308370172\"," +
+                "\"trade_ref_no\":\"\"," +
+                "\"trade_type\":\"PAY\"," +
+                "\"trade_status\":\"S\"," +
+                "\"trade_amount\":1,\"payer_amount\":1,\"user_id1\":\"oLvoQ5W-MMaepM5fIf2XGOkatAzQ\",\"user_id2\":\"oUpF8uPxTeOlCA4eunIiiK6vZ9IA\",\"busi_type\":\"SCPAY\",\"trade_time\":\"20230510154610\",\"acc_trade_no\":\"4200001884202305101607494108\",\"payer_account_no\":\"\",\"payer_name\":\"\",\"payer_account_bank\":\"\",\"acc_type\":\"99\",\"pay_mode\":\"WECHAT\",\"client_batch_no\":\"\",\"client_seq_no\":\"\",\"settle_merchant_no\":\"8222900701107M5\",\"settle_term_no\":\"A1062976\",\"origin_trade_no\":\"\",\"auth_code\":\"\",\"bank_type\":\"OTHERS\"}]}}";
         JSONObject parseObj = JSONUtil.parseObj(s);
+        String code = parseObj.get("code").toString();
+        if("000000".equals(code)){
+            Object respData = parseObj.get("resp_data");
+            JSONObject respDataChild = JSONUtil.parseObj(respData);
 
-        Object respData = parseObj.get("resp_data");
-
-        JSONObject respDataChild = JSONUtil.parseObj(respData);
-        String counterUrl = respDataChild.get("counter_url").toString();
-        System.out.println(counterUrl);
-
+            System.out.println(respDataChild);
+//            String orderStatusQuery = respDataChild.get("order_status").toString();
+            String orderStatusQuery = respDataChild.get("order_trade_info_list").toString();
+            System.out.println(orderStatusQuery);
+            String tradeStatus = respDataChild.getJSONArray("order_trade_info_list").getJSONObject(0).get("trade_status").toString();
+            System.out.println(tradeStatus);
+        }
     }
 
     public HttpResponse post(String url, String message, String authorization) throws Exception {
diff --git a/src/main/java/cc/mrbird/febs/pay/service/impl/NBYHServiceImpl.java b/src/main/java/cc/mrbird/febs/pay/service/impl/NBYHServiceImpl.java
index 00d9202..393568a 100644
--- a/src/main/java/cc/mrbird/febs/pay/service/impl/NBYHServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/pay/service/impl/NBYHServiceImpl.java
@@ -1,15 +1,16 @@
 package cc.mrbird.febs.pay.service.impl;
 
+import cc.mrbird.febs.common.enumerates.DataDictionaryEnum;
+import cc.mrbird.febs.common.utils.RedisUtils;
+import cc.mrbird.febs.mall.entity.DataDictionaryCustom;
 import cc.mrbird.febs.mall.entity.MallMemberBank;
 import cc.mrbird.febs.mall.entity.MallMemberWithdraw;
 import cc.mrbird.febs.mall.entity.MallMemberWithdrawMsg;
-import cc.mrbird.febs.mall.mapper.MallMemberBankMapper;
-import cc.mrbird.febs.mall.mapper.MallMemberWithdrawMapper;
-import cc.mrbird.febs.mall.mapper.MallMemberWithdrawMsgMapper;
-import cc.mrbird.febs.mall.mapper.MallOrderInfoMapper;
+import cc.mrbird.febs.mall.mapper.*;
 import cc.mrbird.febs.pay.model.NBYHResponse;
 import cc.mrbird.febs.pay.service.NBYHService;
 import cn.hutool.core.util.ObjectUtil;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -26,6 +27,7 @@
 
 @Slf4j
 @Service
+@RequiredArgsConstructor
 public class NBYHServiceImpl implements NBYHService {
     /**
      * 登录报文原文
@@ -109,6 +111,8 @@
      */
 //    private static final String URL = "http://127.0.0.1:9080/directlink/httpAccess";
     private static final String URL = "http://n5z7ej.natappfree.cc/directlink/httpAccess";
+
+    private final DataDictionaryCustomMapper dataDictionaryCustomMapper;
     /**
      * 签名ip
      */
@@ -121,7 +125,7 @@
     /**
      * 签名端口
      */
-    private static final int VERIFY_PORT = 41933;
+    private static final int VERIFY_PORT = 39296;
 //    private static final int VERIFY_PORT = 8010;
 
     /**
@@ -151,6 +155,8 @@
 
     public static void main(String[] args) {
         try {
+
+
 
             InetAddress addr = InetAddress.getByName(VERIFY_IP);
             Socket socket = new Socket(addr, VERIFY_PORT);
@@ -372,10 +378,19 @@
      * @throws Exception
      */
     @SuppressWarnings("rawtypes")
-    public static String executeServerHttpService(String requestData) throws Exception {
+    public String executeServerHttpService(String requestData) throws Exception {
 //    public static void executeServerHttpService(String serviceId, String serviceName, String serialNo,String requestData) throws Exception {
         // 处理交易的url
-        java.net.URL url = new URL(URL);
+        DataDictionaryCustom urlDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_URL.getType(),
+                DataDictionaryEnum.BANK_TRANS_URL.getCode()
+        );
+        StringBuffer urlSb = new StringBuffer();
+        urlSb.append("http://");
+        urlSb.append(urlDic.getValue());
+        urlSb.append("/directlink/httpAccess");
+        java.net.URL url = new URL(urlSb.toString());
+//        java.net.URL url = new URL(URL);
         HttpURLConnection connection = (HttpURLConnection) url.openConnection();
         if (cookies != null) {
             // 如果已登录,设置coikie
@@ -510,7 +525,7 @@
      * @throws FileNotFoundException
      * @throws IOException
      */
-    public static String getRequestDataForWithDraw(String serviceId, String serviceName,MallMemberWithdraw mallMemberWithdraw,MallMemberBank mallMemberBank)
+    public String getRequestDataForWithDraw(String serviceId, String serviceName,MallMemberWithdraw mallMemberWithdraw,MallMemberBank mallMemberBank)
             throws FileNotFoundException, IOException {
         StringBuffer buf = new StringBuffer();
         // 报文编码格式utf-8
@@ -522,6 +537,18 @@
         buf.append(serviceId);
         buf.append("</serviceId>");
         String reqData = "";
+        DataDictionaryCustom fkzhDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_FKZH.getType(),
+                DataDictionaryEnum.BANK_TRANS_FKZH.getCode()
+        );
+        DataDictionaryCustom customerIdDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_customerId.getType(),
+                DataDictionaryEnum.BANK_TRANS_customerId.getCode()
+        );
+        DataDictionaryCustom softwareIdDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_softwareId.getType(),
+                DataDictionaryEnum.BANK_TRANS_softwareId.getCode()
+        );
         if (serviceId.equals("srv001_signOn")) {
             reqData = SIGN_MESSAGE;
         } else if (serviceId.equals("srv006_singleInnerTransfer")) {
@@ -541,7 +568,7 @@
              * </opReq>
              * *
              */
-            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", FKZH);
+            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", fkzhDic.getValue());
             reqData = reqData.replaceFirst("\\$\\{SKZH\\}", mallMemberBank.getBankNo());
             reqData = reqData.replaceFirst("\\$\\{SKHM\\}", mallMemberBank.getName());
             if(mallMemberWithdraw.getRemark().equals("凭证提现")){
@@ -576,7 +603,7 @@
              */
             reqData = TRADE_MESSAGE;
 
-            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", FKZH);
+            reqData = reqData.replaceFirst("\\$\\{FKZH\\}", fkzhDic.getValue());
             reqData = reqData.replaceFirst("\\$\\{SKZH\\}", mallMemberBank.getBankNo());
             reqData = reqData.replaceFirst("\\$\\{SKHM\\}", mallMemberBank.getName());
             reqData = reqData.replaceFirst("\\$\\{SKYH\\}", mallMemberBank.getBankName()+mallMemberBank.getSubbranchName());
@@ -608,7 +635,7 @@
              * <opReq><serialNo>${serialNo}</serialNo><reqTime>${reqTime}</reqTime><ReqParam><ZHHA>${ZHHA}</ZHHA></ReqParam></opReq>
              */
             //原订单流水号
-            reqData = reqData.replaceFirst("\\$\\{ZHHA\\}", FKZH);
+            reqData = reqData.replaceFirst("\\$\\{ZHHA\\}", fkzhDic.getValue());
         }
 //		String serialNo = String.valueOf(Math.round(Math.random() * 10000))
 //				+ System.currentTimeMillis();
@@ -627,10 +654,10 @@
             e.printStackTrace();
         }
         buf.append("<customerId>");
-        buf.append(customerId);
+        buf.append(customerIdDic.getValue());
         buf.append("</customerId>");
         buf.append("<softwareId>");
-        buf.append(softwareId);
+        buf.append(softwareIdDic.getValue());
         buf.append("</softwareId>");
         buf.append("<functionId>");
         buf.append(serviceId.substring(0, 6));
@@ -657,7 +684,7 @@
      * @return
      * @throws UnsupportedEncodingException
      */
-    public static String signData(String orignalData)
+    public String signData(String orignalData)
             throws UnsupportedEncodingException {
         InetAddress addr = null;
         Socket socket = null;
@@ -669,9 +696,17 @@
                 + "<origin_data_len>" + orignalData.getBytes("GBK").length
                 + "</origin_data_len>\n" + "<origin_data>" + orignalData
                 + "</origin_data>\n" + "</msg_body>\n" + "</msg>";
+
+        DataDictionaryCustom VERIFY_IPDic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_VERIFY_IP.getType(),
+                DataDictionaryEnum.BANK_TRANS_VERIFY_IP.getCode()
+        );DataDictionaryCustom VERIFY_PORT_Dic = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
+                DataDictionaryEnum.BANK_TRANS_VERIFY_PORT.getType(),
+                DataDictionaryEnum.BANK_TRANS_VERIFY_PORT.getCode()
+        );
         try {
-            addr = InetAddress.getByName(VERIFY_IP);
-            socket = new Socket(addr, VERIFY_PORT);
+            addr = InetAddress.getByName(VERIFY_IPDic.getValue());
+            socket = new Socket(addr, Integer.parseInt(VERIFY_PORT_Dic.getValue()));
 //            InetAddress localHost = addr.getLocalHost();
 //            socket = new Socket(localHost, VERIFY_PORT);
             // 发送
diff --git a/src/main/resources/lkl/prd/api_cert.cer b/src/main/resources/lkl/prd/api_cert.cer
new file mode 100644
index 0000000..b36b130
--- /dev/null
+++ b/src/main/resources/lkl/prd/api_cert.cer
@@ -0,0 +1,22 @@
+-----BEGIN CERTIFICATE-----
+MIIDoDCCAoigAwIBAgIGAYgE5ezZMA0GCSqGSIb3DQEBBQUAMGAxFDASBgNVBAMM
+C0xBS0FMQS1MQU9QMQswCQYDVQQGEwJDTjEXMBUGA1UECgwOTGFrYWxhIENvLixM
+dGQxDzANBgNVBAsMBkxLTC1ZRjERMA8GA1UEBwwIc2hhbmdoYWkwHhcNMjMwNTEw
+MDkwMjM3WhcNMzMwNTEwMDkwMjM3WjBgMRQwEgYDVQQDDAtMQUtBTEEtTEFPUDEL
+MAkGA1UEBhMCQ04xFzAVBgNVBAoMDkxha2FsYSBDby4sTHRkMQ8wDQYDVQQLDAZM
+S0wtWUYxETAPBgNVBAcMCHNoYW5naGFpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
+MIIBCgKCAQEAhGqQ9TRIdrHHeffmqqXRe/x2UNoD/lzTQsCUlUh1quwvoahHaqeU
+cbmbjYKJlnJK8EDy1VrF+M0YmWDGhFUesVLe4HexyYFgIJMha51kz7/HM2lyjEcq
+DYXJqfGpuUzq8U9bgbIskvlRCGjfx1vg+zTNH70KVBQLrzuOSJuQKIFEbEuU5Gms
+MdxCecvm5hjlqMP7JxuQQaCkULUClu9LYxub4oyjIiSY0gqKKpfI3VEVmdu2dvsr
+Hp0/ySbDAiocddc0oZ2utxwwQYOtMN2uH6SPObidrkBJ/Rb02jEuFXKjZWGUuv0T
+a1QftH5hCb7rLzhCG6VvcSwvpepkXtHXIQIDAQABo2AwXjAPBgNVHRMECDAGAQH/
+AgEAMB8GA1UdIwQYMBaAFGK3owb/1UEa3uYyZU2/5TTPsLlIMB0GA1UdDgQWBBRi
+t6MG/9VBGt7mMmVNv+U0z7C5SDALBgNVHQ8EBAMCBsAwDQYJKoZIhvcNAQEFBQAD
+ggEBAD9Lae2EuSFgCwsPcuSZEtvtL33s8/HagvjD5vkRr584SJfs90US1P013J0Y
+lN8LtutEo3CjPVJUfsltIleD0Dnh4seJuJ3SCorTXzTt0GNL5jqazJrJJHKgjrt4
+kh5P94uoX5ujZxNEtav/o4rhVtcAfCUxsrDrSnhSd+nQr1PlR5qhMAFrKcaFsZy6
+HTvP5KqiopKUmMbMGUQzfsNQiS8h+c6seDpMfK3T3BgnaV0mWduasDsQm6/tnQNv
+/d2WVudz0G08WhHr/653uB5I3wungKWMLSCa8ehZgUdE+BN3x1zOImyk/CHNHCGt
+Wbn2HUolxQ8K3s3qIzvan+aOyWU=
+-----END CERTIFICATE-----
diff --git a/src/main/resources/lkl/prd/api_private_key.pem b/src/main/resources/lkl/prd/api_private_key.pem
new file mode 100644
index 0000000..448b0d9
--- /dev/null
+++ b/src/main/resources/lkl/prd/api_private_key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCEapD1NEh2scd5
+9+aqpdF7/HZQ2gP+XNNCwJSVSHWq7C+hqEdqp5RxuZuNgomWckrwQPLVWsX4zRiZ
+YMaEVR6xUt7gd7HJgWAgkyFrnWTPv8czaXKMRyoNhcmp8am5TOrxT1uBsiyS+VEI
+aN/HW+D7NM0fvQpUFAuvO45Im5AogURsS5Tkaawx3EJ5y+bmGOWow/snG5BBoKRQ
+tQKW70tjG5vijKMiJJjSCooql8jdURWZ27Z2+ysenT/JJsMCKhx11zShna63HDBB
+g60w3a4fpI85uJ2uQEn9FvTaMS4VcqNlYZS6/RNrVB+0fmEJvusvOEIbpW9xLC+l
+6mRe0dchAgMBAAECggEAVEpZ2Bzd++CTMErj5MEFJr3Auxrs6+A/AwEAFD852AHd
+GDS8sWHXlsUmBeCQoNpEZceSTMopt4UnIYt/EwH0NcCg65aF79WRUWsXHR/l6nET
+5uA68JzkYhNGGg4hkjkqXU283ESFJ1HZiVbpDEiqYH5uDMQTbQ4NmhB5NDMCgyVL
+oUkJD4/PYxglkykjih0RV58X/UU8T7R318uzqTq5DcrEHIwRdzdx1GzbwuoTFGnV
+965YTKBWkIRjIFTDmZVNQEcXo0kRETiM+4/M6Q11LNKD6El077xBk6L6bzV+l0vb
+cmazWKCXLJXZxWCDntrcKLxPyHnsYqZ0uNhnEIenWQKBgQDCQ30+bIHlgQaAekP/
+RLKo0ot57Hy5gO8lGO9esk0O3uAtNFt8uU3bdPzTUUAe2DV/9dscDSPvIzSAovQb
+uvl8n0SXgnhK7xgv8EFbdNtZTi2upxGTmyXefR2Wq8ez7NpztxZkfgW3IS+awhw3
+W9+d0khI6rSWVxvWgYzdEsjXLwKBgQCuf2yFUpQFKpv/XeeqcUYPvfReP8FaT+zj
+YA3uSRwEuIpPjGENDuKjUjyoKOVww5PFQAaLGmtGVcsHs7q5KFSUK1O9hQ5D996z
+5LzJlgv9Giu51bDcx8b3846B6zTHVn4HNy87e/ac8r2+eXtHfm9E5bDy8H9qtCgv
+nWsKn5WirwKBgB6pWFNJ/RakTspogeMAjNJoqOsNkIIW/6fzT5S6v77hHrED2ozN
+EqTYyi7wXBaCOa+Atpyu1kUgYWEMV0spL8eju8fOJ/5rzn2Chk5RG231EPDIHdYW
+XtvHE6x8YIDdmX06IKar3WsSKdlbWejC74CReCdKJEa2aQZqXDlohZqxAoGAMRRT
+8JfOXDmk0MmXvD/J5emWjt+9wWoThcxhfrD/eXByLnecYHDcW/VobB+8kN/hcyxT
+6tIOdCTzSwJJNYTbbSVWk0qWPZW9BLoEQ2q5ioHO5KDu8toZ42mUnoQKPzrbjan+
+1etC7Nf1eFpwyyYLo8Q65cmw/NEZMHNFRSKnkq8CgYEAj0knhIXhf3ZOSaY5UB+6
+ZpQVS6h8I0E1sjRWRfw5ft6IXzEtLfO359o6KV9kmkkEPEiDPZht21uM9VeDMWwu
+tpA6V0TSZDmbqFxGUEACLZIngzIbi90/Q2BTxVZeYhL+/JBGWgO7mGa8EcnFWZR7
+7LUAYSNZFHQggWHwM+7/ADE=
+-----END PRIVATE KEY-----
diff --git a/src/main/resources/lkl/prd/api_public_key.pem b/src/main/resources/lkl/prd/api_public_key.pem
new file mode 100644
index 0000000..68be369
--- /dev/null
+++ b/src/main/resources/lkl/prd/api_public_key.pem
@@ -0,0 +1,9 @@
+-----BEGIN PUBLIC KEY-----
+MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAhGqQ9TRIdrHHeffmqqXR
+e/x2UNoD/lzTQsCUlUh1quwvoahHaqeUcbmbjYKJlnJK8EDy1VrF+M0YmWDGhFUe
+sVLe4HexyYFgIJMha51kz7/HM2lyjEcqDYXJqfGpuUzq8U9bgbIskvlRCGjfx1vg
++zTNH70KVBQLrzuOSJuQKIFEbEuU5GmsMdxCecvm5hjlqMP7JxuQQaCkULUClu9L
+Yxub4oyjIiSY0gqKKpfI3VEVmdu2dvsrHp0/ySbDAiocddc0oZ2utxwwQYOtMN2u
+H6SPObidrkBJ/Rb02jEuFXKjZWGUuv0Ta1QftH5hCb7rLzhCG6VvcSwvpepkXtHX
+IQIDAQAB
+-----END PUBLIC KEY-----
diff --git a/src/main/resources/templates/febs/views/modules/system/cashOutSetting.html b/src/main/resources/templates/febs/views/modules/system/cashOutSetting.html
index d9725df..e150787 100644
--- a/src/main/resources/templates/febs/views/modules/system/cashOutSetting.html
+++ b/src/main/resources/templates/febs/views/modules/system/cashOutSetting.html
@@ -43,6 +43,55 @@
                         </div>
                         <div class="layui-word-aux" style="margin-left: 150px;">互转手续费:例如25%,直接输入25</div>
                     </div>
+                    <blockquote class="layui-elem-quote blue-border">宁波银行提现设置</blockquote>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label  febs-form-item-require">9080-网址:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="urlStr"
+                                   lay-verify="required|text" autocomplete="off" class="layui-input" >
+                        </div>
+                        <div class="layui-word-aux" style="margin-left: 150px;">银行转账设置-接收报文url,使用NATAPP映射9080端口</div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label  febs-form-item-require">8010-网址:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="verifyIp"
+                                   lay-verify="required|text" autocomplete="off" class="layui-input" >
+                        </div>
+                        <div class="layui-word-aux" style="margin-left: 150px;">银行转账设置-签名端口,使用NATAPP映射8010端口</div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label  febs-form-item-require">8010-端口号:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="verifyPort"
+                                   lay-verify="required|text" autocomplete="off" class="layui-input" >
+                        </div>
+                        <div class="layui-word-aux" style="margin-left: 150px;">银行转账设置-签名ip,使用NATAPP映射8010端口号</div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label  febs-form-item-require">付款账号:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="fkzh"
+                                   lay-verify="required|text" autocomplete="off" class="layui-input" >
+                        </div>
+                        <div class="layui-word-aux" style="margin-left: 150px;">银行转账设置-付款账号</div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label  febs-form-item-require">customerId:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="customerId"
+                                   lay-verify="required|text" autocomplete="off" class="layui-input" >
+                        </div>
+                        <div class="layui-word-aux" style="margin-left: 150px;">银行转账设置-customerId</div>
+                    </div>
+                    <div class="layui-form-item">
+                        <label class="layui-form-label  febs-form-item-require">softwareId:</label>
+                        <div class="layui-input-block">
+                            <input type="text" name="softwareId"
+                                   lay-verify="required|text" autocomplete="off" class="layui-input" >
+                        </div>
+                        <div class="layui-word-aux" style="margin-left: 150px;">银行转账设置-softwareId</div>
+                    </div>
                 </div>
 
                 <div class="layui-card-footer">
@@ -88,6 +137,12 @@
 
         function initCashoutValue() {
             form.val("cashout-setting-form", {
+                "urlStr": cashout.urlStr,
+                "verifyIp": cashout.verifyIp,
+                "verifyPort": cashout.verifyPort,
+                "fkzh": cashout.fkzh,
+                "customerId": cashout.customerId,
+                "softwareId": cashout.softwareId,
                 "minCashOut": cashout.minCashOut,
                 "allCashOut": cashout.allCashOut,
                 "serviceFee": cashout.serviceFee,
diff --git a/src/test/java/cc/mrbird/febs/ProfitTest.java b/src/test/java/cc/mrbird/febs/ProfitTest.java
index 5040508..7215f1e 100644
--- a/src/test/java/cc/mrbird/febs/ProfitTest.java
+++ b/src/test/java/cc/mrbird/febs/ProfitTest.java
@@ -106,11 +106,11 @@
 //        nbyhService.tradeSingeOuterTransfer(306L);
 //        nbyhService.accountInfoQuery(306L);
 //        nbyhService.transferResultInfoQuery(315L);
-
+//
 //        mallMemberService.chargeAgree(307L);
 //        mallMemberService.searchInfo(307L);
 
-        agentService.perkAgent();
+//        agentService.perkAgent();
     }
     @Test
     public void agentProfit() {

--
Gitblit v1.9.1