From 0ab9dfd8f122195e4e9f09bd50c59e0a47450bec Mon Sep 17 00:00:00 2001
From: mitao <2763622819@qq.com>
Date: 星期三, 19 三月 2025 15:50:03 +0800
Subject: [PATCH] fix: resolve merge conflicts in .gitignore

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BankOutController.java |  226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 226 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
new file mode 100644
index 0000000..56ef4cd
--- /dev/null
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/BankOutController.java
@@ -0,0 +1,226 @@
+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;
+import org.springframework.web.bind.annotation.ResponseBody;
+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
+    BankService bankService;
+
+    @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) -> {
+            tBillService.completePay(billRequest);
+            return true;
+        });
+        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