Commit 1e1b4ff2 authored by hongguangwu's avatar hongguangwu

MVP1.7.2 工行2次提交

parent d8e54767
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import javax.validation.constraints.NotBlank;
import java.time.LocalDateTime;
/**
* 银企付款查询卡号所属行号记录表
*
* @author hgw
* @date 2024-11-18 17:04:20
*/
@Data
@TableName("ekp_bank_code_set")
@Schema(description = "银企付款查询卡号所属行号记录表")
public class EkpBankCodeSet {
/**
* fdId
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("fdId")
@Schema(description = "fdId")
private String fdId;
/**
* 卡号
*/
@ExcelAttribute(name = "卡号", isNotEmpty = true, errorInfo = "卡号不能为空", maxLength = 50)
@NotBlank(message = "卡号不能为空")
@Length(max = 50, message = "卡号不能超过50个字符")
@ExcelProperty("卡号")
@Schema(description = "卡号")
private String fdPayeeAccount;
/**
* 收款账号开户行
*/
@ExcelAttribute(name = "收款账号开户行", maxLength = 100)
@Length(max = 100, message = "收款账号开户行不能超过100个字符")
@ExcelProperty("收款账号开户行")
@Schema(description = "收款账号开户行")
private String fdRecipientBank;
/**
* 收款银行人行行号
*/
@ExcelAttribute(name = "收款银行人行行号", maxLength = 100)
@Length(max = 100, message = "收款银行人行行号不能超过100个字符")
@ExcelProperty("收款银行人行行号")
@Schema(description = "收款银行人行行号")
private String fdRecipientBankCode;
/**
* 创建时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
@Schema(description = "创建时间")
@TableField(fill = FieldFill.INSERT)
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("创建时间")
private LocalDateTime fdCreateTime;
}
package com.yifu.cloud.plus.v1.ekp.controller; package com.yifu.cloud.plus.v1.ekp.controller;
import com.icbc.api.IcbcApiException; import com.icbc.api.IcbcApiException;
import com.icbc.api.response.MybankEnterpriseAccountQuerybankinfoResponseV1;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet;
import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowQueryService; import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowQueryService;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner; import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
...@@ -10,6 +13,7 @@ import lombok.RequiredArgsConstructor; ...@@ -10,6 +13,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2; import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
/** /**
...@@ -99,7 +103,10 @@ public class IcbcTransactionFlowQueryController { ...@@ -99,7 +103,10 @@ public class IcbcTransactionFlowQueryController {
*/ */
@Operation(summary = "行名行号查询接口", description = "行名行号查询接口") @Operation(summary = "行名行号查询接口", description = "行名行号查询接口")
@PostMapping("/querybankinfo") @PostMapping("/querybankinfo")
public R querybankinfo() { public R<EkpBankCodeSet> querybankinfo(@RequestParam(required = false) String cardNo) {
return icbcTransactionFlowQueryService.querybankinfo(); if (Common.isEmpty(cardNo)) {
cardNo = "6217752510002149161";
}
return icbcTransactionFlowQueryService.querybankinfo(cardNo);
} }
} }
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 银企付款查询卡号所属行号记录表
*
* @author hgw
* @date 2024-11-18 17:07:24
*/
@Mapper
public interface EkpBankCodeSetMapper extends BaseMapper<EkpBankCodeSet> {
EkpBankCodeSet getCodeSetByCardNo(@Param("cardNo") String cardNo);
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet;
/**
* 银企付款查询卡号所属行号记录表
*
* @author hgw
* @date 2024-11-18 17:07:24
*/
public interface EkpBankCodeSetService extends IService<EkpBankCodeSet> {
EkpBankCodeSet getCodeSetByCardNo(String cardNo);
}
...@@ -2,6 +2,8 @@ package com.yifu.cloud.plus.v1.ekp.service; ...@@ -2,6 +2,8 @@ package com.yifu.cloud.plus.v1.ekp.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.icbc.api.IcbcApiException; import com.icbc.api.IcbcApiException;
import com.icbc.api.response.MybankEnterpriseAccountQuerybankinfoResponseV1;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet;
import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo; import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
...@@ -27,6 +29,6 @@ public interface IcbcTransactionFlowQueryService extends IService<EkpSocialInfo> ...@@ -27,6 +29,6 @@ public interface IcbcTransactionFlowQueryService extends IService<EkpSocialInfo>
* @Date: 2024-11-12 * @Date: 2024-11-12
* @return: R * @return: R
**/ **/
R querybankinfo(); R<EkpBankCodeSet> querybankinfo(String cardNo);
} }
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet;
import com.yifu.cloud.plus.v1.ekp.mapper.EkpBankCodeSetMapper;
import com.yifu.cloud.plus.v1.ekp.service.EkpBankCodeSetService;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
/**
* 银企付款查询卡号所属行号记录表
*
* @author hgw
* @date 2024-11-18 17:07:24
*/
@Log4j2
@Service
public class EkpBankCodeSetServiceImpl extends ServiceImpl<EkpBankCodeSetMapper, EkpBankCodeSet> implements EkpBankCodeSetService {
@Override
public EkpBankCodeSet getCodeSetByCardNo(String cardNo) {
return baseMapper.getCodeSetByCardNo(cardNo);
}
}
...@@ -15,10 +15,7 @@ import com.icbc.api.response.MybankEnterpriseAccountQuerybankinfoResponseV1; ...@@ -15,10 +15,7 @@ import com.icbc.api.response.MybankEnterpriseAccountQuerybankinfoResponseV1;
import com.icbc.api.utils.IcbcSignature; import com.icbc.api.utils.IcbcSignature;
import com.icbc.api.utils.WebUtils; import com.icbc.api.utils.WebUtils;
import com.yifu.cloud.plus.v1.ekp.config.IcbcIssueConfigProperties; import com.yifu.cloud.plus.v1.ekp.config.IcbcIssueConfigProperties;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankAtta; import com.yifu.cloud.plus.v1.ekp.entity.*;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankGrantDetail;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankPayTask;
import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo;
import com.yifu.cloud.plus.v1.ekp.mapper.EkpSocialInfoMapper; import com.yifu.cloud.plus.v1.ekp.mapper.EkpSocialInfoMapper;
import com.yifu.cloud.plus.v1.ekp.service.EkpBankGrantDetailService; import com.yifu.cloud.plus.v1.ekp.service.EkpBankGrantDetailService;
import com.yifu.cloud.plus.v1.ekp.service.EkpBankPayTaskService; import com.yifu.cloud.plus.v1.ekp.service.EkpBankPayTaskService;
...@@ -376,6 +373,8 @@ public class IcbcTransactionFlowIssueServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -376,6 +373,8 @@ public class IcbcTransactionFlowIssueServiceImpl extends ServiceImpl<EkpSocialIn
if (CommonConstants.ONE_STRING.equals(type)) { if (CommonConstants.ONE_STRING.equals(type)) {
EkpBankPayTask main = ekpBankPayTaskService.getById(fdId); EkpBankPayTask main = ekpBankPayTaskService.getById(fdId);
URL url; URL url;
R<EkpBankCodeSet> bankInfoQuery;
EkpBankCodeSet codeSet;
if (main == null) { if (main == null) {
return R.failed("未找到表数据!"); return R.failed("未找到表数据!");
} else if (Common.isNotNull(main.getFdDownloadNum()) && Common.isNotNull(main.getFdFailNum()) } else if (Common.isNotNull(main.getFdDownloadNum()) && Common.isNotNull(main.getFdFailNum())
...@@ -386,11 +385,17 @@ public class IcbcTransactionFlowIssueServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -386,11 +385,17 @@ public class IcbcTransactionFlowIssueServiceImpl extends ServiceImpl<EkpSocialIn
// 组装 // 组装
for (EkpBankExcelVo excelVo : list) { for (EkpBankExcelVo excelVo : list) {
if (Common.isEmpty(excelVo.getFdRecipientBankCode())) { if (Common.isEmpty(excelVo.getFdRecipientBankCode())) {
icbcTransactionFlowQueryService.querybankinfo(); // 查询行号
// TODO - 查询行号 bankInfoQuery = icbcTransactionFlowQueryService.querybankinfo(excelVo.getFdPayeeAccount());
if (bankInfoQuery != null && bankInfoQuery.getCode() == CommonConstants.SUCCESS) {
codeSet = bankInfoQuery.getData();
excelVo.setFdRecipientBankCode(codeSet.getFdRecipientBankCode());
excelVo.setFdRecipientBank(codeSet.getFdRecipientBank());
}
} }
} }
// 组装、上传文件
} }
url = ossUtil.getObjectUrl(null, main.getFdAttaSrc()); url = ossUtil.getObjectUrl(null, main.getFdAttaSrc());
vo.setFdAttaUrl(url.toString()); vo.setFdAttaUrl(url.toString());
......
...@@ -16,10 +16,13 @@ import com.icbc.api.response.MybankEnterpriseAccountQuerybankinfoResponseV1; ...@@ -16,10 +16,13 @@ import com.icbc.api.response.MybankEnterpriseAccountQuerybankinfoResponseV1;
import com.icbc.api.response.MybankEnterpriseTradeQhisdResponseV1; import com.icbc.api.response.MybankEnterpriseTradeQhisdResponseV1;
import com.yifu.cloud.plus.v1.ekp.config.EkpEntryProperties; import com.yifu.cloud.plus.v1.ekp.config.EkpEntryProperties;
import com.yifu.cloud.plus.v1.ekp.config.IcbcConfigProperties; import com.yifu.cloud.plus.v1.ekp.config.IcbcConfigProperties;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet;
import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo; import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo;
import com.yifu.cloud.plus.v1.ekp.mapper.EkpSocialInfoMapper; import com.yifu.cloud.plus.v1.ekp.mapper.EkpSocialInfoMapper;
import com.yifu.cloud.plus.v1.ekp.service.EkpBankCodeSetService;
import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowQueryService; import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowQueryService;
import com.yifu.cloud.plus.v1.ekp.vo.EKPEntryPushParam; import com.yifu.cloud.plus.v1.ekp.vo.EKPEntryPushParam;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil; import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import io.micrometer.core.instrument.util.StringUtils; import io.micrometer.core.instrument.util.StringUtils;
...@@ -34,6 +37,7 @@ import org.springframework.util.MultiValueMap; ...@@ -34,6 +37,7 @@ import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import java.text.ParseException; import java.text.ParseException;
import java.time.LocalDateTime;
import java.time.LocalTime; import java.time.LocalTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -58,6 +62,8 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -58,6 +62,8 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn
@Autowired @Autowired
private EkpEntryProperties ekpEntryProperties; private EkpEntryProperties ekpEntryProperties;
@Autowired
private EkpBankCodeSetService ekpBankCodeSetService;
@Override @Override
public R getIcbcTransactionFlow() { public R getIcbcTransactionFlow() {
...@@ -333,7 +339,12 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -333,7 +339,12 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn
* @return: R * @return: R
**/ **/
@Override @Override
public R querybankinfo() { public R<EkpBankCodeSet> querybankinfo(String cardNo) {
// 先查询记录表
EkpBankCodeSet codeSet = ekpBankCodeSetService.getCodeSetByCardNo(cardNo);
if (codeSet != null && Common.isNotNull(codeSet.getFdRecipientBankCode())) {
return R.ok(codeSet);
}
String privateKey = "4d931f6ad4331158fcc4dea23f0d71393328146e40b5f63f197b9f6ad3732f44"; String privateKey = "4d931f6ad4331158fcc4dea23f0d71393328146e40b5f63f197b9f6ad3732f44";
...@@ -344,6 +355,8 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -344,6 +355,8 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn
IcbcConstants.CHARSET_UTF8, IcbcConstants.FORMAT_JSON, null, IcbcConstants.CHARSET_UTF8, IcbcConstants.FORMAT_JSON, null,
null, null, icbcConfigProperties.getCaSm(), null); null, null, icbcConfigProperties.getCaSm(), null);
client.setIcbc_ca(icbcConfigProperties.getCaSmIcbc()); client.setIcbc_ca(icbcConfigProperties.getCaSmIcbc());
// 返回
MybankEnterpriseAccountQuerybankinfoResponseV1 response = null;
try { try {
MybankEnterpriseAccountQuerybankinfoRequestV1.MybankEnterpriseAccountQuerybankinfoRequestBizV1 bizContent = MybankEnterpriseAccountQuerybankinfoRequestV1.MybankEnterpriseAccountQuerybankinfoRequestBizV1 bizContent =
new MybankEnterpriseAccountQuerybankinfoRequestV1.MybankEnterpriseAccountQuerybankinfoRequestBizV1(); new MybankEnterpriseAccountQuerybankinfoRequestV1.MybankEnterpriseAccountQuerybankinfoRequestBizV1();
...@@ -356,21 +369,25 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn ...@@ -356,21 +369,25 @@ public class IcbcTransactionFlowQueryServiceImpl extends ServiceImpl<EkpSocialIn
bizContent.setTranTime("103231001"); bizContent.setTranTime("103231001");
bizContent.setLanguage("zh_CN"); bizContent.setLanguage("zh_CN");
bizContent.setfSeqNo("AHWX"+ System.currentTimeMillis()); bizContent.setfSeqNo("AHWX"+ System.currentTimeMillis());
bizContent.setCardNo("6217752510002149161"); // 6217752510002149161
bizContent.setCardNo(cardNo);
request.setServiceUrl("https://gw.open.icbc.com.cn/api/mybank/enterprise/account/querybankinfo/V1"); request.setServiceUrl("https://gw.open.icbc.com.cn/api/mybank/enterprise/account/querybankinfo/V1");
request.setBizContent(bizContent); request.setBizContent(bizContent);
MybankEnterpriseAccountQuerybankinfoResponseV1 response = client.execute(request); response = client.execute(request);
if (response.isSuccess()) { if (response.isSuccess()) {
// 业务成功处理 // 业务成功处理-存储起来
System.out.println("success"); codeSet = new EkpBankCodeSet();
} else { codeSet.setFdCreateTime(LocalDateTime.now());
// 失败 codeSet.setFdRecipientBankCode(response.getBankCode());
System.out.println("error"); codeSet.setFdPayeeAccount(cardNo);
codeSet.setFdRecipientBank(response.getBankName());
ekpBankCodeSetService.save(codeSet);
return R.ok(codeSet);
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); log.error("银企付款任务,查询行号错误:", e);
} }
return R.ok(); return R.failed("未找到");
} }
@Override @Override
......
<?xml version="1.0" encoding="UTF-8"?>
<!--
~
~ Copyright (c) 2018-2025, lengleng All rights reserved.
~
~ Redistribution and use in source and binary forms, with or without
~ modification, are permitted provided that the following conditions are met:
~
~ Redistributions of source code must retain the above copyright notice,
~ this list of conditions and the following disclaimer.
~ Redistributions in binary form must reproduce the above copyright
~ notice, this list of conditions and the following disclaimer in the
~ documentation and/or other materials provided with the distribution.
~ Neither the name of the yifu4cloud.com developer nor the names of its
~ contributors may be used to endorse or promote products derived from
~ this software without specific prior written permission.
~ Author: lengleng (wangiegie@gmail.com)
~
-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.ekp.mapper.EkpBankCodeSetMapper">
<resultMap id="ekpBankCodeSetMap" type="com.yifu.cloud.plus.v1.ekp.entity.EkpBankCodeSet">
<id property="fdId" column="fd_id"/>
<result property="fdPayeeAccount" column="fd_payee_account"/>
<result property="fdRecipientBank" column="fd_recipient_bank"/>
<result property="fdRecipientBankCode" column="fd_recipient_bank_code"/>
</resultMap>
<sql id="Base_Column_List">
a.fd_id,
a.fd_payee_account,
a.fd_recipient_bank,
a.fd_recipient_bank_code
</sql>
<select id="getCodeSetByCardNo" resultMap="ekpBankCodeSetMap" >
select
<include refid="Base_Column_List"/>
from ekp_bank_code_set a
where a.fd_payee_account = #{cardNo} limit 1
</select>
</mapper>
...@@ -45,28 +45,6 @@ ...@@ -45,28 +45,6 @@
<result property="fdFailNum" column="fd_fail_num"/> <result property="fdFailNum" column="fd_fail_num"/>
<result property="fdGrantNum" column="fd_grant_num"/> <result property="fdGrantNum" column="fd_grant_num"/>
</resultMap> </resultMap>
<sql id="Base_Column_List">
a.fd_id,
a.fd_serial_number,
a.fd_payee_name,
a.fd_payee_account,
a.fd_money,
a.fd_recipient_bank,
a.fd_remittance_purpose,
a.fd_remark,
a.fd_create_time,
a.fd_failure_feedback,
a.fd_grant_status,
a.fd_handle_status,
a.fd_handle_fail_no,
a.fd_handle_fail_id,
a.fd_atta_id,
a.fd_atta_name,
a.fd_atta_src,
a.fd_download_num,
a.fd_fail_num,
a.fd_grant_num
</sql>
<sql id="Base_Excel_Sql"> <sql id="Base_Excel_Sql">
select select
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment