From efd229f59ecd8aae8e1e9764859824a82bf4b111 Mon Sep 17 00:00:00 2001
From: zhangmei <645025773@qq.com>
Date: 星期三, 19 三月 2025 09:50:11 +0800
Subject: [PATCH] 修改邮件
---
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BankOutController.java | 191 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 191 insertions(+), 0 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BankOutController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BankOutController.java
index c474d4d..56ef4cd 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BankOutController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BankOutController.java
@@ -1,8 +1,25 @@
package com.ruoyi.web.controller.api;
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.TypeReference;
+import com.ruoyi.common.constant.AmountConstant;
+import com.ruoyi.common.enums.BillTypeEnum;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.system.dto.TBillDto;
+import com.ruoyi.system.model.TOrderBill;
+import com.ruoyi.system.model.TPayOrder;
import com.ruoyi.system.service.TBillService;
+import com.ruoyi.system.service.TOrderBillService;
+import com.ruoyi.system.service.TPayOrderService;
import com.taxi591.bankapi.dto.CovertPayBackResult;
+import com.taxi591.bankapi.dto.QueryBillRequest;
+import com.taxi591.bankapi.dto.QueryBillResponse;
import com.taxi591.bankapi.service.BankService;
+import com.taxi591.bankapi.service.SignatureAndVerification;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -10,9 +27,16 @@
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
@RestController
@RequestMapping("open/bank")
+@Slf4j
public class BankOutController {
@Autowired
@@ -20,6 +44,16 @@
@Autowired
TBillService tBillService;
+
+ @Autowired
+ SignatureAndVerification signatureAndVerification;
+
+ @Autowired
+ TOrderBillService orderBillService;
+
+ @Autowired
+ TPayOrderService payOrderService;
+
@PostMapping(value = "payCallback")
public @ResponseBody String payCallback(HttpServletRequest request){
CovertPayBackResult result = bankService.covertPayCallBack(request, (billRequest) -> {
@@ -29,7 +63,164 @@
return result.getBack();
}
+ @PostMapping(value = "queryBill")
+ public void bills(HttpServletRequest request, HttpServletResponse httpServletResponse){
+ log.info("进入QueryBillController账单查询接口--------(金额规则为0的)-------");
+ String responseJson = null;
+ try {
+ //接收报文request返回截取并返回requestBody和使用base64解析后的requestBody
+ Map<String, String> requestMap = signatureAndVerification.requestBodyOfBase64(request);
+ //使用base64解析完成后的requestBody
+ String requestBodyOfDecoded = requestMap.get("requestBodyOfDecoded");
+ //解析前的requestBody
+ String requestBody = requestMap.get("requestBody");
+ //获取缴费中心传送过来的签名
+ String signatureString = requestMap.get("signatureString");
+
+ // 验签
+ boolean flag = signatureAndVerification.read_cer_and_verify_sign(requestBody,
+ signatureString);
+
+ log.info("【QueryBill:getBill4DirectJoinMerch】缴费中心响应的报文验签结果为:{}" , flag);
+
+ QueryBillRequest queryBillRequest = JSON.parseObject(requestBodyOfDecoded,
+ new TypeReference<QueryBillRequest>() {
+ });
+ //交易编号
+ String traceNo = queryBillRequest.getMessage().getInfo()
+ .getTraceNo();
+ //返回给缴费中心的响应
+ QueryBillResponse response = new QueryBillResponse(queryBillRequest);
+ QueryBillResponse.Message respMessage = response.getMessage();
+ QueryBillResponse.Message.Head respHead = response.getMessage()
+ .getHead();
+ QueryBillResponse.Message.Info respInfo = response.getMessage()
+ .getInfo();
+ //缴费账单子账单
+ ArrayList<QueryBillResponse.Message.Info.Bill> respBills = new ArrayList<QueryBillResponse.Message.Info.Bill>();
+ ArrayList<QueryBillResponse.Message.Info.Bill.DescDetail> respDescDetail =
+ new ArrayList<QueryBillResponse.Message.Info.Bill.DescDetail>();
+ QueryBillResponse.Message.Info.Bill respBill = respInfo.new Bill();
+ //缴费子商户账单
+// ArrayList<QueryBillResponse.Message.Info.Bill.SplitSubMerInfo> splitSubMerInfos = new ArrayList<QueryBillResponse.Message.Info.Bill.SplitSubMerInfo>();
+
+ //封装返回给缴费中心的响应
+
+ String epayCode = queryBillRequest.getMessage().getInfo()
+ .getEpayCode();
+ respInfo.setEpayCode(epayCode);
+ String merchantId = queryBillRequest.getMessage().getInfo()
+ .getMerchantId();
+ respInfo.setMerchantId(merchantId);
+ respInfo.setTraceNo(traceNo);
+ respInfo.setInput1(queryBillRequest.getMessage().getInfo()
+ .getInput1());
+ respInfo.setInput2(queryBillRequest.getMessage().getInfo()
+ .getInput2());
+ respInfo.setInput3(queryBillRequest.getMessage().getInfo()
+ .getInput3());
+ respInfo.setInput4(queryBillRequest.getMessage().getInfo()
+ .getInput4());
+ respInfo.setInput5(queryBillRequest.getMessage().getInfo()
+ .getInput5());
+ String orderid= queryBillRequest.getMessage().getInfo().getInput1();
+ if (StringUtils.isEmpty(orderid)){
+ respHead.setReturnCode("0009");
+ respHead.setReturnMessage("参数错误,input1订单号不能为空");
+ }else{
+ if (flag){
+
+ TPayOrder order = payOrderService.getById(orderid);
+ List<TOrderBill> orderBills = orderBillService.getByOrderNo(orderid);
+ List<TBillDto> bills = orderBills.stream().map(ob
+ -> tBillService.getDetailByBillId(ob.getBillId())).collect(Collectors.toList());
+ respBill.setBillNo(orderid);
+ List<String> types = bills.stream().map(bill -> BillTypeEnum.getByCode(Integer.parseInt(bill.getBillType())).getName()).distinct().collect(Collectors.toList());
+// 封装详细账单信息
+ respBill.setBillName("缴费:"+CollectionUtil.join(types,","));
+ respBill.setOweAmt(BigDecimal.valueOf(order.getAmount()).divide(AmountConstant.b100,2, RoundingMode.HALF_DOWN).toPlainString());
+ respBills.add(respBill);
+ respInfo.setCustName(order.getUserName());
+ respInfo.setCustAddress("");
+ respInfo.setCacheMem("");
+ respInfo.setRemark("");
+ respInfo.setCallBackText("西藏国资委");
+ //respInfo.setCallBackUrl("https://abcsr.keepfx.cn/b/ejy/payResult/");
+ //使用base64加密信息
+// respInfo.setCallBackUrl("aHR0cDp3d3cuYWJjaGluYS5jb20vY24v");
+ //金额规则字段
+ String amtRule = "0";
+ respInfo.setAmtRule(amtRule);
+ /*QueryBillResponse.Message.Info.Bill.UnitDetail unitDetail = respBill.new UnitDetail(
+ "unitName", "6.66", "1");*/
+ //欠费金额
+ respBill.setFeeAmt("0.00");
+//
+// QueryBillResponse.Message.Info.Bill.DescDetail descDtail1 = respBill.new DescDetail(
+// "缴费月份:", "2020年6月份");
+// QueryBillResponse.Message.Info.Bill.DescDetail descDtail2 = respBill.new DescDetail(
+// "供电局编号:", "4340152");
+// QueryBillResponse.Message.Info.Bill.DescDetail descDtail3 = respBill.new DescDetail(
+// "欠费金额:", "0.00元");
+// QueryBillResponse.Message.Info.Bill.DescDetail descDtail4 = respBill.new DescDetail(
+// "缴费月份:", "2020年6月份");
+// QueryBillResponse.Message.Info.Bill.DescDetail descDtail5 = respBill.new DescDetail(
+// "服务时间:", "每天0:30-23:30期间均可缴费");
+// QueryBillResponse.Message.Info.Bill.DescDetail descDtail6 = respBill.new DescDetail(
+// "温馨提示:", "北京电力电费代缴,咨询电话:95598 该用户为:预付费用户");
+// respDescDetail.add(descDtail1);
+// respDescDetail.add(descDtail2);
+// respDescDetail.add(descDtail3);
+// respDescDetail.add(descDtail4);
+// respDescDetail.add(descDtail5);
+// respDescDetail.add(descDtail6);
+
+// respBill.setRcvMerchantId("103881104410001");
+
+// 商户子商户详细信息
+// QueryBillResponse.Message.Info.Bill.SplitSubMerInfo splitSubMerInfo1 =respBill.new SplitSubMerInfo("10388", "0.01");
+// QueryBillResponse.Message.Info.Bill.SplitSubMerInfo splitSubMerInfo2 =respBill.new SplitSubMerInfo("1038819201", "0.02");
+// splitSubMerInfos.add(splitSubMerInfo1);
+// splitSubMerInfos.add(splitSubMerInfo2);
+
+// respBill.setSplitSubMerInfos(splitSubMerInfos);
+// respBill.setDescDetails(respDescDetail);
+ respInfo.setTotalBillCount(String.valueOf(respBills.size()));
+ respInfo.setBill(respBills);
+
+ // 有定制电子回单附言信息的,需添加自定义定制附言信息字段
+ respInfo.setMerchantRemark("");
+ respHead.setReturnCode("0000");
+ respHead.setReturnMessage("账单查询成功,返回成功标志");
+ }else {
+ respHead.setReturnCode("0009");
+ respHead.setReturnMessage("缴费中心传送给商户的请求报文签名验签失败!");
+ }
+ }
+
+ respHead.setTransFlag("02");
+ respHead.setTimeStamp(DateUtil.format(new Date(),"yyyyMMddHHmmssSSS"));
+
+ respMessage.setInfo(respInfo);
+ respMessage.setHead(respHead);
+ response.setMessage(respMessage);
+ responseJson = JSON.toJSONString(response);
+ // 加签名
+ String signatrue = signatureAndVerification
+ .signWhithsha1withrsa(responseJson);
+ log.info("signatrue" + responseJson);
+ log.info("responseJson打印结果是(responseJson加密前):" + responseJson);
+ responseJson = signatrue + "||"
+ + new String(Base64.encodeBase64(responseJson.getBytes("utf-8")));
+ log.info("responseJson打印结果是(responseJson加密后):{}", responseJson);
+ httpServletResponse.setCharacterEncoding("utf-8");
+ httpServletResponse.setContentType("text/plain");
+ httpServletResponse.getWriter().write(responseJson);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
}
--
Gitblit v1.7.1