feat(supplier): 添加银行名称字段并完善供应商信息

- 在SupplierCreateCmd中添加银行名称字段并设置为必填
- 更新OrderSupplier相关DTO和实体类,添加银行名称字段
- 在SupplierVO和OrderSupplierVO中增加银行名称属性
- 完善WxMaOcrBankCardVO,添加银行名称字段支持
- 在数据库实体OrderSupplierDO和SupplierDO中增加银行名称映射
- 更新SupplierCreateCmd中的收款人姓名和手机号为必填字段
- 在Mapper XML文件中添加银行名称字段映射
- 实现微信OCR银行卡识别时通过API获取银行名称功能
- 添加微信银行信息查询相关的请求和响应数据结构
This commit is contained in:
shenyifei 2025-12-25 11:17:51 +08:00
parent 3824c80899
commit 6d5b4e001c
12 changed files with 125 additions and 4 deletions

View File

@ -55,6 +55,11 @@ public class OrderSupplier extends DTO {
*/ */
private String idCard; private String idCard;
/**
* 银行名称
*/
private String bankName;
/** /**
* 银行卡号 * 银行卡号
*/ */

View File

@ -41,6 +41,11 @@ public class Supplier extends DTO {
*/ */
private String phone; private String phone;
/**
* 银行名称
*/
private String bankName;
/** /**
* 银行卡号 * 银行卡号
*/ */

View File

@ -53,6 +53,7 @@ public class OrderSupplierDO extends BaseDO<OrderSupplierDO> {
/** /**
* 收款人姓名 * 收款人姓名
*/ */
@TableField(value = "payee_name")
private String payeeName; private String payeeName;
/** /**
@ -61,6 +62,12 @@ public class OrderSupplierDO extends BaseDO<OrderSupplierDO> {
@TableField(value = "id_card") @TableField(value = "id_card")
private String idCard; private String idCard;
/**
* 银行名称
*/
@TableField(value = "bank_name")
private String bankName;
/** /**
* 银行卡号 * 银行卡号
*/ */

View File

@ -47,6 +47,12 @@ public class SupplierDO extends BaseDO<SupplierDO> {
@TableField(value = "phone") @TableField(value = "phone")
private String phone; private String phone;
/**
* 银行名称
*/
@TableField(value = "bank_name")
private String bankName;
/** /**
* 银行卡号 * 银行卡号
*/ */

View File

@ -11,6 +11,7 @@
<result property="name" column="name"/> <result property="name" column="name"/>
<result property="payeeName" column="payee_name"/> <result property="payeeName" column="payee_name"/>
<result property="idCard" column="id_card"/> <result property="idCard" column="id_card"/>
<result property="bankName" column="bank_name"/>
<result property="bankCard" column="bank_card"/> <result property="bankCard" column="bank_card"/>
<result property="phone" column="phone"/> <result property="phone" column="phone"/>
<result property="wechatQr" column="wechat_qr"/> <result property="wechatQr" column="wechat_qr"/>

View File

@ -10,6 +10,7 @@
<result property="payeeName" column="payee_name"/> <result property="payeeName" column="payee_name"/>
<result property="idCard" column="id_card"/> <result property="idCard" column="id_card"/>
<result property="phone" column="phone"/> <result property="phone" column="phone"/>
<result property="bankName" column="bank_name"/>
<result property="bankCard" column="bank_card"/> <result property="bankCard" column="bank_card"/>
<result property="wechatQr" column="wechat_qr"/> <result property="wechatQr" column="wechat_qr"/>
<result property="type" column="type"/> <result property="type" column="type"/>

View File

@ -1,15 +1,24 @@
package com.xunhong.erp.turbo.facade.app.executor.cmd; package com.xunhong.erp.turbo.facade.app.executor.cmd;
import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.hutool.core.collection.CollUtil;
import com.google.gson.annotations.SerializedName;
import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrBankCardVO; import com.xunhong.erp.turbo.api.facade.dto.vo.WxMaOcrBankCardVO;
import com.xunhong.erp.turbo.api.infra.api.SettingServiceI; import com.xunhong.erp.turbo.api.infra.api.SettingServiceI;
import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe; import com.xunhong.erp.turbo.facade.app.executor.common.WxCmdExe;
import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.Setter;
import lombok.SneakyThrows; import lombok.SneakyThrows;
import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult; import me.chanjar.weixin.common.bean.ocr.WxOcrBankCardResult;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/** /**
* @author shenyifei * @author shenyifei
*/ */
@ -29,6 +38,65 @@ public class WxMaOcrBankCardCmdExe extends WxCmdExe {
wxMaOcrBankCardVO.setNumber(number); wxMaOcrBankCardVO.setNumber(number);
wxMaOcrBankCardVO.setOcrUrl(ocrUrl); wxMaOcrBankCardVO.setOcrUrl(ocrUrl);
GetBankByNumRequest getBankByNumRequest = new GetBankByNumRequest();
getBankByNumRequest.setSetAccountNumber(number);
String responseContent = wxMaService.post("https://api.weixin.qq.com/shop/funds/getbankbynum", getBankByNumRequest);
WxGetBankByNumResult wxGetBankByNumResult = WxGetBankByNumResult.fromJson(responseContent);
List<BankInfo> data = wxGetBankByNumResult.getData();
if (CollUtil.isNotEmpty(data)) {
wxMaOcrBankCardVO.setBankName(data.getFirst().getBankName());
}
return wxMaOcrBankCardVO; return wxMaOcrBankCardVO;
} }
@Getter
@Setter
public static class GetBankByNumRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@SerializedName("account_number")
private String setAccountNumber;
}
@Getter
@Setter
public static class WxGetBankByNumResult implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@SerializedName("total_count")
private Integer totalCount;
private List<BankInfo> data;
public static WxGetBankByNumResult fromJson(String json) {
return WxGsonBuilder.create().fromJson(json, WxGetBankByNumResult.class);
}
public String toString() {
return WxGsonBuilder.create().toJson(this);
}
}
@Getter
@Setter
public static class BankInfo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@SerializedName("bank_code")
private String bankCode;
@SerializedName("bank_id")
private String bankId;
@SerializedName("bank_name")
private String bankName;
@SerializedName("need_branch")
private Boolean needBranch;
@SerializedName("account_bank")
private String accountBank;
}
} }

View File

@ -30,7 +30,7 @@ public class SupplierCreateCmd extends Command {
/** /**
* 收款人姓名 * 收款人姓名
*/ */
@Schema(title = "收款人姓名") @Schema(title = "收款人姓名", requiredMode = Schema.RequiredMode.REQUIRED)
private String payeeName; private String payeeName;
/** /**
@ -42,9 +42,16 @@ public class SupplierCreateCmd extends Command {
/** /**
* 手机号 * 手机号
*/ */
@Schema(title = "手机号") @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED)
private String phone; private String phone;
/**
* 银行名称
*/
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
/** /**
* 银行卡号 * 银行卡号
*/ */

View File

@ -57,6 +57,12 @@ public class OrderSupplier extends Command {
@Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED)
private String idCard; private String idCard;
/**
* 银行名称
*/
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
/** /**
* 银行卡号 * 银行卡号
*/ */

View File

@ -59,6 +59,12 @@ public class OrderSupplierVO extends DTO {
@Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "身份证号", requiredMode = Schema.RequiredMode.REQUIRED)
private String idCard; private String idCard;
/**
* 银行名称
*/
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
/** /**
* 银行卡号 * 银行卡号
*/ */

View File

@ -31,7 +31,7 @@ public class SupplierVO extends DTO {
/** /**
* 收款人姓名 * 收款人姓名
*/ */
@Schema(title = "收款人姓名") @Schema(title = "收款人姓名", requiredMode = Schema.RequiredMode.REQUIRED)
private String payeeName; private String payeeName;
/** /**
@ -43,9 +43,15 @@ public class SupplierVO extends DTO {
/** /**
* 手机号 * 手机号
*/ */
@Schema(title = "手机号") @Schema(title = "手机号", requiredMode = Schema.RequiredMode.REQUIRED)
private String phone; private String phone;
/**
* 银行名称
*/
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
/** /**
* 银行卡号 * 银行卡号
*/ */

View File

@ -16,6 +16,9 @@ public class WxMaOcrBankCardVO extends DTO {
@Schema(title = "银行卡号", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "银行卡号", requiredMode = Schema.RequiredMode.REQUIRED)
private String number; private String number;
@Schema(title = "银行名称", requiredMode = Schema.RequiredMode.REQUIRED)
private String bankName;
@Schema(title = "银行卡图片", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(title = "银行卡图片", requiredMode = Schema.RequiredMode.REQUIRED)
private String ocrUrl; private String ocrUrl;
} }