From 5cc9063aafa13e75d0fd918bd968c59f61525e2d Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: Thu, 23 Jan 2025 14:01:59 +0800
Subject: [PATCH] 煤矿缴费
---
exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayServiceImpl.java | 97 +++++++++++++++++--
exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayService.java | 4
exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java | 85 ++++++++++++++++-
exam-system/src/test/java/TextPay.java | 21 +++
exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayStudentServiceImpl.java | 5 +
exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayStudentService.java | 1
exam-system/src/main/java/com/gkhy/exam/pay/controller/CoalPayController.java | 20 ++--
exam-system/src/main/java/com/gkhy/exam/pay/controller/PayFeesController.java | 41 ++++++++
ruoyi-common/pom.xml | 5 +
9 files changed, 250 insertions(+), 29 deletions(-)
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/controller/CoalPayController.java b/exam-system/src/main/java/com/gkhy/exam/pay/controller/CoalPayController.java
index 9b84a40..8e9235d 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/controller/CoalPayController.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/controller/CoalPayController.java
@@ -8,6 +8,7 @@
import com.gkhy.exam.pay.dto.req.CoalPayTypeReq;
import com.gkhy.exam.pay.entity.CoalPayStudent;
import com.gkhy.exam.pay.service.CoalPayService;
+import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -95,20 +96,19 @@
/**
* 个人缴费接口
*/
- @PostMapping("/findStudent")
+ @GetMapping("/findStudent")
+ @Anonymous
@ApiOperation(value ="H5个人缴费查询")
- public AjaxResult findStudent(@RequestBody CoalPayStudentReq coalPayStudent){
- List<CoalPayStudentRep> coalPayStudentReps = coalPayService.selectCoalPay(coalPayStudent);
+ public AjaxResult findStudent(@RequestParam("idCard") String idCard,@RequestParam("phone") String phone){
+ List<CoalPayStudentRep> coalPayStudentReps = coalPayService.selectCoalPay(idCard,phone);
return success(coalPayStudentReps);
}
-
-
-// @PostMapping("/personPay")
-// @ApiOperation(value = "个人缴费接口")
-// public void payFees(){
-//
-// }
+ @PostMapping("/personPay")
+ @ApiOperation(value = "个人缴费接口")
+ public AjaxResult payMoney(@RequestParam("coalPayId") Long coalPayId,@RequestParam("studentId") Long studentId){
+ return success(coalPayService.personPayMoney(coalPayId,studentId));
+ }
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/controller/PayFeesController.java b/exam-system/src/main/java/com/gkhy/exam/pay/controller/PayFeesController.java
new file mode 100644
index 0000000..ac51b25
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/controller/PayFeesController.java
@@ -0,0 +1,41 @@
+package com.gkhy.exam.pay.controller;
+
+
+import com.alibaba.fastjson2.JSONObject;
+import com.gkhy.exam.pay.utils.PayUtils;
+import com.ruoyi.common.core.controller.BaseController;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.util.Map;
+
+@RestController
+@Api(tags = "缴费通知")
+@RequestMapping("/pay/payFees")
+public class PayFeesController extends BaseController {
+
+
+ @PostMapping("/inform")
+ public Map<String,String> inform(@RequestBody JSONObject jsonObject){
+ PayUtils payUtils = new PayUtils();
+ Map<String, String> receive = null;
+ try {
+ receive = payUtils.receive(jsonObject);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return receive;
+ }
+
+
+
+
+
+
+
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayService.java b/exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayService.java
index 2ff3cb6..74d3a12 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayService.java
@@ -24,7 +24,9 @@
AjaxResult deleteCoalPayByIds(Long[] ids);
- List<CoalPayStudentRep> selectCoalPay(CoalPayStudentReq coalPayStudent);
+ List<CoalPayStudentRep> selectCoalPay(String idcard,String phone);
int updateCoalPayType(CoalPayTypeReq coalPayDto);
+
+ String personPayMoney(Long coalPayId, Long studentId);
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayStudentService.java b/exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayStudentService.java
index 7058e67..65872cc 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayStudentService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayStudentService.java
@@ -27,4 +27,5 @@
List<CoalPayStudent> selectbyIdcard(CoalPayStudentReq coalPayStudent);
+ CoalPayStudent selectbyId(Long studentId);
}
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 1f1cd8b..4043ca1 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
@@ -7,35 +7,37 @@
import com.gkhy.exam.pay.dto.req.CoalPayReq;
import com.gkhy.exam.pay.dto.req.CoalPayStudentReq;
import com.gkhy.exam.pay.dto.req.CoalPayTypeReq;
-import com.gkhy.exam.pay.entity.CoalCategory;
-import com.gkhy.exam.pay.entity.CoalPay;
-import com.gkhy.exam.pay.entity.CoalPayCategory;
-import com.gkhy.exam.pay.entity.CoalPayStudent;
+import com.gkhy.exam.pay.entity.*;
import com.gkhy.exam.pay.mapper.CoalCategoryMapper;
import com.gkhy.exam.pay.mapper.CoalPayCategoryMapper;
import com.gkhy.exam.pay.mapper.CoalPayMapper;
import com.gkhy.exam.pay.service.CoalPayService;
import com.gkhy.exam.pay.service.CoalPayStudentService;
+import com.gkhy.exam.pay.utils.PayUtils;
+import com.gkhy.exam.pay.utils.ResultVo;
import com.ruoyi.common.constant.ResultConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
-import com.ruoyi.common.core.domain.entity.SysUser;
-import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.exception.BusinessException;
+import com.ruoyi.common.utils.RandomUtil;
import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.mapper.SysDeptMapper;
-import javafx.print.Collation;
-import org.aspectj.weaver.loadtime.Aj;
+import org.aspectj.lang.reflect.UnlockSignature;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
+import java.io.IOException;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Date;
import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
import java.util.stream.Collectors;
@Service
@@ -52,6 +54,11 @@
private CoalCategoryMapper coalCategoryMapper;
@Autowired
private CoalPayStudentService coalPayStudentService;
+
+ @Autowired
+ private RedissonClient redissonClient;
+
+
/**
@@ -168,9 +175,12 @@
//个人查询缴费
@Override
- public List<CoalPayStudentRep> selectCoalPay(CoalPayStudentReq coalPayStudent) {
+ public List<CoalPayStudentRep> selectCoalPay(String idcard,String phone) {
+ CoalPayStudentReq coalPayStudentReq = new CoalPayStudentReq();
+ coalPayStudentReq.setIdCard(idcard);
+ coalPayStudentReq.setPhone(phone);
//查询个人需要缴费
- List<CoalPayStudent> coalPayStudents = coalPayStudentService.selectbyIdcard(coalPayStudent);
+ List<CoalPayStudent> coalPayStudents = coalPayStudentService.selectbyIdcard(coalPayStudentReq);
List<CoalPayStudentRep> coalPayStudentReps = new ArrayList<>();
for (CoalPayStudent payStudent : coalPayStudents) {
//封装学生基础信息
@@ -205,4 +215,69 @@
}
return coalPayMapper.updateByPayId(coalPayTypeReq);
}
+
+ @Override
+ public String personPayMoney(Long coalPayId, Long studentId) {
+ CoalPayStudent coalPayStudent = coalPayStudentService.selectbyId(studentId);
+ CoalPay coalPay = coalPayMapper.selectById(coalPayId);
+ List<CoalCategory> coalCategories = coalCategoryMapper.selectByCoalPayId(coalPayId);
+ CoalTicket coalTicket = coalCategoryMapper.selectCoalTicket();
+
+ PayReqData payReqData = new PayReqData();
+ payReqData.setOrderNo(RandomUtil.generateOrderNumber());
+ payReqData.setMoney(coalPay.getAmount());
+ payReqData.setAmount(1);
+ payReqData.setPayerName(coalPayStudent.getName());
+ payReqData.setCertNo(coalPayStudent.getIdCard());
+ payReqData.setPayerType(1);
+ payReqData.setInvoiceSocialCode(coalTicket.getTicketCompanyCode());
+ payReqData.setHandlingPerson(coalTicket.getDrawer());
+ payReqData.setChecker(coalTicket.getCheck());
+ payReqData.setEnterCode(coalTicket.getCompanyCode());
+ payReqData.setDesc(coalPay.getBatchName());
+
+ PayReqData.Feedata feedata = new PayReqData.Feedata();
+ List<PayReqData.Feedata> feedatas = new ArrayList<>();
+ for (CoalCategory coalCategory : coalCategories) {
+ feedata.setAmount(1);
+ feedata.setPrice(coalCategory.getAmount());
+ feedata.setBusCode(coalCategory.getBusinessCode());
+ feedatas.add(feedata);
+ }
+ payReqData.setFeeDatas(feedatas);
+
+ CoalPayStudent payStudent = new CoalPayStudent();
+
+ RLock lock = redissonClient.getLock("SWSPKMAS_PAY_PERSON");
+ try {
+ lock.lock(10, TimeUnit.SECONDS);
+ if (coalPayStudent.getGovPayStatus()!=0){
+ throw new BusinessException(this.getClass(),ResultConstants.BUSINESS_ERROR,"请勿重复发起支付");
+ }
+ if (StringUtils.isEmpty(coalPayStudent.getPayCode())){
+
+ }
+
+
+ ResultVo resultVo = PayUtils.sendApiPost(payReqData);
+ if (resultVo.getRespcode().equals("BUS0000")){
+ payStudent.setId(studentId);
+ payStudent.setOrderId(resultVo.getRespdata().getOrderNo());
+ payStudent.setGovPayStatus(1);
+ payStudent.setPayCode(resultVo.getRespdata().getBillNo());
+ coalPayStudentService.updateByCoalPayStudent(payStudent);
+ return resultVo.getRespdata().getBillNo();
+ }else {
+ throw new BusinessException(this.getClass(),ResultConstants.BUSINESS_ERROR,"发起支付失败,请稍后重试");
+ }
+ }catch (BusinessException e){
+ throw new BusinessException(this.getClass(),ResultConstants.BUSINESS_ERROR,"请稍后重试");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } finally {
+ if(lock.isLocked()){
+ lock.unlock();
+ }
+ }
+ }
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayStudentServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayStudentServiceImpl.java
index 52d6633..982e645 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayStudentServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayStudentServiceImpl.java
@@ -141,4 +141,9 @@
public List<CoalPayStudent> selectbyIdcard(CoalPayStudentReq coalPayStudent) {
return coalPayStudentMapper.selectByIdcard(coalPayStudent);
}
+
+ @Override
+ public CoalPayStudent selectbyId(Long studentId) {
+ return coalPayStudentMapper.selectById(studentId);
+ }
}
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java b/exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java
index b994838..135fade 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java
@@ -3,10 +3,7 @@
import com.alibaba.fastjson2.JSONObject;
import com.gkhy.exam.pay.entity.PayReqData;
import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.NameValuePair;
-import org.apache.http.StatusLine;
+import org.apache.http.*;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.HttpResponseException;
@@ -29,6 +26,7 @@
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
+import javax.annotation.Resource;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
@@ -44,11 +42,13 @@
*/
public class PayUtils {
+ private final static String appid="ED76A5F1703540BE977D34780B371FEB";
+
+
public static ResultVo sendApiPost(PayReqData payReqData) throws IOException {
//正式
String proUrl="http://finpt.xjcz.gov.cn/fs-service/fs-pay/invoice.do";
- String appid="ED76A5F1703540BE977D34780B371FEB";
//测试
String testUrl= "http://finpt.xjcz.gov.cn/fs-service-test/fs-pay/invoice.do";
@@ -209,7 +209,82 @@
}
+ //缴费结果通知
+ public static Map<String,String> receive(JSONObject jsonObject) throws IOException {
+ Map<String, String> params = new HashMap<>();
+ JSONObject reqdata = new JSONObject();
+ Map<String,String> result = (Map<String, String>) jsonObject.get("reqdata");
+ String orderNo = result.get("orderNo");
+ //确认是否成功
+ String notarize= affirmPost(orderNo);
+ reqdata.put("orderNo",orderNo);
+ reqdata.put("status",notarize);
+
+ String req = Base64.getEncoder().encodeToString(reqdata.toJSONString().getBytes());
+ String mac = appid+"||"+req;
+ mac = DigestUtils.md5Hex(mac.getBytes());
+ params.put("appid",appid);
+ params.put("reqdata",req);
+ params.put("mac",mac);
+
+ return params;
+ }
+
+ //缴费结果确认查询
+ public static String affirmPost(String orderNo) throws IOException {
+ String porUrl="http://finpt.xjcz.gov.cn/fs-service/fs-pay/notifyConfirm.do";
+ String testUrl="http://finpt.xjcz.gov.cn/fs-service-test/fs-pay/notifyConfirm.do";
+
+ HashMap<String, String> param = new HashMap<>();
+
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("orderNo",orderNo);
+ String reqdata = Base64.getEncoder().encodeToString(jsonObject.toJSONString().getBytes());
+ String mac = appid+"||"+reqdata;
+ mac=DigestUtils.md5Hex(mac.getBytes());
+ param.put("appid",appid);
+ param.put("reqdata",reqdata);
+ param.put("mac",mac);
+
+ HttpPost httppost = new HttpPost(testUrl);
+ httppost.setEntity(assemblyFormEntity(param,"utf-8"));
+ HttpClient httpClient = getHttpClient(testUrl);
+ HttpResultVo execute = httpClient.execute(httppost, getResponseHandler());
+ String stringContent = execute.getStringContent();
+ ResultVo resultVo = JSONObject.parseObject(stringContent, ResultVo.class);
+ System.out.printf("请求结果为:"+resultVo);
+ if (resultVo.getRespcode().equals("BUS0000")){
+ return "success";
+ }
+ return "fail";
+ }
+
+ //缴费结果查询
+ public static JSONObject query(String orderNo) throws IOException {
+ String proUrl="http://finpt.xjcz.gov.cn/fs-service/fs-pay/query.do";
+ String testUrl="http://finpt.xjcz.gov.cn/fs-service-test/fs-pay/query.do";
+
+ HashMap<String, String> param = new HashMap<>();
+
+ JSONObject jsonObject = new JSONObject();
+ jsonObject.put("orderNo",orderNo);
+ String reqdata = Base64.getEncoder().encodeToString(jsonObject.toJSONString().getBytes());
+ String mac = appid+"||"+reqdata;
+ mac = DigestUtils.md5Hex(mac.getBytes());
+ param.put("appid",appid);
+ param.put("reqdata",reqdata);
+ param.put("mac",mac);
+
+ HttpPost httppost = new HttpPost(testUrl);
+ httppost.setEntity(assemblyFormEntity(param,"utf-8"));
+ HttpClient httpClient = getHttpClient(testUrl);
+ HttpResultVo execute = httpClient.execute(httppost, getResponseHandler());
+ String stringContent = execute.getStringContent();
+ JSONObject result = JSONObject.parseObject(stringContent);
+ System.out.printf("请求结果json为:"+result);
+ return result;
+ }
}
diff --git a/exam-system/src/test/java/TextPay.java b/exam-system/src/test/java/TextPay.java
index 5e8fda3..f3b89da 100644
--- a/exam-system/src/test/java/TextPay.java
+++ b/exam-system/src/test/java/TextPay.java
@@ -1,6 +1,9 @@
+import com.alibaba.fastjson2.JSONObject;
import com.gkhy.exam.pay.entity.PayReqData;
import com.gkhy.exam.pay.utils.PayUtils;
import com.gkhy.exam.pay.utils.ResultVo;
+import com.google.gson.JsonObject;
+import com.ruoyi.common.utils.RandomUtil;
import com.ruoyi.common.utils.uuid.UUID;
import lombok.extern.log4j.Log4j2;
import org.junit.jupiter.api.Test;
@@ -12,6 +15,7 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
@SpringBootTest(classes = TextPay.class)
@ActiveProfiles("dev")
@@ -27,7 +31,7 @@
PayReqData.Feedata feedatas = new PayReqData.Feedata();
payReqData.setDesc("安全技术考试考务费_煤矿安全作业-001504");
- payReqData.setOrderNo("10000000001");
+ payReqData.setOrderNo(RandomUtil.generateOrderNumber());
payReqData.setMoney(BigDecimal.valueOf(103));
payReqData.setAmount(1);
payReqData.setPayerName("测试");
@@ -46,13 +50,26 @@
payReqData.setFeeDatas(feedatas1);
- ResultVo resultVo = PayUtils.sendApiPost(payReqData);
+ PayUtils payUtils = new PayUtils();
+ ResultVo resultVo = payUtils.sendApiPost(payReqData);
System.out.printf("请求结果:"+resultVo);
}
+ @Test
+ public void text001(){
+ try {
+// String s = PayUtils.affirmPost("10000001");
+ JSONObject query = PayUtils.query("1000001");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+
}
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 78b298c..bae0a5e 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -161,6 +161,11 @@
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.redisson</groupId>
+ <artifactId>redisson-spring-boot-starter</artifactId>
+ <version>3.18.0</version>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
--
Gitblit v1.9.2