From a4efbc14004521d40ccf727c9aefc481bb4153eb Mon Sep 17 00:00:00 2001
From: shaowenhao <3121640096@qq.com>
Date: Wed, 1 Nov 2023 13:43:06 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=93=B6=E8=A1=8C=E5=8D=A1?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 45 +++
.../mybasic/common/domain/BankConfig.java | 56 ++++
.../ruoyi/mybasic/common/domain/MoneyLog.java | 6 +
.../mybasic/common/domain/RechargeLog.java | 4 +
.../mybasic/common/domain/emal/Method.java | 15 +
.../ruoyi/mybasic/config/QiNiuYunConfig.java | 20 ++
.../mybasic/controller/MessageController.java | 203 +++++++++++
.../controller/PurseControllerTwo.java | 13 +-
.../mybasic/mapper/InvitationMapper.java | 3 +-
.../ruoyi/mybasic/mapper/MessageMapper.java | 17 +
.../ruoyi/mybasic/mapper/PurseMapperTwo.java | 2 +-
.../service/Impl/InvitationServiceImpl.java | 3 +-
.../service/Impl/MessageServiceImpl.java | 43 +++
.../service/Impl/PurseServiceTwoImpl.java | 6 +-
.../ruoyi/mybasic/service/MessageService.java | 20 ++
.../mybasic/service/PurseServiceTwo.java | 3 +-
.../com/ruoyi/mybasic/util/HttpUtils.java | 314 ++++++++++++++++++
.../com/ruoyi/mybasic/util/UploadUtil.java | 77 +++++
src/main/resources/bootstrap.yml | 22 +-
src/main/resources/mapper/MessageMapper.xml | 57 ++++
src/main/resources/mapper/PurseMapperTwo.xml | 2 +-
21 files changed, 915 insertions(+), 16 deletions(-)
create mode 100644 src/main/java/com/ruoyi/mybasic/common/domain/BankConfig.java
create mode 100644 src/main/java/com/ruoyi/mybasic/common/domain/emal/Method.java
create mode 100644 src/main/java/com/ruoyi/mybasic/config/QiNiuYunConfig.java
create mode 100644 src/main/java/com/ruoyi/mybasic/controller/MessageController.java
create mode 100644 src/main/java/com/ruoyi/mybasic/mapper/MessageMapper.java
create mode 100644 src/main/java/com/ruoyi/mybasic/service/Impl/MessageServiceImpl.java
create mode 100644 src/main/java/com/ruoyi/mybasic/service/MessageService.java
create mode 100644 src/main/java/com/ruoyi/mybasic/util/HttpUtils.java
create mode 100644 src/main/java/com/ruoyi/mybasic/util/UploadUtil.java
create mode 100644 src/main/resources/mapper/MessageMapper.xml
diff --git a/pom.xml b/pom.xml
index a9a55fb..888b832 100644
--- a/pom.xml
+++ b/pom.xml
@@ -36,6 +36,39 @@
+
+
+
+ com.qiniu
+ qiniu-java-sdk
+ 7.13.0
+
+
+
+ com.squareup.okhttp3
+ okhttp
+ 3.14.2
+ compile
+
+
+ com.google.code.gson
+ gson
+ 2.8.5
+ compile
+
+
+ com.qiniu
+ happy-dns-java
+ 0.1.6
+ test
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
com.alibaba.cloud
@@ -209,6 +242,18 @@
health-api-mybasic
3.6.6
+
+
+ commons-lang
+ commons-lang
+ 2.6
+
+
+
+ com.aliyun
+ tea-openapi
+ 0.0.7
+
diff --git a/src/main/java/com/ruoyi/mybasic/common/domain/BankConfig.java b/src/main/java/com/ruoyi/mybasic/common/domain/BankConfig.java
new file mode 100644
index 0000000..cb63fd9
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/common/domain/BankConfig.java
@@ -0,0 +1,56 @@
+package com.ruoyi.mybasic.common.domain;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * 银行卡请求参数
+ */
+@Data
+public class BankConfig {
+
+ /**
+ * 银行卡Id
+ */
+ private long id;
+ /**
+ * 当前用户UserID
+ */
+ private long userId;
+ /**
+ * 类型 比如(储蓄卡)
+ */
+ private String cardType;
+ /**
+ * 银行名称
+ */
+ private String bankName;
+ /**
+ * 银行卡 卡号
+ */
+ private String cardNo;
+ /**
+ * 银行ID
+ */
+ private Integer bankId;
+ /**
+ * 银行代码
+ */
+ private String bankCode;
+ /**
+ * 绑定时间
+ */
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
+ private Date createTime;
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/mybasic/common/domain/MoneyLog.java b/src/main/java/com/ruoyi/mybasic/common/domain/MoneyLog.java
index c7d7bd2..badd806 100644
--- a/src/main/java/com/ruoyi/mybasic/common/domain/MoneyLog.java
+++ b/src/main/java/com/ruoyi/mybasic/common/domain/MoneyLog.java
@@ -1,6 +1,8 @@
package com.ruoyi.mybasic.common.domain;
import com.alibaba.druid.sql.visitor.functions.Char;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@@ -27,6 +29,8 @@ public class MoneyLog {
/**
* 操作时间
*/
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;
/**
* 详情
@@ -51,6 +55,8 @@ public class MoneyLog {
/**
* 修改时间
*/
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date updateTime;
}
diff --git a/src/main/java/com/ruoyi/mybasic/common/domain/RechargeLog.java b/src/main/java/com/ruoyi/mybasic/common/domain/RechargeLog.java
index 45ea04b..802bb74 100644
--- a/src/main/java/com/ruoyi/mybasic/common/domain/RechargeLog.java
+++ b/src/main/java/com/ruoyi/mybasic/common/domain/RechargeLog.java
@@ -1,6 +1,8 @@
package com.ruoyi.mybasic.common.domain;
+import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
@@ -30,5 +32,7 @@ public class RechargeLog {
/**
* 充值时间
*/
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date createTime;
}
diff --git a/src/main/java/com/ruoyi/mybasic/common/domain/emal/Method.java b/src/main/java/com/ruoyi/mybasic/common/domain/emal/Method.java
new file mode 100644
index 0000000..b598d04
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/common/domain/emal/Method.java
@@ -0,0 +1,15 @@
+package com.ruoyi.mybasic.common.domain.emal;
+
+/**
+ * Http请求方式 用于银行卡
+ */
+public enum Method {
+ GET,
+ POST_FORM,
+ POST_STRING,
+ POST_BYTES,
+ PUT_FROM,
+ PUT_STRING,
+ PUT_BYTES,
+ DELETE;
+}
diff --git a/src/main/java/com/ruoyi/mybasic/config/QiNiuYunConfig.java b/src/main/java/com/ruoyi/mybasic/config/QiNiuYunConfig.java
new file mode 100644
index 0000000..1793057
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/config/QiNiuYunConfig.java
@@ -0,0 +1,20 @@
+package com.ruoyi.mybasic.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * 七牛云
+ */
+@Data
+@ConfigurationProperties(value = "qi-niu-yun")
+@Configuration
+@EnableConfigurationProperties
+public class QiNiuYunConfig {
+ private String accessKey;
+ private String secretKey;
+ private String bucket;
+ private String hostName;
+}
diff --git a/src/main/java/com/ruoyi/mybasic/controller/MessageController.java b/src/main/java/com/ruoyi/mybasic/controller/MessageController.java
new file mode 100644
index 0000000..cf0675e
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/controller/MessageController.java
@@ -0,0 +1,203 @@
+package com.ruoyi.mybasic.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.exception.ServiceException;
+import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.mybasic.common.domain.BankConfig;
+import com.ruoyi.mybasic.service.MessageService;
+import com.ruoyi.mybasic.util.HttpUtils;
+import com.ruoyi.mybasic.util.UploadUtil;
+import org.apache.http.HttpResponse;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 银行卡上传
+ * @author swh
+ */
+@RequestMapping("/message")
+@RestController
+public class MessageController {
+
+ @Autowired
+ private MessageService messageService;
+
+
+ @Autowired
+ private UploadUtil uploadUtil;
+
+
+
+ /**
+ * 银行卡api
+ */
+ @PostMapping("/upload")
+ public void upload(@RequestParam("file") MultipartFile file) throws Exception {
+ //上传文件方法
+ if (null == file){
+ throw new ServiceException("银行卡照片为空");
+ }
+ String upload = uploadUtil.upload(file);
+
+ String host = "https://vbkocr.market.alicloudapi.com";
+ String path = "/lundear/bkocr";
+ String method = "POST";
+ String appcode = "ded4e72aaf8f48499dcd2ef13f8eaae9";
+ Map headers = new HashMap();
+ //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
+ headers.put("Authorization", "APPCODE " + appcode);
+ //根据API的要求,定义相对应的Content-Type
+ headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
+ Map querys = new HashMap();
+ Map bodys = new HashMap();
+ bodys.put("url", upload);
+// querys.put("image", upload);
+ System.out.println(bodys);
+
+ BankConfig bankConfig = new BankConfig();
+
+ try {
+ /**
+ * 重要提示如下:
+ * HttpUtils请从
+ * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
+ * 下载
+ *
+ * 相应的依赖请参照
+ * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
+ */
+ HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
+ System.out.println(response.toString());
+
+ //获取response的body
+ JSONObject jsonObject = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
+ System.out.println("jsonObject数据为:" + jsonObject);
+
+ //查询当前人银行卡的当前银行卡 根据银行卡号进行循环查询 是否已经绑定
+ List bankCardNo = messageService.listBankCardNo(SecurityUtils.getUserId());
+ boolean hasNullElement = false;
+ for (Integer integer : bankCardNo) {
+ if (integer != null && integer != 0){
+ hasNullElement = true;
+ break;
+ }
+ }
+ if (hasNullElement){
+ throw new ServiceException("已经添加过此银行卡!换一张");
+ }else{
+
+ bankConfig.setBankCode(jsonObject.getString("bank_code"));
+ bankConfig.setBankId(jsonObject.getInteger("bank_id"));
+ bankConfig.setBankName(jsonObject.getString("bank_name"));
+ bankConfig.setCardNo(jsonObject.getString("card_no"));
+ bankConfig.setBankCode(jsonObject.getString("bank_code"));
+ bankConfig.setCardType(jsonObject.getString("card_type"));
+ bankConfig.setUserId(SecurityUtils.getUserId());
+
+ BankConfig bankConfig1 = JSONObject.parseObject(jsonObject.getString("bankConfig"), BankConfig.class);
+ //绑定银行卡 添加到银行卡表中
+ messageService.addBank(bankConfig1);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ /**
+ * 识别银行卡信息
+ * @param
+ * @return
+ * @throws IOException
+ */
+
+// public static ResponseCard getBank(String images) throws IOException {
+// String host = "https://dfbankcard.market.alicloudapi.com";
+// String path = "/ocr/bankcard";
+// String method = "POST";
+// String appcode = "ded4e72aaf8f48499dcd2ef13f8eaae9";
+// Map headers = new HashMap();
+// //最后在header中的格式(中间是英文空格)为Authorization:APPCODE 83359fd73fe94948385f570e3c139105
+// headers.put("Authorization", "APPCODE " + appcode);
+// //根据API的要求,定义相对应的Content-Type
+// headers.put("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
+// Map querys = new HashMap();
+// Map bodys = new HashMap();
+// bodys.put("image_url", images);
+// ResponseCard responseCard = new ResponseCard();
+// try {
+// /**
+// * 重要提示如下:
+// * HttpUtils请从
+// * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
+// * 下载
+// *
+// * 相应的依赖请参照
+// * https://github.com/aliyun/api-gateway-demo-sign-java/blob/master/pom.xml
+// */
+// HttpResponse response = HttpUtils.doPost(host, path, method, headers, querys, bodys);
+// //使用这个才能获取信息
+// JSONObject jsonObject = JSONObject.parseObject(EntityUtils.toString(response.getEntity()));
+// System.out.println("jsonObject数据为:"+jsonObject);
+// responseCard.setRequestId(jsonObject.getString("request_id"));
+// responseCard.setStatus(jsonObject.getString("status"));
+// BankCard result = JSONObject.parseObject(jsonObject.getString("result"), BankCard.class);
+// responseCard.setBankCard(result);
+// System.out.println("responseCard数据为:"+responseCard);
+// } catch (Exception e) {
+// e.printStackTrace();
+// }
+// return responseCard;
+// }
+
+// public static void main(String[] args) {
+// Config config = new Config()
+// .setAccessKeyId("你的AccessKeyId")
+// .setAccessKeySecret("你的AccessKeySecret");
+// OcrBankCard ocrBankCard = new OcrBankCard(config);
+// try {
+// CommonResponse response = ocrBankCard.ocrBankCard("要识别的银行卡图片的URL");
+// System.out.println(response.getData());
+// } catch (TeaException e) {
+// e.printStackTrace();
+// }
+// }
+
+
+// @Override
+// public Boolean bindUserBank(MultipartFile bankImage) throws IOException {
+// Long userId = SecurityUtils.getUserId();
+// byte[] bytes = bankImage.getBytes();
+// String bank = Base64.getEncoder().encodeToString(bytes);
+// Map map = forestClientInterface.helloForestBank(bank);
+// System.out.println(map);
+// Map resultMap = (Map) map.get("result");
+// String cardNumber = (String) resultMap.get("card_number");
+// String bankName = (String) resultMap.get("bank_name");
+// String bankIdentificationNumber = (String) resultMap.get("bank_identification_number");
+// String cardName = (String) resultMap.get("card_name");
+// String cardType = (String) resultMap.get("card_type");
+// BankCard bankCard = new BankCard();
+// bankCard.setUserId(userId);
+// bankCard.setBankNumber(cardNumber);
+// bankCard.setBankName(bankName);
+// bankCard.setBankType(cardType);
+// bankCard.setCardName(cardName);
+// System.out.println(bankCard);
+// return sysBankCardMapper.insertBankCard(bankCard)>0;
+// @Post(value = "https://dfbankcard.market.alicloudapi.com/ocr/bankcard",
+// headers = {"Authorization:APPCODE b491bc5d56bb4fa59171e19aaab030bb","Content-Type:application/x-www-form-urlencoded; charset=UTF-8"})
+// Map helloForestBank(@DataParam("image") String image);
+// }
+
+
+
+
+
+}
diff --git a/src/main/java/com/ruoyi/mybasic/controller/PurseControllerTwo.java b/src/main/java/com/ruoyi/mybasic/controller/PurseControllerTwo.java
index 3fa4319..301f20e 100644
--- a/src/main/java/com/ruoyi/mybasic/controller/PurseControllerTwo.java
+++ b/src/main/java/com/ruoyi/mybasic/controller/PurseControllerTwo.java
@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.security.utils.SecurityUtils;
+import com.ruoyi.mybasic.api.domain.Purse;
import com.ruoyi.mybasic.api.domain.UserMoneyLogs;
import com.ruoyi.mybasic.common.domain.MoneyWithdraw;
import com.ruoyi.mybasic.common.domain.RechargeLog;
@@ -61,9 +62,9 @@ public class PurseControllerTwo {
* 根据userId查询钱包表
*/
@GetMapping("/purseObject")
- public R purseObject(){
- PurseResponse purseResponseR = purseServiceTwo.purseObject();
- return R.ok(purseResponseR);
+ public R purseObject(){
+ Purse purse = purseServiceTwo.purseObject();
+ return R.ok(purse);
}
@@ -76,8 +77,8 @@ public class PurseControllerTwo {
*/
@GetMapping("/getBalance")
public R getBalance(){
- PurseResponse purseResponseR = purseServiceTwo.purseObject();
- return R.ok(purseResponseR.getBalanceFee());
+ Purse purse = purseServiceTwo.purseObject();
+ return R.ok(purse.getBalanceFee());
}
@@ -216,7 +217,7 @@ public class PurseControllerTwo {
@PostMapping("/withdrawPurse")//完成
public void withdrawPurse(AliPay aliPay){
- PurseResponse purseResponse = purseServiceTwo.purseObject();
+ Purse purseResponse = purseServiceTwo.purseObject();
//获取当前用户的余额
int balanceFee = purseResponse.getBalanceFee();
//获取前台输入的金额
diff --git a/src/main/java/com/ruoyi/mybasic/mapper/InvitationMapper.java b/src/main/java/com/ruoyi/mybasic/mapper/InvitationMapper.java
index a6a985c..28663ca 100644
--- a/src/main/java/com/ruoyi/mybasic/mapper/InvitationMapper.java
+++ b/src/main/java/com/ruoyi/mybasic/mapper/InvitationMapper.java
@@ -1,6 +1,7 @@
package com.ruoyi.mybasic.mapper;
+import com.ruoyi.mybasic.api.domain.Purse;
import com.ruoyi.mybasic.api.domain.UserMoneyLogs;
import com.ruoyi.mybasic.common.domain.request.InvitationRecordRequest;
import com.ruoyi.mybasic.common.domain.request.PurseRequest;
@@ -44,5 +45,5 @@ public interface InvitationMapper {
* @param purseResponse
* @return
*/
- int updateUserMoney(PurseResponse purseResponse);
+ int updateUserMoney(Purse purseResponse);
}
diff --git a/src/main/java/com/ruoyi/mybasic/mapper/MessageMapper.java b/src/main/java/com/ruoyi/mybasic/mapper/MessageMapper.java
new file mode 100644
index 0000000..cdfdb49
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/mapper/MessageMapper.java
@@ -0,0 +1,17 @@
+package com.ruoyi.mybasic.mapper;
+
+import com.ruoyi.mybasic.common.domain.BankConfig;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 银行卡验证
+ */
+public interface MessageMapper {
+ void addBank(BankConfig bankConfig);
+
+ //查询当前人银行卡的当前银行卡 根据银行卡号进行循环查询 是否已经绑定
+ List listBankCardNo(@Param("userId") Long userId);
+}
diff --git a/src/main/java/com/ruoyi/mybasic/mapper/PurseMapperTwo.java b/src/main/java/com/ruoyi/mybasic/mapper/PurseMapperTwo.java
index 90f1897..e8393e9 100644
--- a/src/main/java/com/ruoyi/mybasic/mapper/PurseMapperTwo.java
+++ b/src/main/java/com/ruoyi/mybasic/mapper/PurseMapperTwo.java
@@ -17,7 +17,7 @@ import java.util.List;
public interface PurseMapperTwo{
//根据当前登录人的userId获取到钱包的对象
- PurseResponse purseObject(@Param("userId") Long userId);
+ Purse purseObject(@Param("userId") Long userId);
//添加记录表
void addMoneyLogs(UserMoneyLogs userMoneyLogs);
diff --git a/src/main/java/com/ruoyi/mybasic/service/Impl/InvitationServiceImpl.java b/src/main/java/com/ruoyi/mybasic/service/Impl/InvitationServiceImpl.java
index 7f3c7e6..20953d6 100644
--- a/src/main/java/com/ruoyi/mybasic/service/Impl/InvitationServiceImpl.java
+++ b/src/main/java/com/ruoyi/mybasic/service/Impl/InvitationServiceImpl.java
@@ -1,5 +1,6 @@
package com.ruoyi.mybasic.service.Impl;
+import com.ruoyi.mybasic.api.domain.Purse;
import com.ruoyi.mybasic.api.domain.UserMoneyLogs;
import com.ruoyi.mybasic.common.domain.request.RequestInvitationRecord;
import com.ruoyi.mybasic.common.domain.response.PurseResponse;
@@ -104,7 +105,7 @@ public class InvitationServiceImpl implements InvitationService {
Integer status = userMoneyLogs.getStatus();
//查询钱包当前信息
- PurseResponse purseResponse = purseServiceTwo.purseObject();
+ Purse purseResponse = purseServiceTwo.purseObject();
purseResponse.setUpdateTime(new Date());
if (status == 1){
//判断余额是否充足
diff --git a/src/main/java/com/ruoyi/mybasic/service/Impl/MessageServiceImpl.java b/src/main/java/com/ruoyi/mybasic/service/Impl/MessageServiceImpl.java
new file mode 100644
index 0000000..eb7990a
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/service/Impl/MessageServiceImpl.java
@@ -0,0 +1,43 @@
+package com.ruoyi.mybasic.service.Impl;
+
+import com.ruoyi.mybasic.common.domain.BankConfig;
+import com.ruoyi.mybasic.mapper.MessageMapper;
+import com.ruoyi.mybasic.service.MessageService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+
+/**
+ * 银行卡实现层
+ * @author swh
+ */
+@Service
+public class MessageServiceImpl implements MessageService {
+
+ /** @noinspection SpringJavaInjectionPointsAutowiringInspection*/
+ @Autowired
+ private MessageMapper messageMapper;
+
+ /**
+ * 绑定银行卡 添加到银行卡表中
+ * @param bankConfig
+ */
+ @Override
+ public void addBank(BankConfig bankConfig) {
+ messageMapper.addBank(bankConfig);
+ }
+
+ /**
+ * 查询当前人银行卡的当前银行卡 根据银行卡号进行循环查询 是否已经绑定
+ * @param userId
+ * @return
+ */
+ @Override
+ public List listBankCardNo(Long userId) {
+
+ return messageMapper.listBankCardNo(userId);
+ }
+}
diff --git a/src/main/java/com/ruoyi/mybasic/service/Impl/PurseServiceTwoImpl.java b/src/main/java/com/ruoyi/mybasic/service/Impl/PurseServiceTwoImpl.java
index ad4f37f..9b251f8 100644
--- a/src/main/java/com/ruoyi/mybasic/service/Impl/PurseServiceTwoImpl.java
+++ b/src/main/java/com/ruoyi/mybasic/service/Impl/PurseServiceTwoImpl.java
@@ -39,7 +39,7 @@ public class PurseServiceTwoImpl implements PurseServiceTwo {
* @return
*/
@Override
- public PurseResponse purseObject() {
+ public Purse purseObject() {
//获取当前用户id
Long userId = SecurityUtils.getUserId();
return purseMapperTwo.purseObject(userId);
@@ -81,7 +81,7 @@ public class PurseServiceTwoImpl implements PurseServiceTwo {
public void purseBalanceChange(UserMoneyLogs userMoneyLogs) {
//获取当前用户的余额
- PurseResponse purseResponse = this.purseObject();
+ Purse purseResponse = this.purseObject();
//当前用户的余额
int balanceFee = purseResponse.getBalanceFee();
//获取到状态是收入还是支出 1:支出 2 收入
@@ -108,7 +108,7 @@ public class PurseServiceTwoImpl implements PurseServiceTwo {
*/
@Override
public void addPurse(Long userId) {
- PurseResponse purseResponse = purseMapperTwo.purseObject(userId);
+ Purse purseResponse = purseMapperTwo.purseObject(userId);
if (purseResponse != null ){
throw new ServiceException("已有该用户,请重新创建");
}
diff --git a/src/main/java/com/ruoyi/mybasic/service/MessageService.java b/src/main/java/com/ruoyi/mybasic/service/MessageService.java
new file mode 100644
index 0000000..846663c
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/service/MessageService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.mybasic.service;
+
+import com.ruoyi.mybasic.common.domain.BankConfig;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * 银行卡
+ * @author swh
+ */
+public interface MessageService {
+
+ //绑定银行卡 添加信息到 数据库中
+ void addBank(BankConfig bankConfig);
+
+ //查询当前人银行卡的当前银行卡 根据银行卡号进行循环查询 是否已经绑定
+ List listBankCardNo(@Param("userId") Long userId);
+}
diff --git a/src/main/java/com/ruoyi/mybasic/service/PurseServiceTwo.java b/src/main/java/com/ruoyi/mybasic/service/PurseServiceTwo.java
index 6107575..1a7cdb8 100644
--- a/src/main/java/com/ruoyi/mybasic/service/PurseServiceTwo.java
+++ b/src/main/java/com/ruoyi/mybasic/service/PurseServiceTwo.java
@@ -1,6 +1,7 @@
package com.ruoyi.mybasic.service;
import com.ruoyi.common.core.domain.R;
+import com.ruoyi.mybasic.api.domain.Purse;
import com.ruoyi.mybasic.api.domain.UserMoneyLogs;
import com.ruoyi.mybasic.common.domain.MoneyLog;
import com.ruoyi.mybasic.common.domain.MoneyWithdraw;
@@ -15,7 +16,7 @@ import java.util.List;
* 钱包持久层-->新
*/
public interface PurseServiceTwo {
- PurseResponse purseObject();
+ Purse purseObject();
void addPurse(Long userId);
diff --git a/src/main/java/com/ruoyi/mybasic/util/HttpUtils.java b/src/main/java/com/ruoyi/mybasic/util/HttpUtils.java
new file mode 100644
index 0000000..fd59940
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/util/HttpUtils.java
@@ -0,0 +1,314 @@
+package com.ruoyi.mybasic.util;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpDelete;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.methods.HttpPut;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.conn.scheme.Scheme;
+import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.entity.ByteArrayEntity;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.security.KeyManagementException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class HttpUtils {
+
+ /**
+ * get
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doGet(String host, String path, String method,
+ Map headers,
+ Map querys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpGet request = new HttpGet(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * post form
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param bodys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ Map bodys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (bodys != null) {
+ List nameValuePairList = new ArrayList();
+
+ for (String key : bodys.keySet()) {
+ nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key)));
+ }
+ UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8");
+ formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
+ request.setEntity(formEntity);
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Post String
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ String body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (StringUtils.isNotBlank(body)) {
+ request.setEntity(new StringEntity(body, "utf-8"));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Post stream
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPost(String host, String path, String method,
+ Map headers,
+ Map querys,
+ byte[] body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPost request = new HttpPost(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (body != null) {
+ request.setEntity(new ByteArrayEntity(body));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Put String
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPut(String host, String path, String method,
+ Map headers,
+ Map querys,
+ String body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPut request = new HttpPut(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (StringUtils.isNotBlank(body)) {
+ request.setEntity(new StringEntity(body, "utf-8"));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Put stream
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @param body
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doPut(String host, String path, String method,
+ Map headers,
+ Map querys,
+ byte[] body)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpPut request = new HttpPut(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ if (body != null) {
+ request.setEntity(new ByteArrayEntity(body));
+ }
+
+ return httpClient.execute(request);
+ }
+
+ /**
+ * Delete
+ *
+ * @param host
+ * @param path
+ * @param method
+ * @param headers
+ * @param querys
+ * @return
+ * @throws Exception
+ */
+ public static HttpResponse doDelete(String host, String path, String method,
+ Map headers,
+ Map querys)
+ throws Exception {
+ HttpClient httpClient = wrapClient(host);
+
+ HttpDelete request = new HttpDelete(buildUrl(host, path, querys));
+ for (Map.Entry e : headers.entrySet()) {
+ request.addHeader(e.getKey(), e.getValue());
+ }
+
+ return httpClient.execute(request);
+ }
+
+ private static String buildUrl(String host, String path, Map querys) throws UnsupportedEncodingException {
+ StringBuilder sbUrl = new StringBuilder();
+ sbUrl.append(host);
+ if (!StringUtils.isBlank(path)) {
+ sbUrl.append(path);
+ }
+ if (null != querys) {
+ StringBuilder sbQuery = new StringBuilder();
+ for (Map.Entry query : querys.entrySet()) {
+ if (0 < sbQuery.length()) {
+ sbQuery.append("&");
+ }
+ if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) {
+ sbQuery.append(query.getValue());
+ }
+ if (!StringUtils.isBlank(query.getKey())) {
+ sbQuery.append(query.getKey());
+ if (!StringUtils.isBlank(query.getValue())) {
+ sbQuery.append("=");
+ sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8"));
+ }
+ }
+ }
+ if (0 < sbQuery.length()) {
+ sbUrl.append("?").append(sbQuery);
+ }
+ }
+
+ return sbUrl.toString();
+ }
+
+ private static HttpClient wrapClient(String host) {
+ HttpClient httpClient = new DefaultHttpClient();
+ if (host.startsWith("https://")) {
+ sslClient(httpClient);
+ }
+
+ return httpClient;
+ }
+
+ private static void sslClient(HttpClient httpClient) {
+ try {
+ SSLContext ctx = SSLContext.getInstance("TLS");
+ X509TrustManager tm = new X509TrustManager() {
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+ @Override
+ public void checkClientTrusted(X509Certificate[] xcs, String str) {
+
+ }
+ @Override
+ public void checkServerTrusted(X509Certificate[] xcs, String str) {
+
+ }
+ };
+ ctx.init(null, new TrustManager[] { tm }, null);
+ SSLSocketFactory ssf = new SSLSocketFactory(ctx);
+ ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
+ ClientConnectionManager ccm = httpClient.getConnectionManager();
+ SchemeRegistry registry = ccm.getSchemeRegistry();
+ registry.register(new Scheme("https", 443, ssf));
+ } catch (KeyManagementException ex) {
+ throw new RuntimeException(ex);
+ } catch (NoSuchAlgorithmException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
+}
diff --git a/src/main/java/com/ruoyi/mybasic/util/UploadUtil.java b/src/main/java/com/ruoyi/mybasic/util/UploadUtil.java
new file mode 100644
index 0000000..b4b1605
--- /dev/null
+++ b/src/main/java/com/ruoyi/mybasic/util/UploadUtil.java
@@ -0,0 +1,77 @@
+package com.ruoyi.mybasic.util;
+
+import com.google.gson.Gson;
+import com.qiniu.common.QiniuException;
+import com.qiniu.http.Response;
+import com.qiniu.storage.Configuration;
+import com.qiniu.storage.Region;
+import com.qiniu.storage.UploadManager;
+import com.qiniu.storage.model.DefaultPutRet;
+import com.qiniu.util.Auth;
+import com.ruoyi.mybasic.config.QiNiuYunConfig;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ * 七牛云文件上传工具类
+ */
+@Component
+public class UploadUtil {
+
+ @Resource
+ private QiNiuYunConfig qiNiuYunConfig;
+
+
+ public String upload(MultipartFile file){
+ //文件后缀名
+ String suffix = file.getOriginalFilename().substring(
+ file.getOriginalFilename().lastIndexOf(".")
+ );
+ //根据时间戳定义新文件名 并拼接后缀
+ String fileName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"))+suffix;
+
+ //构造一个带指定 Region 对象的配置类
+ Configuration cfg = new Configuration(Region.huadongZheJiang2());
+ cfg.resumableUploadAPIVersion = Configuration.ResumableUploadAPIVersion.V2;// 指定分片上传版本
+ cfg.resumableUploadMaxConcurrentTaskCount = 2;
+
+ //...其他参数参考类注释
+ UploadManager uploadManager = new UploadManager(cfg);
+ //...生成上传凭证,然后准备上传
+ String accessKey = qiNiuYunConfig.getAccessKey();
+ String secretKey = qiNiuYunConfig.getSecretKey();
+ String bucket = qiNiuYunConfig.getBucket();
+ //默认不指定key的情况下,以文件内容的hash值作为文件名
+ String key = fileName;
+
+ Auth auth = Auth.create(accessKey, secretKey);
+ String upToken = auth.uploadToken(bucket);
+ try {
+ Response response = uploadManager.put(file.getBytes(), key, upToken);
+ //解析上传成功的结果
+ DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
+ System.out.println(putRet.key); //文件名 利用时间戳
+ System.out.println(putRet.hash);
+ return qiNiuYunConfig.getHostName()+putRet.key;
+ } catch (QiniuException ex) {
+ ex.printStackTrace();
+ if (ex.response != null) {
+ System.err.println(ex.response);
+ try {
+ String body = ex.response.toString();
+ System.err.println(body);
+ } catch (Exception ignored) {
+ }
+ }
+ } catch (IOException e) {
+ System.out.println("文件解析异常");
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml
index d52dafb..a17080b 100644
--- a/src/main/resources/bootstrap.yml
+++ b/src/main/resources/bootstrap.yml
@@ -1,12 +1,17 @@
# Tomcat
server:
- port: 9001
+ port: 9090
# Spring
spring:
+
+ servlet:
+ multipart:
+ max-file-size: 100MB
+ max-request-size: 128MB
application:
# 应用名称
- name: health-mybasic
+ name: health-mybasicTwo
profiles:
# 环境配置
active: dev
@@ -36,6 +41,19 @@ spring:
alipay.notifyUrl: http://vhzkca.natappfree.cc/alipay/notify
alipay.returnUrl: http://localhost:9001/purse
+# 七牛云
+ # Tomcat设置最大传输文件为100MB
+
+
+ # 密钥
+qi-niu-yun:
+ access-key: Jh_cfiuScoP26TjMeGSzXJWRYI6ClKASz_R2dn1C
+ secret-key: EEGZt0ObiO3dxcb_WDE1hPCsu_au1rSJ7mAHka_-
+ # 空间名称
+ bucket: test-2102
+ # 域名
+ host-name: http://s2lnqk3yo.bkt.clouddn.com/
+
#沙箱配置
# alipay.appId: 9021000130611735
# alipay.appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDM7+9TRvFFs0acZNRvgKrTUnig4k1Th/Pl02VRI4aTNpQIHpiTcViytaIr9ByioCNzmE5D3hMMp4arN3MiXnH9c+R9holwDtjbQyDC9QLRwZVMRnduXdZ42h2+5jhbt34wKXp61t3rFW9X9gA2iPJYbV6LRmyX+iuhfGtk5YPrTu307D79E6p7n7h+UBxaS0w0u5pm2eoiKFml3hRRhuY6IqEOo87gg7psjpj+KEV81cpDpvlICYRfVq425PWA+wTKVPsV2YGK0V6da3qbo17bNeBU6vIOUaDDkfflCZG2wSdRKzmrVrrr2i+lzuC3pxNimFDavvaRBdF1RzdvmeHBAgMBAAECggEAIEloxhD2MAn3hOopwctenl5u3MHqds+DcGDmpGrZZ9YAamsPlKMV20ncW9pgrIpYK30CT5TsIWE/STg6Ll78zHZ2uAP7ISllpt2jirN5FzzNXa/4Xu3vvSh36TxyApkdC09tmW7ClafR2+TI0c6vh5jrfTvCHgtu1kk4zjOOngKPxRielI7qcSyO0GGlNPYIXZO7X9De/lqNsAu0e8j8DbAWhOx/0EZ7zpZEBTVyZe2s7Lbq1lEWqn07vYjKWCoAp9O1IEll/9963U5yfV+rMj47lP+k5x/oa6HVd5TxeUeOX2vd/HZitxBeq4lPt5cqHciLWnPgvv68VrviB5pmZQKBgQD/orVuGXdcw3zOBHnzqOclC05sZH2UO6CrJERn82gKCgdx5wQwE1WwqgI0S+oGVpO6wgAM/1g6vT8U6EgovMbdmjZ+Adf657EHLEBOYee34PrVLRcc+uMbFTTwM7E31l+SUIcYLXw2zqu2/QXv7/4K6cWx0cIhCse3NvWc6oRb4wKBgQDNOrlwlYV316ZZp5II5EmqKMEvAx+Lf/4SqPBdj0BDCtZGqM0ADMUCBb0mATnRebalgGqPbIWgIDKrHXUOy2Kr5ARIRERp3oV1csXFAwIgxMncyOKJqGAHZBLeQFkLP6PEL7gniIGAIsIT5ecu5EzuEUQNHxLSVD7c5BZTmK+FCwKBgACNy7LXX0jWK5kOrWz3urh708msVhFSJ8D3LSbEgj8zUlzO0VWBVTgyxhpy56jn2x4WeYWNsBVAf7h94FomPpAQW3neaydiBSIs2F7TG3tsg16e4GPxrzhJzXmPwxyJ3F8myYQl5RUBUaHt3mtsq7I+W21NNQx5R4GAHvweDfddAoGAPetS2bnzC+ZfhTs+nzopU5J6PrHliZQzVvPrmX7H97JEVgtF1pcDtYl/uQCzrhTX23U0MVOfuWEdiG0ZzT3l5lCkTh1yurJtd7MKIle3A6X79YYSe0/2sSQrYSzu8KrhwSZYnGzeDYfvIEvEBWzSHR3Od1sBtb2/Pav/ZHdztWMCgYEA7/DECBPTvQaXLWYZO96UQ7y1WCelmfCa0XbRvwL/i3DB5/aK0d8eSDUVQ9aXTmegRMcXrvGgf3YmLteipUpwUq0i6KNM/ynDbx3W0LtG53+BOsFSnVkNsN53GZJ6C+ZoxmPcouCWdaxdjPoJFF1pPv1lb8Ia5qnhHaoMjLYoSpQ=
diff --git a/src/main/resources/mapper/MessageMapper.xml b/src/main/resources/mapper/MessageMapper.xml
new file mode 100644
index 0000000..7227fbf
--- /dev/null
+++ b/src/main/resources/mapper/MessageMapper.xml
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+ insert into t_bank
+ (
+
+ user_id,
+
+
+ card_type,
+
+
+ bank_name,
+
+
+ card_no,
+
+
+ bank_id,
+
+
+ bank_code,
+
+ create_time
+ )
+ values
+ (
+
+ #{userId},
+
+
+ #{cardType},
+
+
+ #{bankName},
+
+
+ #{cardNo},
+
+
+ #{bankId},
+
+
+ #{bankCode},
+
+ now()
+ )
+
+
+
+
diff --git a/src/main/resources/mapper/PurseMapperTwo.xml b/src/main/resources/mapper/PurseMapperTwo.xml
index 8596bdb..50086cc 100644
--- a/src/main/resources/mapper/PurseMapperTwo.xml
+++ b/src/main/resources/mapper/PurseMapperTwo.xml
@@ -99,7 +99,7 @@
-