From ef57094e91072ebe05bb3781e028d6d7ad8a0c45 Mon Sep 17 00:00:00 2001 From: heheng <heheng@123456> Date: 星期一, 17 二月 2025 11:15:35 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/dev-20250116' into dev-20250116 --- exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayServiceImpl.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 101 insertions(+), 15 deletions(-) diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayServiceImpl.java index 79e19c9..d4116a9 100644 --- a/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayServiceImpl.java +++ b/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayServiceImpl.java @@ -1,5 +1,9 @@ package com.gkhy.exam.pay.service.impl; +import cn.com.jit.new_vstk.Bean.EnvelopResult; +import cn.com.jit.new_vstk.Bean.SignResult; +import cn.com.jit.new_vstk.Bean.VerifyResult; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.pay.dto.rep.CoalPayRepDto; import com.gkhy.exam.pay.dto.rep.CoalPayStudentRep; @@ -13,6 +17,7 @@ import com.gkhy.exam.pay.utils.PayUtils; import com.gkhy.exam.pay.utils.ResultVo; import com.gkhy.exam.pay.utils.Sign; +import com.gkhy.exam.pay.utils.SignDto; import com.ruoyi.common.constant.ResultConstants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysDept; @@ -21,6 +26,10 @@ import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.mapper.SysDeptMapper; +import lombok.extern.slf4j.Slf4j; +import org.dom4j.Document; +import org.dom4j.DocumentException; +import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; @@ -32,13 +41,13 @@ import javax.annotation.Resource; import java.io.IOException; import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.nio.charset.StandardCharsets; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Service +@Slf4j public class CoalPayServiceImpl extends ServiceImpl<CoalPayMapper, CoalPay> implements CoalPayService { @Resource @@ -191,6 +200,8 @@ coalPayStudentRep.setIdCard(payStudent.getIdCard()); coalPayStudentRep.setPhone(payStudent.getPhone()); coalPayStudentRep.setSex(payStudent.getSex()); + coalPayStudentRep.setPayType(payStudent.getPayType()); + coalPayStudentRep.setPayCode(payStudent.getPayCode()); coalPayStudentRep.setPayStatus(payStudent.getPayStatus()); //查询对应批次以及批次包含工种类别 @@ -253,10 +264,10 @@ ResultVo resultVo = payUtils.sendApiPost(payReqData); if (resultVo.getRespcode().equals("BUS0000")) { //进行票据签名并校验 - ResultVo resultVo1 = payUtils.uploadXml(resultVo.getRespdata().getOrderNo(), resultVo.getRespdata().getFileData()); - if (!resultVo1.getRespcode().equals("BUS0000")){ - throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "签名验证错误"); - } +// ResultVo resultVo1 = payUtils.uploadXml(resultVo.getRespdata().getOrderNo(), resultVo.getRespdata().getFileData()); +// if (!resultVo1.getRespcode().equals("BUS0000")){ +// throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "签名验证错误"); +// } payStudent.setId(studentId); payStudent.setOrderId(resultVo.getRespdata().getOrderNo()); payStudent.setGovPayStatus(1); @@ -315,11 +326,88 @@ } } + @Override + public ResultVo topay() throws IOException { + PayReqData payReqData = new PayReqData(); + PayReqData.Feedata feedatas = new PayReqData.Feedata(); + + + //订单编号 + payReqData.setOrderNo("NC202502170905105061"); + //订单总金额 + payReqData.setMoney(BigDecimal.valueOf(112)); + //子订单数目 + payReqData.setAmount(1); + //缴费人姓名(单位填单位名称)阿克苏地区博安煤矿安全技术服务中心 + payReqData.setPayerName("阿克苏地区博安煤矿安全技术服务中心"); + //缴费人证件号(单位填同一信用代码)52652900789893140A + payReqData.setCertNo("52652900789893140A"); + //缴款人类型(1个人 2单位) + payReqData.setPayerType(2); + //开票单位社会信用代码12650000MB1A9612XD + payReqData.setInvoiceSocialCode("11650000MB1957293J"); + //开票人 + payReqData.setHandlingPerson("姜倩"); + //复核人 + payReqData.setChecker("薄晓洁"); + //单位编码547185129 + payReqData.setEnterCode("547185129"); + //订单描述(非必填) + payReqData.setDesc("非煤安全作业理论考试-002002"); + //订单明细 + List<PayReqData.Feedata> feedatas1 = new ArrayList<>(); + //数量 +// feedatas.setAmount(1); +// //业务代码 +// feedatas.setBusCode("DZ12401"); +// //单价 +// feedatas.setPrice(BigDecimal.valueOf(56)); + PayReqData.Feedata feedata = new PayReqData.Feedata(); + feedata.setBusCode("DZ002002"); + feedata.setAmount(2); + feedata.setPrice(BigDecimal.valueOf(112)); +// feedatas1.add(feedatas); + feedatas1.add(feedata); + payReqData.setFeeDatas(feedatas1); + log.info("请求参数:"+ JSONObject.toJSONString(payReqData)); + + + PayUtils payUtils = new PayUtils(); + ResultVo resultVo = payUtils.sendApiPost(payReqData); + String fileData = resultVo.getRespdata().getFileData(); + //票据原文转为byte字节文件 + byte[] decode = Base64.getDecoder().decode(fileData); + //byte字节文件转为xml字符串 + String xmlString = new String(decode, StandardCharsets.UTF_8); + Document document = null; + try { + document = DocumentHelper.parseText(xmlString); + } catch (DocumentException e) { + throw new RuntimeException(e); + } + log.info("票据原文为:"+document.asXML()); + Element rootElement = document.getRootElement(); + SignResult sign = payUtils.sign(decode); + VerifyResult verify = payUtils.verify(decode,sign.getSignData()); + SignDto signDto = new SignDto("SM3", "DETACH", new Date(), verify.getSubjectdn(), verify.getSn(), verify.getIssure()); + log.info("拼接对象为:"+JSONObject.toJSONString(signDto)); + Sign sign1 = new Sign(); + Document signature = sign1.getSignature(signDto); +// Element rootElement1 = signature.getRootElement(); + log.info("拼接结果为:"+signature.asXML()); + rootElement.add(signature.getRootElement()); +// EnvelopResult envelopResult = payUtils.encryptEnvelop(document.asXML().getBytes()); +// log.info("制作数字信封为:"+ Arrays.toString(envelopResult.getEnvelopData())); + log.info("签名后票据为:"+document.asXML()); + ResultVo resultVo1 = payUtils.uploadXml(resultVo.getRespdata().getOrderNo(), document.asXML().getBytes()); + return resultVo1; + } + private PayReqData fillData(List<CoalPayStudent> coalPayStudent, CoalPay coalPay, List<CoalCategory> coalCategories, CoalTicket coalTicket,Integer payType,CoalTeamPayReq coalTeamPayReq) { PayReqData payReqData = new PayReqData(); payReqData.setOrderNo(RandomUtil.generateOrderNumber(coalPay.getId(), "CO")); payReqData.setMoney(coalPay.getAmount().multiply(BigDecimal.valueOf(coalPayStudent.size()))); - payReqData.setAmount(coalCategories.size()*coalPayStudent.size()); + payReqData.setAmount(coalCategories.size()); payReqData.setInvoiceSocialCode(coalTicket.getTicketCompanyCode()); payReqData.setHandlingPerson(coalTicket.getDrawer()); payReqData.setChecker(coalTicket.getCheck()); @@ -329,13 +417,11 @@ List<PayReqData.Feedata> feedatas = new ArrayList<>(); for (CoalCategory coalCategory : coalCategories) { - for (CoalPayStudent payStudent : coalPayStudent) { - PayReqData.Feedata feedata = new PayReqData.Feedata(); - feedata.setAmount(1); - feedata.setPrice(coalCategory.getAmount()); - feedata.setBusCode(coalCategory.getBusinessCode()); - feedatas.add(feedata); - } + PayReqData.Feedata feedata = new PayReqData.Feedata(); + feedata.setAmount(coalPayStudent.size()); + feedata.setPrice(coalCategory.getAmount().multiply(BigDecimal.valueOf(coalPayStudent.size()))); + feedata.setBusCode(coalCategory.getBusinessCode()); + feedatas.add(feedata); } payReqData.setFeeDatas(feedatas); -- Gitblit v1.9.2