Browse Source

新增银行业务接口

xie.kaifeng 5 months ago
parent
commit
80920845f9

+ 1 - 1
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/BankAccountController.java

@@ -63,7 +63,7 @@ public class BankAccountController {
     }
 
     @ApiOperation("审核")
-    @RequestMapping(method = RequestMethod.GET, value = "/getSignBankById")
+    @RequestMapping(method = RequestMethod.GET, value = "/audit")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     private AjaxResult audit(String applyexchticket, Integer Auditflag, String Msg, HttpServletRequest request) {
         return iBankAccountSignService.audit(Auditflag, Msg, applyexchticket, request);

+ 32 - 3
mtp3-century/src/main/java/com/muchinfo/mtp3century/controller/BankBusinessController.java

@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 
 @RestController
 @RequestMapping("/bankBusiness")
@@ -135,14 +136,14 @@ public class BankBusinessController {
         return iBankBusinessService.dealBankCusBankSign(param, request);
     }
 
-    @ApiOperation("银行业务->托管银行配置-->签解约查询-->获取列表")
+    @ApiOperation("银行业务-->签解约查询-->获取列表")
     @ApiResponse(code = 200, message = "成功", response = PageResult.class)
     @RequestMapping(method = RequestMethod.GET, value = "/signLogQuery")
     public PageResult<BankAccountSignLogQueryResult> signLogQuery(BankAccountSignLogQueryParam param, HttpServletRequest request) {
         return iBankBusinessService.signLogQuery(param, request);
     }
 
-    @ApiOperation("银行业务->托管银行配置-->签解约查询-->详情")
+    @ApiOperation("银行业务-->签解约查询-->详情")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     @RequestMapping(method = RequestMethod.GET, value = "/signLogDetail")
     public AjaxResult<BankAccountsignlog> signLogDetail(String cusbankid, Integer exchticket, HttpServletRequest request) {
@@ -150,7 +151,7 @@ public class BankBusinessController {
     }
 
     @RequestMapping(method = RequestMethod.GET, value = "/signLogExport")
-    @ApiOperation("银行业务->托管银行配置-->签解约查询-->导出")
+    @ApiOperation("银行业务-->签解约查询-->导出")
     @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
     public AjaxResult signLogExport(BankAccountSignLogQueryParam param, HttpServletRequest request) {
         return iBankBusinessService.signLogExport(param, request);
@@ -183,4 +184,32 @@ public class BankBusinessController {
     public PageResult<HybridBankinfo> querychannelbanklist(BankChannleBankParam param, HttpServletRequest request) {
         return iBankBusinessService.querychannelbanklist(param, request);
     }
+
+    @ApiOperation("银行业务->银行账号查询")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/bankQueryAccInfo")
+    public AjaxResult<BankQueryAccInfoResult> bankQueryAccInfo(Integer accountid, HttpServletRequest request) {
+        return iBankBusinessService.bankQueryAccInfo(accountid, request);
+    }
+
+    @ApiOperation("银行业务->手续费提现-->获取列表")
+    @ApiResponse(code = 200, message = "成功", response = PageResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/queryCommission")
+    public PageResult<BankAmounttransfer> queryCommission(BankCommissionParam param, HttpServletRequest request) {
+        return iBankBusinessService.queryCommission(param, request);
+    }
+
+    @ApiOperation("银行业务->手续费提现-->新增获取手续费金额")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/queryMoneyjdjs")
+    public AjaxResult<BigDecimal> queryMoneyjdjs(String cusbankid, String acctype, HttpServletRequest request) {
+        return iBankBusinessService.queryMoneyjdjs(cusbankid,acctype, request);
+    }
+
+    @ApiOperation("银行业务->手续费提现-->新增手续费提现")
+    @ApiResponse(code = 200, message = "成功", response = AjaxResult.class)
+    @RequestMapping(method = RequestMethod.GET, value = "/addjdjs")
+    public AjaxResult addjdjs(BankAmounttransfer param, HttpServletRequest request) {
+        return iBankBusinessService.addjdjs(param, request);
+    }
 }

+ 9 - 0
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/IBankBusinessService.java

@@ -6,6 +6,7 @@ import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.bankbusiness.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
 
 public interface IBankBusinessService {
     AjaxResult<BankSystemconfig> banksystemconfig(HttpServletRequest request);
@@ -53,4 +54,12 @@ public interface IBankBusinessService {
     AjaxResult deletemixbankedit(String channelCode, HttpServletRequest request);
 
     PageResult<HybridBankinfo> querychannelbanklist(BankChannleBankParam param, HttpServletRequest request);
+
+    AjaxResult<BankQueryAccInfoResult> bankQueryAccInfo(Integer accountid, HttpServletRequest request);
+
+    PageResult<BankAmounttransfer> queryCommission(BankCommissionParam param, HttpServletRequest request);
+
+    AjaxResult<BigDecimal> queryMoneyjdjs(String cusbankid, String acctype, HttpServletRequest request);
+
+    AjaxResult addjdjs(BankAmounttransfer param, HttpServletRequest request);
 }

+ 224 - 3
mtp3-century/src/main/java/com/muchinfo/mtp3century/service/impl/BankBusinessServiceImpl.java

@@ -5,23 +5,32 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.muchinfo.mtp.proto.BankMI1;
+import com.muchinfo.mtp.proto.Common;
 import com.muchinfo.mtp3century.exception.GlobalException;
 import com.muchinfo.mtp3century.service.IBankBusinessService;
 import com.muchinfo.mtp3century.service.ICommonService;
 import com.muchinfo.mtp3century.utils.AjaxResult;
 import com.muchinfo.mtp3common.enumtype.Constants;
+import com.muchinfo.mtp3common.enumtype.FunCodeConstants;
 import com.muchinfo.mtp3common.enumtype.MessageType;
 import com.muchinfo.mtp3common.enumtype.SysConstants;
 import com.muchinfo.mtp3common.utils.DateTimeUtils;
 import com.muchinfo.mtp3common.utils.EncryptionUtils;
 import com.muchinfo.mtp3common.utils.ExportUtil;
+import com.muchinfo.mtp3common.utils.SerialNumberUtils;
+import com.muchinfo.mtp3common.vo.Calculator;
 import com.muchinfo.mtp3common.vo.ExportResult;
 import com.muchinfo.mtp3common.vo.PageResult;
+import com.muchinfo.mtp3common.vo.ProtoHelper;
 import com.muchinfo.mtp3interface.mapper.*;
 import com.muchinfo.mtp3pojos.entity.*;
 import com.muchinfo.mtp3pojos.vo.bankbusiness.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.amqp.core.Message;
+import org.springframework.amqp.core.MessageProperties;
+import org.springframework.amqp.rabbit.core.RabbitTemplate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -34,6 +43,7 @@ import java.util.*;
 @Service
 public class BankBusinessServiceImpl implements IBankBusinessService {
 
+    private final String BANK_TYPE_JDJS = "jdjs";
     private final Logger log = LoggerFactory.getLogger(this.getClass());
     @Resource
     private IBankSystemconfigMapper iBankSystemconfigMapper;
@@ -69,7 +79,14 @@ public class BankBusinessServiceImpl implements IBankBusinessService {
     private IHybridChannelConfigMapper iHybridChannelConfigMapper;
     @Resource
     private IHybridBankinfoMapper iHybridBankinfoMapper;
-
+    @Resource
+    private ITaaccountMapper iTaaccountMapper;
+    @Resource
+    private RabbitTemplate rabbitTemplate;
+    @Resource
+    private IBankAmounttransferMapper iBankAmounttransferMapper;
+    @Resource
+    private IMarketrunMapper iMarketrunMapper;
     @Override
     public AjaxResult<BankSystemconfig> banksystemconfig(HttpServletRequest request) {
         List<BankSystemconfig> bankSystemconfigs = iBankSystemconfigMapper.selectList(new QueryWrapper<>());
@@ -221,7 +238,7 @@ public class BankBusinessServiceImpl implements IBankBusinessService {
             if (!cusbankinfo.equals(param.getCusbankid())) {
                 BankCusbankinfo bankCus = iBankCusbankinfoMapper.selectOne(new QueryWrapper<BankCusbankinfo>().eq("cusbankid", param.getCusbankid()));
                 if (bankCus != null) {
-                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM030.getCode(), request.getHeader("Accept-Language"));
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM031.getCode(), request.getHeader("Accept-Language"));
                 }
 
                 BankCusbankstatus bankCusbankstatus = iBankCusbankstatusMapper.selectOne(new QueryWrapper<BankCusbankstatus>()
@@ -251,7 +268,7 @@ public class BankBusinessServiceImpl implements IBankBusinessService {
     private AjaxResult saveBankInfo(BankCusBankInfoParam param, HttpServletRequest request) {
         BankCusbankinfo bankCus = iBankCusbankinfoMapper.selectOne(new QueryWrapper<BankCusbankinfo>().eq("cusbankid", param.getCusbankid()));
         if (bankCus != null) {
-            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM030.getCode(), request.getHeader("Accept-Language"));
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM031.getCode(), request.getHeader("Accept-Language"));
         }
         BankCusbankinfo bankCusBankInfo = insertBankInfo(param);
         iBankCusbankinfoMapper.insert(bankCusBankInfo);
@@ -590,5 +607,209 @@ public class BankBusinessServiceImpl implements IBankBusinessService {
         return pageResult;
     }
 
+    @Override
+    public AjaxResult<BankQueryAccInfoResult> bankQueryAccInfo(Integer accountid, HttpServletRequest request) {
+        BankQueryAccInfoResult result = iTaaccountMapper.bankQueryAccInfo(accountid);
+        if (!Objects.isNull(result)) {
+            double canUserAccount;
+            BankAccountsign bankAccSign = iBankAccountsignMapper.selectOne(new QueryWrapper<BankAccountsign>()
+                    .eq("accountcode", String.valueOf(accountid)));
+            Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_bank);
+
+            Calculator ca = new Calculator(uuid);
+            SerialNumberUtils.lockMap.put(uuid, ca);
+            BankMI1.t2bQueryAccInfosReq.Builder builder = BankMI1.t2bQueryAccInfosReq.newBuilder();
+            Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+            hd.setUUID(uuid.toString());
+            hd.setFunCode(FunCodeConstants.FunCode_Trade_t2bQueryAccInfosReq);
+
+            builder.setExtOperatorID(uuid);
+            if (bankAccSign != null) {
+                hd.setAccountID(Long.parseLong(bankAccSign.getAccountcode()));
+                builder.setHeader(hd);
+                builder.setCusBankID(bankAccSign.getCusbankid());
+                builder.setAccountCode(bankAccSign.getAccountcode());
+                if (StringUtils.isNotBlank(bankAccSign.getAccountname())) {
+                    builder.setBankChildAccountName(bankAccSign.getAccountname());
+                }
+                if (StringUtils.isNotBlank(bankAccSign.getBankchildaccount())) {
+                    builder.setBankChildAccount(bankAccSign.getBankchildaccount());
+                }
+                // 查询类别[1-查询所有信息;2-查询余额;3-查询银行卡]
+                builder.setQueryType("2");
+            } else {
+                builder.setHeader(hd);
+                builder.setCusBankID("");
+                builder.setAccountCode("");
+                builder.setBankChildAccountName("");
+                builder.setBankChildAccount("");
+                builder.setQueryType("2");
+            }
+            log.debug(builder.build().toString());
+            byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                    FunCodeConstants.FunCode_Trade_t2bQueryAccInfosReq);
+            rabbitTemplate.send(SysConstants.RabbitBankNtfKey,
+                    new Message(body, new MessageProperties()));
+            synchronized (ca) {
+                try {
+                    ca.wait(10000);
+                    Object rsp = ca.obj;
+                    if (rsp != null) {
+                        BankMI1.t2bQueryAccInfosRsp rsp_ = (BankMI1.t2bQueryAccInfosRsp) rsp;
+                        canUserAccount = rsp_.getCanUseAmount();
+                        result.setCanUserAccount(BigDecimal.valueOf(canUserAccount));
+                    } else {
+                        result.setCanUserAccount(BigDecimal.ZERO);
+                    }
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                } finally {
+                    SerialNumberUtils.lockMap.remove(uuid);
+                }
+            }
+        }
+        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), result);
+    }
 
+    @Override
+    public PageResult<BankAmounttransfer> queryCommission(BankCommissionParam param, HttpServletRequest request) {
+        IPage<BankAmounttransfer> page = new Page<>(param.getPageNum(), param.getPageSize());
+        IPage<BankAmounttransfer> resultIPage = iBankAmounttransferMapper.selectPage(page, new QueryWrapper<BankAmounttransfer>()
+                .eq(StringUtils.isNotBlank(param.getCusbankid()), "cusbankid", param.getCusbankid())
+                .eq(param.getApplystatus() != null, "applystatus", param.getApplystatus()));
+        PageResult<BankAmounttransfer> pageResult = new PageResult<>();
+        pageResult.setCode(Constants.Success_Code_Design);
+        pageResult.setMessage(AjaxResult.dealMsg(MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language")));
+        pageResult.setPages(resultIPage.getPages());
+        pageResult.setCurrent(resultIPage.getCurrent());
+        pageResult.setTotal(resultIPage.getTotal());
+        pageResult.setPageSize(resultIPage.getSize());
+        pageResult.setData(resultIPage.getRecords());
+        return pageResult;
+    }
+
+    @Override
+    public AjaxResult<BigDecimal> queryMoneyjdjs(String cusbankid, String acctype, HttpServletRequest request) {
+        String bankNo;
+        Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_bank);
+        BankMI1.t2bQueryAccInfosReq.Builder builder = BankMI1.t2bQueryAccInfosReq.newBuilder();
+        BankCusbankinfo info = iBankCusbankinfoMapper.selectOne(new QueryWrapper<BankCusbankinfo>()
+                .eq("CUSBANKID", cusbankid));
+        //数据检查
+        if (StringUtils.isBlank(info.getExputbankid()) || StringUtils.isBlank(info.getExputpaybankaccname()) || StringUtils.isBlank(info.getExputpaybankaccno())) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM032.getCode(), request.getHeader("Accept-Language"));
+        }
+        if (BANK_TYPE_JDJS.equals(info.getCusbankid())) {
+            bankNo = info.getExputpaybankaccsubno();
+        } else {
+            bankNo = info.getExchpaybankaccno();
+        }
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_t2bQueryAccInfosReq);
+        builder.setHeader(hd);
+        builder.setCusBankID(cusbankid);
+        builder.setExtOperatorID(uuid);
+        builder.setTradeDate(DateTimeUtils.format(new Date(), DateTimeUtils.DATE_CHAR_PATTERN));
+        //光大没有查询账户要求,特殊处理,金登需要配置查询账户
+        builder.setAccountCode(bankNo);
+        builder.setQueryType(acctype.toString());
+
+        byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                FunCodeConstants.FunCode_Trade_t2bQueryAccInfosReq);
+        log.debug(builder.build().toString());
+        Calculator ca = new Calculator(uuid);
+        SerialNumberUtils.lockMap.put(uuid, ca);
+
+        rabbitTemplate.send(SysConstants.RabbitBankNtfKey, new Message(body, new MessageProperties()));
+
+        synchronized (ca) {
+            try {
+                ca.wait(10000);
+                Object rsp = ca.obj;
+                if (rsp != null) {
+                    BankMI1.t2bQueryAccInfosRsp rsp_ = (BankMI1.t2bQueryAccInfosRsp) rsp;
+                    return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"), rsp_.getCanUseAmount());
+
+                } else {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM006.getCode(), request.getHeader("Accept-Language"));
+                }
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            } finally {
+                SerialNumberUtils.lockMap.remove(uuid);
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public AjaxResult addjdjs(BankAmounttransfer transfer, HttpServletRequest request) {
+        BankCusbankinfo info = iBankCusbankinfoMapper.selectOne(new QueryWrapper<BankCusbankinfo>()
+                .eq("CUSBANKID", transfer.getCusbankid()));
+        Marketrun marketRun = iMarketrunMapper.selectOne(new QueryWrapper<Marketrun>().eq("marketid",6L));
+        if(transfer.getAmount().compareTo(BigDecimal.ZERO) == 0){
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM033.getCode(), request.getHeader("Accept-Language"));
+        }
+        if (StringUtils.isBlank(info.getExputbankid()) || StringUtils.isBlank(info.getExputpaybankaccname()) || StringUtils.isBlank(info.getExputpaybankaccno())) {
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM032.getCode(), request.getHeader("Accept-Language"));
+        }
+        if(41 != marketRun.getRunstatus()){
+            return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM034.getCode(), request.getHeader("Accept-Language"));
+        }
+        //金登查询时间特殊处理
+        int time = 10000;
+        if(BANK_TYPE_JDJS.equals(info.getCusbankid())){
+            time = 60000;
+        }
+
+        Long uuid = SerialNumberUtils.getNewSerialNumber(SerialNumberUtils.prefix_bank);
+
+        BankMI1.t2bExchOutInBankReq.Builder builder = BankMI1.t2bExchOutInBankReq.newBuilder();
+
+        Common.MessageHead.Builder hd = Common.MessageHead.newBuilder();
+        hd.setFunCode(FunCodeConstants.FunCode_Trade_t2bExchOutInBankReq);
+        builder.setHeader(hd);
+
+        builder.setCusBankID(transfer.getCusbankid());
+        builder.setExtOperatorID(uuid);
+        builder.setTradeDate(DateTimeUtils.format(new Date(), DateTimeUtils.DATE_CHAR_PATTERN));
+        builder.setTransferType(transfer.getTransfertype());
+        builder.setAmount(transfer.getAmount().doubleValue());
+        builder.setCurrency(info.getCurrency());
+        builder.setBankAccNo(info.getExchpaybankaccno());
+        builder.setBankAccName(info.getExchpaybankaccname());
+        builder.setTargetBankId(info.getExputbankid());
+        builder.setTargetBankAccNo(info.getExputpaybankaccno());
+        builder.setTargetBankAccName(info.getExputpaybankaccname());
+
+        byte[] body = ProtoHelper.getNTAS(builder.build().toByteArray(),
+                FunCodeConstants.FunCode_Trade_t2bExchOutInBankReq);
+
+        Calculator ca = new Calculator(uuid);
+        SerialNumberUtils.lockMap.put(uuid, ca);
+        log.debug(builder.build().toString());
+        rabbitTemplate.send(SysConstants.RabbitBankNtfKey, new Message(body, new MessageProperties()));
+
+        synchronized (ca) {
+            try {
+                ca.wait(time);
+                Object rsp = ca.obj;
+                if (rsp != null) {
+                    BankMI1.t2bExchOutInBankRsp rsp_ = (BankMI1.t2bExchOutInBankRsp) rsp;
+                    if (rsp_.getStatus() == 0) {
+                        return AjaxResult.success(Constants.Success_Code_Design, MessageType.MESSAGE_CODE_SYSTEM001.getCode(), request.getHeader("Accept-Language"));
+                    } else {
+                        return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM002.getCode(), request.getHeader("Accept-Language"),rsp_.getBankRetMsg());
+                    }
+                } else {
+                    return AjaxResult.error(Constants.Error_Code_Design, MessageType.MESSAGE_ERROR_CODE_SYSTEM006.getCode(), request.getHeader("Accept-Language"));
+                }
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            } finally {
+                SerialNumberUtils.lockMap.remove(uuid);
+            }
+        }
+        return null;
+    }
 }

+ 16 - 0
mtp3-century/src/main/resources/mapper/ISystemRunService.xml → mtp3-century/src/main/resources/mapper/TaaccountMapper.xml

@@ -424,4 +424,20 @@
             and t.accountid in (select accountid from tradeposition tp where tp.goodsid = #{vo.goodsid})
         </if>
     </select>
+    <select id="bankQueryAccInfo" resultType="com.muchinfo.mtp3pojos.vo.bankbusiness.BankQueryAccInfoResult"
+            parameterType="java.lang.Integer">
+        select t.accountid as accountid,us.accountname as accountname,
+        u2.accountname as organizaName,u1.accountname as membername,
+        t.currentbalance as balance,b.bankchildaccount
+        from taaccount t
+        left join bank_accountsign b on t.accountid = b.accountcode
+        left join useraccount us on t.userid=us.userid
+        left join useraccount u1 on us.memberuserid=u1.userid
+        left join useraccount u2 on us.parentuserid=u2.userid
+        <where>
+            <if test="accountid != null and accountid != '' ">
+                and t.accountid = #{accountid}
+            </if>
+        </where>
+    </select>
 </mapper>

+ 3 - 0
mtp3-century/src/main/resources/message_en.properties

@@ -60,6 +60,9 @@ message_error_code_system028=The enumeration item value already exists
 message_error_code_system029=Missing configuration item
 message_error_code_system030=Delete failed, signed through this channel
 message_error_code_system031=The custodian bank number already exists
+message_error_code_system032=The information related to the withdrawal account for handling fees has not been configured. Please go to the bank configuration page to edit the relevant information!
+message_error_code_system033=The cash withdrawal amount must be greater than 0!
+message_error_code_system034=The bank is not in a successful check-in status and does not support withdrawal of transaction fees!
 login_error_code_001=Account or password error
 login_error_code_002=Unauthorized access is not allowed! Please contact the administrator to handle it!
 login_error_code_003=Login locked!

+ 3 - 0
mtp3-century/src/main/resources/message_th.properties

@@ -60,6 +60,9 @@ message_error_code_system028=\u0E04\u0E48\u0E32\u0E02\u0E2D\u0E07\u0E23\u0E32\u0
 message_error_code_system029=\u0E02\u0E32\u0E14\u0E23\u0E32\u0E22\u0E01\u0E32\u0E23\u0E1B\u0E23\u0E31\u0E1A\u0E41\u0E15\u0E48\u0E07
 message_error_code_system030=\u0E01\u0E32\u0E23\u0E25\u0E1A\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27\u0E44\u0E14\u0E49\u0E25\u0E07\u0E19\u0E32\u0E21\u0E43\u0E19\u0E0A\u0E48\u0E2D\u0E07\u0E17\u0E32\u0E07\u0E19\u0E35\u0E49\u0E41\u0E25\u0E49\u0E27
 message_error_code_system031=\u0E2B\u0E21\u0E32\u0E22\u0E40\u0E25\u0E02\u0E18\u0E19\u0E32\u0E04\u0E32\u0E23\u0E17\u0E35\u0E48\u0E21\u0E35\u0E01\u0E32\u0E23\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23 \u0E21\u0E35\u0E2D\u0E22\u0E39\u0E48\u0E41\u0E25\u0E49\u0E27
+message_error_code_system032=\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21\u0E01\u0E32\u0E23\u0E16\u0E2D\u0E19\u0E40\u0E07\u0E34\u0E19 \u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07\u0E01\u0E31\u0E1A\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E04\u0E48\u0E32\u0E42\u0E1B\u0E23\u0E14\u0E44\u0E1B\u0E17\u0E35\u0E48\u0E2B\u0E19\u0E49\u0E32\u0E01\u0E32\u0E23\u0E01\u0E33\u0E2B\u0E19\u0E14\u0E04\u0E48\u0E32\u0E18\u0E19\u0E32\u0E04\u0E32\u0E23\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E41\u0E01\u0E49\u0E44\u0E02\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E17\u0E35\u0E48\u0E40\u0E01\u0E35\u0E48\u0E22\u0E27\u0E02\u0E49\u0E2D\u0E07!
+message_error_code_system033=\u0E16\u0E2D\u0E19\u0E40\u0E07\u0E34\u0E19\u0E2A\u0E14\u0E44\u0E14\u0E49\u0E21\u0E32\u0E01\u0E01\u0E27\u0E48\u0E32 0!
+message_error_code_system034=\u0E18\u0E19\u0E32\u0E04\u0E32\u0E23\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E40\u0E02\u0E49\u0E32\u0E2A\u0E39\u0E48\u0E23\u0E30\u0E1A\u0E1A\u0E2A\u0E16\u0E32\u0E19\u0E30\u0E2A\u0E33\u0E40\u0E23\u0E47\u0E08\u0E04\u0E48\u0E32\u0E18\u0E23\u0E23\u0E21\u0E40\u0E19\u0E35\u0E22\u0E21\u0E01\u0E32\u0E23\u0E16\u0E2D\u0E19\u0E40\u0E07\u0E34\u0E19\u0E44\u0E21\u0E48\u0E23\u0E2D\u0E07\u0E23\u0E31\u0E1A!
 login_error_code_001=\u0E1A\u0E31\u0E0D\u0E0A\u0E35\u0E2B\u0E23\u0E37\u0E2D\u0E23\u0E2B\u0E31\u0E2A\u0E1C\u0E48\u0E32\u0E19\u0E44\u0E21\u0E48\u0E16\u0E39\u0E01\u0E15\u0E49\u0E2D\u0E07
 login_error_code_002=\u0E44\u0E21\u0E48\u0E2A\u0E32\u0E21\u0E32\u0E23\u0E16\u0E40\u0E02\u0E49\u0E32\u0E16\u0E36\u0E07\u0E44\u0E14\u0E49\u0E42\u0E14\u0E22\u0E44\u0E21\u0E48\u0E44\u0E14\u0E49\u0E23\u0E31\u0E1A\u0E2D\u0E19\u0E38\u0E0D\u0E32\u0E15! \u0E01\u0E23\u0E38\u0E13\u0E32\u0E15\u0E34\u0E14\u0E15\u0E48\u0E2D\u0E1C\u0E39\u0E49\u0E14\u0E39\u0E41\u0E25\u0E23\u0E30\u0E1A\u0E1A\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23!
 login_error_code_003=\u0E25\u0E47\u0E2D\u0E01\u0E2D\u0E34\u0E19!

+ 3 - 0
mtp3-century/src/main/resources/message_vi.properties

@@ -60,6 +60,9 @@ message_error_code_system028=Gi\u00E1 tr\u1ECB Enumeration \u0111\u00E3 t\u1ED3n
 message_error_code_system029=Thi\u1EBFu m\u1EE5c c\u1EA5u h\u00ECnh
 message_error_code_system030=X\u00F3a kh\u00F4ng th\u00E0nh c\u00F4ng, \u0111\u00E3 \u0111\u0103ng k\u00FD v\u1EDBi k\u00EAnh n\u00E0y
 message_error_code_system031=S\u1ED1 ng\u00E2n h\u00E0ng k\u00FD qu\u1EF9 \u0111\u00E3 c\u00F3
+message_error_code_system032=Th\u00F4ng tin li\u00EAn quan \u0111\u1EBFn t\u00E0i kho\u1EA3n r\u00FAt ti\u1EC1n th\u1EE7 t\u1EE5c ch\u01B0a \u0111\u01B0\u1EE3c c\u1EA5u h\u00ECnh, xin vui l\u00F2ng \u0111\u1EBFn trang c\u1EA5u h\u00ECnh ng\u00E2n h\u00E0ng \u0111\u1EC3 ch\u1EC9nh s\u1EEDa th\u00F4ng tin li\u00EAn quan!
+message_error_code_system033=S\u1ED1 ti\u1EC1n m\u1EB7t ph\u1EA3i l\u1EDBn h\u01A1n 0!
+message_error_code_system034=Ng\u00E2n h\u00E0ng kh\u00F4ng ph\u1EA3i k\u00FD \u0111\u1EBFn tr\u1EA1ng th\u00E1i th\u00E0nh c\u00F4ng, kh\u00F4ng h\u1ED7 tr\u1EE3 r\u00FAt ti\u1EC1n th\u1EE7 t\u1EE5c!
 login_error_code_001=L\u1ED7i t\u00E0i kho\u1EA3n ho\u1EB7c m\u1EADt kh\u1EA9u
 login_error_code_002=Kh\u00F4ng \u0111\u01B0\u1EE3c ph\u00E9p, kh\u00F4ng th\u1EC3 truy c\u1EADp! Vui l\u00F2ng li\u00EAn h\u1EC7 v\u1EDBi qu\u1EA3n tr\u1ECB vi\u00EAn \u0111\u1EC3 x\u1EED l\u00FD!
 login_error_code_003=Kh\u00F3a \u0111\u0103ng nh\u1EADp!

+ 3 - 0
mtp3-century/src/main/resources/message_zh-cn.properties

@@ -60,6 +60,9 @@ message_error_code_system028=\u679A\u4E3E\u9879\u503C\u5DF2\u7ECF\u5B58\u5728
 message_error_code_system029=\u7F3A\u5931\u914D\u7F6E\u9879
 message_error_code_system030=\u5220\u9664\u5931\u8D25\uFF0C\u5DF2\u7528\u6B64\u6E20\u9053\u7B7E\u7EA6
 message_error_code_system031=\u6258\u7BA1\u94F6\u884C\u7F16\u53F7\u5DF2\u5B58\u5728
+message_error_code_system032=\u624B\u7EED\u8D39\u63D0\u73B0\u8D26\u6237\u76F8\u5173\u4FE1\u606F\u672A\u914D\u7F6E\uFF0C\u8BF7\u524D\u5F80\u94F6\u884C\u914D\u7F6E\u9875\u9762\u7F16\u8F91\u76F8\u5173\u4FE1\u606F\uFF01
+message_error_code_system033=\u63D0\u73B0\u91D1\u989D\u987B\u5927\u4E8E0\uFF01
+message_error_code_system034=\u94F6\u884C\u4E0D\u662F\u7B7E\u5230\u6210\u529F\u72B6\u6001\uFF0C\u4E0D\u652F\u6301\u624B\u7EED\u8D39\u63D0\u73B0\uFF01
 login_error_code_001=\u8D26\u6237\u6216\u5BC6\u7801\u9519\u8BEF
 login_error_code_002=\u672A\u7ECF\u5141\u8BB8\uFF0C\u4E0D\u53EF\u8BBF\u95EE\uFF01\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u5904\u7406\uFF01
 login_error_code_003=\u767B\u5F55\u9501\u5B9A\uFF01

+ 3 - 0
mtp3-century/src/main/resources/message_zh-hk.properties

@@ -60,6 +60,9 @@ message_error_code_system028=\u679A\u8209\u9805\u503C\u5DF2\u7D93\u5B58\u5728
 message_error_code_system029=\u7F3A\u5931\u914D\u5BD8\u9805
 message_error_code_system030=\u5220\u9664\u5931\u6557\uFF0C\u5DF2\u7528\u6B64\u901A\u8DEF\u7C3D\u7D04
 message_error_code_system031=\u8A17\u7BA1\u9280\u884C\u7DE8\u865F\u5DF2\u5B58\u5728
+message_error_code_system032=\u624B\u7E8C\u8CBB\u63D0\u73FE\u5E33\u6236\u76F8\u95DC\u8CC7\u8A0A\u672A\u914D\u5BD8\uFF0C\u8ACB\u524D\u5F80\u9280\u884C\u914D\u5BD8\u9801\u9762\u7DE8\u8F2F\u76F8\u95DC\u8CC7\u8A0A\uFF01
+message_error_code_system033=\u63D0\u73FE\u91D1\u984D\u9808\u5927\u65BC0\uFF01
+message_error_code_system034=\u9280\u884C\u4E0D\u662F\u7C3D\u5230\u6210\u529F\u72C0\u614B\uFF0C\u4E0D\u652F\u6301\u624B\u7E8C\u8CBB\u63D0\u73FE\uFF01
 login_error_code_001=\u5E33\u6236\u6216\u5BC6\u78BC\u932F\u8AA4
 login_error_code_002=\u672A\u7D93\u5141\u8A31\uFF0C\u4E0D\u53EF\u8A2A\u554F\uFF01 \u8ACB\u806F\u7CFB\u7BA1\u7406\u54E1\u8655\u7406\uFF01
 login_error_code_003=\u767B\u5165\u9396\u5B9A\uFF01

+ 3 - 0
mtp3-century/src/main/resources/message_zh-tw.properties

@@ -60,6 +60,9 @@ message_error_code_system028=\u679A\u8209\u9805\u503C\u5DF2\u7D93\u5B58\u5728
 message_error_code_system029=\u7F3A\u5931\u914D\u5BD8\u9805
 message_error_code_system030=\u5220\u9664\u5931\u6557\uFF0C\u5DF2\u7528\u6B64\u901A\u8DEF\u7C3D\u7D04
 message_error_code_system031=\u8A17\u7BA1\u9280\u884C\u7DE8\u865F\u5DF2\u5B58\u5728
+message_error_code_system032=\u624B\u7E8C\u8CBB\u63D0\u73FE\u5E33\u6236\u76F8\u95DC\u8CC7\u8A0A\u672A\u914D\u5BD8\uFF0C\u8ACB\u524D\u5F80\u9280\u884C\u914D\u5BD8\u9801\u9762\u7DE8\u8F2F\u76F8\u95DC\u8CC7\u8A0A\uFF01
+message_error_code_system033=\u63D0\u73FE\u91D1\u984D\u9808\u5927\u65BC0\uFF01
+message_error_code_system034=\u9280\u884C\u4E0D\u662F\u7C3D\u5230\u6210\u529F\u72C0\u614B\uFF0C\u4E0D\u652F\u6301\u624B\u7E8C\u8CBB\u63D0\u73FE\uFF01
 login_error_code_001=\u5E33\u6236\u6216\u5BC6\u78BC\u932F\u8AA4
 login_error_code_002=\u672A\u7D93\u5141\u8A31\uFF0C\u4E0D\u53EF\u8A2A\u554F\uFF01 \u8ACB\u806F\u7CFB\u7BA1\u7406\u54E1\u8655\u7406\uFF01
 login_error_code_003=\u767B\u5165\u9396\u5B9A\uFF01

+ 3 - 0
mtp3-common/src/main/java/com/muchinfo/mtp3common/enumtype/MessageType.java

@@ -68,6 +68,9 @@ public enum MessageType {
     MESSAGE_ERROR_CODE_SYSTEM029("message_error_code_system029", "缺失配置项"),
     MESSAGE_ERROR_CODE_SYSTEM030("message_error_code_system030", "删除失败,已用此渠道签约"),
     MESSAGE_ERROR_CODE_SYSTEM031("message_error_code_system031", "托管银行编号已存在"),
+    MESSAGE_ERROR_CODE_SYSTEM032("message_error_code_system032", "手续费提现账户相关信息未配置,请前往银行配置页面编辑相关信息!"),
+    MESSAGE_ERROR_CODE_SYSTEM033("message_error_code_system033", "提现金额须大于0!"),
+    MESSAGE_ERROR_CODE_SYSTEM034("message_error_code_system034", "银行不是签到成功状态,不支持手续费提现!"),
 
     LOGIN_ERROR_CODE_001("login_error_code_001", "账户或密码错误"),
     LOGIN_ERROR_CODE_002("login_error_code_002", "未经允许,不可访问!请联系管理员处理"),

+ 16 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/IBankAmounttransferMapper.java

@@ -0,0 +1,16 @@
+package com.muchinfo.mtp3interface.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.muchinfo.mtp3pojos.entity.BankAmounttransfer;
+
+/**
+ * <p>
+ * 平台资金划转申请表  -  银行系统参数表添加配置“平台资金划转是否需要审核” Mapper 接口
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-06-09
+ */
+public interface IBankAmounttransferMapper extends BaseMapper<BankAmounttransfer> {
+
+}

+ 3 - 0
mtp3-interface/src/main/java/com/muchinfo/mtp3interface/mapper/ITaaccountMapper.java

@@ -3,6 +3,7 @@ package com.muchinfo.mtp3interface.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.muchinfo.mtp3pojos.entity.Taaccount;
+import com.muchinfo.mtp3pojos.vo.bankbusiness.BankQueryAccInfoResult;
 import com.muchinfo.mtp3pojos.vo.common.TAAccountChildrenResult;
 import com.muchinfo.mtp3pojos.vo.investor.PersonalizationDelParam;
 import com.muchinfo.mtp3pojos.vo.marketrun.MarketRunPositionCountParam;
@@ -53,4 +54,6 @@ public interface ITaaccountMapper extends BaseMapper<Taaccount> {
     List<Long> getNoTradeConfigAccounts(@Param("vo") PersonalizationDelParam param);
 
     List<TaaccountMonitorVo> getMonitorInvestorsByAccPos(@Param("vo") MarketRunPositionCountParam param);
+
+    BankQueryAccInfoResult bankQueryAccInfo(@Param("accountid") Integer accountid);
 }

+ 112 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/entity/BankAmounttransfer.java

@@ -0,0 +1,112 @@
+package com.muchinfo.mtp3pojos.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 平台资金划转申请表  -  银行系统参数表添加配置“平台资金划转是否需要审核”
+ * </p>
+ *
+ * @author XKF
+ * @since 2025-06-09
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("BANK_AMOUNTTRANSFER")
+@ApiModel(value="BankAmounttransfer对象", description="平台资金划转申请表  -  银行系统参数表添加配置“平台资金划转是否需要审核”")
+public class BankAmounttransfer extends Model<BankAmounttransfer> {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "银行服务流水号")
+    private String exchticket;
+
+    @ApiModelProperty(value = "资金划转类别 - [1-资金调拨; 2-费用划转; 3-利息划转 4-手续费提现(金登光大) 5-利息提现(光大)] - 枚举“banktransfertype”")
+    @TableField("TRANSFERTYPE")
+    private Integer transfertype;
+
+    @ApiModelProperty(value = "交易日(yyyyMMdd)")
+    @TableField("TRADEDATE")
+    private String tradedate;
+
+    @ApiModelProperty(value = "银行流水")
+    @TableField("BANKTICKET")
+    private String bankticket;
+
+    @ApiModelProperty(value = "托管银行编号")
+    @TableField("CUSBANKID")
+    private String cusbankid;
+
+    @ApiModelProperty(value = "银行账号")
+    @TableField("BANKACCNO")
+    private String bankaccno;
+
+    @ApiModelProperty(value = "银行账户名")
+    @TableField("BANKACCNAME")
+    private String bankaccname;
+
+    @ApiModelProperty(value = "收款方银行行号")
+    @TableField("TARGETBANKID")
+    private String targetbankid;
+
+    @ApiModelProperty(value = "收款方银行账号")
+    @TableField("TARGETBANKACCNO")
+    private String targetbankaccno;
+
+    @ApiModelProperty(value = "收款方银行账户名")
+    @TableField("TARGETBANKACCNAME")
+    private String targetbankaccname;
+
+    @ApiModelProperty(value = "开始日期")
+    @TableField("BEGINDATE")
+    private Date begindate;
+
+    @ApiModelProperty(value = "结束日期")
+    @TableField("ENDDATE")
+    private Date enddate;
+
+    @ApiModelProperty(value = "金额")
+    @TableField("AMOUNT")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "币种")
+    @TableField("CURRENCY")
+    private String currency;
+
+    @ApiModelProperty(value = "备注")
+    @TableField("REMARK")
+    private String remark;
+
+    @ApiModelProperty(value = "申请状态 - 1:待审核 2:审核通过 3:审核拒绝 4:审核失败")
+    @TableField("APPLYSTATUS")
+    private Integer applystatus;
+
+    @ApiModelProperty(value = "处理状态")
+    @TableField("HANDLESTATUS")
+    private Integer handlestatus;
+
+    @ApiModelProperty(value = "返回代号")
+    @TableField("RETCODE")
+    private Integer retcode;
+
+
+    @Override
+    public Serializable pkVal() {
+        return this.exchticket;
+    }
+
+}

+ 27 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/bankbusiness/BankCommissionParam.java

@@ -0,0 +1,27 @@
+package com.muchinfo.mtp3pojos.vo.bankbusiness;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "BankCommissionParam对象", description = "手续费提现")
+public class BankCommissionParam {
+
+    @ApiModelProperty(value = "银行名称")
+    private String cusbankid;
+
+    @ApiModelProperty(value = "申请状态")
+    private Integer applystatus;
+
+    private Integer pageNum;
+
+    private Integer pageSize;
+
+}

+ 41 - 0
mtp3-pojos/src/main/java/com/muchinfo/mtp3pojos/vo/bankbusiness/BankQueryAccInfoResult.java

@@ -0,0 +1,41 @@
+package com.muchinfo.mtp3pojos.vo.bankbusiness;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+@ApiModel(value = "BankQueryAccInfoResult对象", description = "银行账号查询")
+public class BankQueryAccInfoResult {
+
+    @ApiModelProperty(value = "交易账号")
+    private Long accountid;
+
+    @ApiModelProperty(value = "交易商子账号")
+    private String bankchildaccount;
+
+    @ApiModelProperty(value = "客户名称")
+    private String accountname;
+
+    @ApiModelProperty(value = "所属机构")
+    private String organizaname;
+
+    @ApiModelProperty(value = "所属会员")
+    private String membername;
+
+    @ApiModelProperty(value = "账户余额")
+    private BigDecimal balance;
+
+    @ApiModelProperty(value = "银行账户余额")
+    private BigDecimal bankbalance;
+
+    private BigDecimal canUserAccount;
+}