From 41e05da9a811cd9394ce9bddf5edcb7cde58db06 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 06 三月 2025 16:49:36 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/xiaochen991015/xizang --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BankOutController.java | 190 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 190 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..fd0274e 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,23 @@ package com.ruoyi.web.controller.api; +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.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 +25,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 +42,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 +61,165 @@ 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.setBillName(order.getUserName()); + respBill.setFeeAmt(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");*/ + BigDecimal outstandAmount = bills.stream().map(TBillDto::getOutstandingMoney).reduce(BigDecimal::add).get(); + //欠费金额 + respBill.setOweAmt(outstandAmount.setScale(2,RoundingMode.HALF_DOWN).toPlainString()); + 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