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 @@ - select * from t_purse where user_id = #{userId}