From 5a88c770debe086dd82ab5ce8a4c957a3debdae7 Mon Sep 17 00:00:00 2001 From: “djh” <“3298565835@qq.com”> Date: 星期五, 24 一月 2025 17:07:09 +0800 Subject: [PATCH] 煤矿缴费修改 --- exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayServiceImpl.java | 89 +++++++++++++++++----- exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayService.java | 7 - exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java | 40 ++++++++++ exam-system/src/main/resources/mapper/pay/CoalPayStudentMapper.xml | 17 +++ exam-system/src/main/java/com/gkhy/exam/pay/dto/req/CoalTeamPayReq.java | 12 +++ exam-system/src/main/java/com/gkhy/exam/pay/entity/CoalPay.java | 2 exam-system/src/main/java/com/gkhy/exam/pay/service/impl/CoalPayStudentServiceImpl.java | 11 ++ exam-system/src/main/java/com/gkhy/exam/pay/service/CoalPayStudentService.java | 4 exam-system/src/main/java/com/gkhy/exam/pay/controller/CoalPayController.java | 14 ++- ruoyi-admin/src/main/resources/application-pro.yml | 3 exam-system/src/main/java/com/gkhy/exam/pay/mapper/CoalPayStudentMapper.java | 1 ruoyi-admin/src/main/resources/application-dev.yml | 1 12 files changed, 164 insertions(+), 37 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 833df8d..882c968 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 @@ -2,10 +2,7 @@ import com.gkhy.exam.pay.dto.rep.CoalPayRepDto; import com.gkhy.exam.pay.dto.rep.CoalPayStudentRep; -import com.gkhy.exam.pay.dto.req.CoalPayDto; -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.dto.req.*; import com.gkhy.exam.pay.entity.CoalPayStudent; import com.gkhy.exam.pay.service.CoalPayService; import com.ruoyi.common.annotation.Anonymous; @@ -97,13 +94,20 @@ return success(coalPayStudentReps); } - @PostMapping("/personPay") + @GetMapping("/personPay") @ApiOperation(value = "个人缴费接口") @Anonymous public AjaxResult payMoney(@RequestParam("coalPayId") Long coalPayId,@RequestParam("studentId") Long studentId){ return success(coalPayService.personPayMoney(coalPayId,studentId)); } + @PostMapping("/teamPay") + @Anonymous + @ApiOperation(value = "批量缴费") + public AjaxResult teamMoney(@RequestBody CoalTeamPayReq coalTeamPayReq){ + return success(coalPayService.teamPayMoney(coalTeamPayReq)); + } + diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/dto/req/CoalTeamPayReq.java b/exam-system/src/main/java/com/gkhy/exam/pay/dto/req/CoalTeamPayReq.java new file mode 100644 index 0000000..af77ef9 --- /dev/null +++ b/exam-system/src/main/java/com/gkhy/exam/pay/dto/req/CoalTeamPayReq.java @@ -0,0 +1,12 @@ +package com.gkhy.exam.pay.dto.req; + +import lombok.Data; + +@Data +public class CoalTeamPayReq { + + private Long coalPayId; + private Integer payPersonType; + private String payCompanyName; + private String payCompanyCard; +} diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/entity/CoalPay.java b/exam-system/src/main/java/com/gkhy/exam/pay/entity/CoalPay.java index 650cceb..0e4e791 100644 --- a/exam-system/src/main/java/com/gkhy/exam/pay/entity/CoalPay.java +++ b/exam-system/src/main/java/com/gkhy/exam/pay/entity/CoalPay.java @@ -83,7 +83,7 @@ * 缴款单位名称 */ @Excel(name = "缴款单位名称") - @ApiModelProperty("缴款单位证件号") + @ApiModelProperty("缴款单位名称") private String payCompanyName; /** diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/mapper/CoalPayStudentMapper.java b/exam-system/src/main/java/com/gkhy/exam/pay/mapper/CoalPayStudentMapper.java index 14715ab..cf49ffd 100644 --- a/exam-system/src/main/java/com/gkhy/exam/pay/mapper/CoalPayStudentMapper.java +++ b/exam-system/src/main/java/com/gkhy/exam/pay/mapper/CoalPayStudentMapper.java @@ -25,4 +25,5 @@ void updateByCoalPayId(CoalPayStudent coalPayStudent); + void updateByCoalPayIdAndStatus(CoalPayStudent payStudent); } 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 74d3a12..cbe4e99 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 @@ -3,10 +3,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.gkhy.exam.pay.dto.rep.CoalPayRepDto; import com.gkhy.exam.pay.dto.rep.CoalPayStudentRep; -import com.gkhy.exam.pay.dto.req.CoalPayDto; -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.dto.req.*; import com.gkhy.exam.pay.entity.CoalPay; import com.gkhy.exam.pay.entity.CoalPayStudent; import com.ruoyi.common.core.domain.AjaxResult; @@ -29,4 +26,6 @@ int updateCoalPayType(CoalPayTypeReq coalPayDto); String personPayMoney(Long coalPayId, Long studentId); + + String teamPayMoney(CoalTeamPayReq coalTeamPayReq); } 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 e7a10b1..8162510 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,7 +27,9 @@ List<CoalPayStudent> selectbyIdcard(CoalPayStudentReq coalPayStudent); - CoalPayStudent selectbyId(Long studentId); + List<CoalPayStudent> selectbyId(Long studentId); void updateByCoalPayId(CoalPayStudent coalPayStudent); + + void updateByCoalPayIdAndStatus(CoalPayStudent payStudent); } 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 a046a22..2c86c26 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 @@ -3,10 +3,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gkhy.exam.pay.dto.rep.CoalPayRepDto; import com.gkhy.exam.pay.dto.rep.CoalPayStudentRep; -import com.gkhy.exam.pay.dto.req.CoalPayDto; -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.dto.req.*; import com.gkhy.exam.pay.entity.*; import com.gkhy.exam.pay.mapper.CoalCategoryMapper; import com.gkhy.exam.pay.mapper.CoalPayCategoryMapper; @@ -32,6 +29,7 @@ import javax.annotation.Resource; import java.io.IOException; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -228,25 +226,26 @@ public String personPayMoney(Long coalPayId, Long studentId) { CoalPayStudent payStudent = new CoalPayStudent(); - RLock lock = redissonClient.getLock("SWSPKMAS_PAY_PERSON_" + coalPayId); + RLock lock = redissonClient.getLock("SWSPKMAS_PAY_PERSON_" + studentId); try { lock.lock(10, TimeUnit.SECONDS); - CoalPayStudent coalPayStudent = coalPayStudentService.selectbyId(studentId); + List<CoalPayStudent> coalPayStudent = coalPayStudentService.selectbyId(studentId); + CoalPayStudent student = coalPayStudent.get(0); CoalPay coalPay = coalPayMapper.selectById(coalPayId); List<CoalCategory> coalCategories = coalCategoryMapper.selectByCoalPayId(coalPayId); CoalTicket coalTicket = coalCategoryMapper.selectCoalTicket(); - if (coalPayStudent==null){ + if (CollectionUtils.isEmpty(coalPayStudent)){ throw new BusinessException(this.getClass(),ResultConstants.BUSINESS_ERROR,"缴费学员不存在"); } if (coalPay==null){ throw new BusinessException(this.getClass(),ResultConstants.BUSINESS_ERROR,"未找到相关缴费信息"); } - if (coalPayStudent.getPayStatus()==1){ + if (student.getPayStatus()==1){ throw new BusinessException(this.getClass(),ResultConstants.BUSINESS_ERROR,"请勿重新缴费"); } - PayReqData payReqData = fillData(coalPayStudent,coalPay,coalCategories,coalTicket); + PayReqData payReqData = fillData(coalPayStudent,coalPay,coalCategories,coalTicket,1,null); ResultVo resultVo = payUtils.sendApiPost(payReqData); if (resultVo.getRespcode().equals("BUS0000")) { @@ -257,7 +256,7 @@ coalPayStudentService.updateByCoalPayStudent(payStudent); return resultVo.getRespdata().getOrderId(); } else { - throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "发起支付失败,请稍后重试"); + throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, resultVo.getRespmsg()); } } catch (BusinessException e) { throw new RuntimeException(e); @@ -270,29 +269,77 @@ } } - private PayReqData fillData(CoalPayStudent coalPayStudent, CoalPay coalPay, List<CoalCategory> coalCategories, CoalTicket coalTicket) { + @Override + public String teamPayMoney(CoalTeamPayReq coalTeamPayReq) { + RLock lock = redissonClient.getLock("SWSPKMAS_TEAM_PAY_" + coalTeamPayReq.getCoalPayId()); + try { + lock.lock(10,TimeUnit.SECONDS); + List<CoalPayStudent> coalPayStudents = coalPayStudentService.selectByCoalPayIdAndPayStatus(coalTeamPayReq.getCoalPayId(), 0); + CoalPay coalPay = coalPayMapper.selectById(coalTeamPayReq.getCoalPayId()); + List<CoalCategory> coalCategories = coalCategoryMapper.selectByCoalPayId(coalTeamPayReq.getCoalPayId()); + CoalTicket coalTicket = coalCategoryMapper.selectCoalTicket(); + if (CollectionUtils.isEmpty(coalPayStudents)){ + throw new BusinessException(this.getClass(),ResultConstants.BUSINESS_ERROR,"缴费学员不存在"); + } + if (coalPay==null){ + throw new BusinessException(this.getClass(),ResultConstants.BUSINESS_ERROR,"未找到相关缴费信息"); + } + + CoalPayStudent payStudent = new CoalPayStudent(); + PayReqData payReqData = fillData(coalPayStudents, coalPay, coalCategories, coalTicket,2,coalTeamPayReq); + ResultVo resultVo = payUtils.sendApiPost(payReqData); + if (resultVo.getRespcode().equals("BUS0000")) { + payStudent.setCoalPayId(coalPay.getId()); + payStudent.setOrderId(resultVo.getRespdata().getOrderNo()); + payStudent.setGovPayStatus(1); + payStudent.setPayCode(resultVo.getRespdata().getBillNo()); + coalPayStudentService.updateByCoalPayIdAndStatus(payStudent); + return resultVo.getRespdata().getOrderId(); + } else { + throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "发起支付失败,请稍后重试"); + } + }catch (Exception e){ + throw new RuntimeException(e); + }finally { + if (lock.isLocked()) { + lock.unlock(); + } + } + } + + 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()); - payReqData.setAmount(1); - payReqData.setPayerName(coalPayStudent.getName()); - payReqData.setCertNo(coalPayStudent.getIdCard()); - payReqData.setPayerType(1); + payReqData.setMoney(coalPay.getAmount().multiply(BigDecimal.valueOf(coalPayStudent.size()))); + payReqData.setAmount(coalCategories.size()*coalPayStudent.size()); 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); + 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.setFeeDatas(feedatas); + + if (1==payType){ + payReqData.setPayerName(coalPayStudent.get(0).getName()); + payReqData.setCertNo(coalPayStudent.get(0).getIdCard()); + payReqData.setPayerType(1); + }else if (2==payType){ + payReqData.setPayerName(coalTeamPayReq.getPayCompanyName()); + payReqData.setCertNo(coalTeamPayReq.getPayCompanyCard()); + payReqData.setPayerType(2); + } return payReqData; } 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 e06c0fc..f85e3a9 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 @@ -143,12 +143,19 @@ } @Override - public CoalPayStudent selectbyId(Long studentId) { - return coalPayStudentMapper.selectById(studentId); + public List<CoalPayStudent> selectbyId(Long studentId) { + List<Long> longs = new ArrayList<>(); + longs.add(studentId); + return coalPayStudentMapper.selectBatchIds(longs); } @Override public void updateByCoalPayId(CoalPayStudent coalPayStudent) { coalPayStudentMapper.updateByCoalPayId(coalPayStudent); } + + @Override + public void updateByCoalPayIdAndStatus(CoalPayStudent payStudent) { + coalPayStudentMapper.updateByCoalPayIdAndStatus(payStudent); + } } 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 36580a6..8c94e73 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 @@ -30,6 +30,7 @@ import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import javax.net.ssl.SSLContext; @@ -63,6 +64,15 @@ @Value("${finance.apiId}") private String appId; + @Value("${finance.queryUrl}") + private String queryUrl; + + /** + * 请求开票,发起支付 + * @param payReqData + * @return + * @throws IOException + */ public ResultVo sendApiPost(PayReqData payReqData) throws IOException { Map<String, String> param = new HashMap<>(); @@ -85,6 +95,7 @@ return resultVo; } + //组装请求体 private static UrlEncodedFormEntity assemblyFormEntity(Map<String, String> parameters, String charset) { List<NameValuePair> formParameters = assemblyParameter(parameters); UrlEncodedFormEntity formEntity = null; @@ -120,6 +131,7 @@ } + //在调用SSL之前需要重写验证方法,取消检测SSL 创建ConnectionManager,添加Connection配置信息 private static HttpClient sslClient() { try { // 在调用SSL之前需要重写验证方法,取消检测SSL @@ -162,6 +174,7 @@ } + //获取响应结果处理器,将响应结果封装为HttpResult对象 private static ResponseHandler<HttpResultVo> getResponseHandler() { ResponseHandler<HttpResultVo> responseHandler = new ResponseHandler<HttpResultVo>() { @Override @@ -202,6 +215,7 @@ return responseHandler; } + //判断相应内容是否为文本类型 private static boolean isTextType(ContentType contentType) { if (contentType == null) { throw new RuntimeException("ContentType is null"); @@ -297,4 +311,30 @@ log.info("请求结果json为:" + result); return result; } + + + //票据查询 + public ResponseEntity<String> findBill(String billNO) throws IOException { + Map<String, String> params = new HashMap<>(); + + JSONObject jsonObject = new JSONObject(); + jsonObject.put("billNo",billNO); + String reqdata = Base64.getEncoder().encodeToString(jsonObject.toJSONString().getBytes()); + String mac = appId+"||"+reqdata; + mac = DigestUtils.md5Hex(mac.getBytes()); + params.put("appid",appId); + params.put("reqdata",reqdata); + params.put("mac",mac); + + HttpPost httpPost = new HttpPost(queryUrl); + httpPost.setEntity(assemblyFormEntity(params,"utf-8")); + HttpClient httpClient = getHttpClient(queryUrl); + HttpResultVo execute = httpClient.execute(httpPost, getResponseHandler()); + String stringContent = execute.getStringContent(); + JSONObject jsonObject1 = JSONObject.parseObject(stringContent); + log.info("请求结果转json后为:"+jsonObject1); + String result = (String) jsonObject1.get("reqdata"); + return ResponseEntity.ok(result); + + } } diff --git a/exam-system/src/main/resources/mapper/pay/CoalPayStudentMapper.xml b/exam-system/src/main/resources/mapper/pay/CoalPayStudentMapper.xml index 0e3f2f9..7078ba9 100644 --- a/exam-system/src/main/resources/mapper/pay/CoalPayStudentMapper.xml +++ b/exam-system/src/main/resources/mapper/pay/CoalPayStudentMapper.xml @@ -83,6 +83,13 @@ </trim> where coal_pay_id = #{coalPayId} and pay_status = 0 </update> + <update id="updateByCoalPayIdAndStatus"> + update coal_pay_student + <trim prefix="SET" suffixOverrides=","> + <if test="payType != null">pay_type = #{payType},</if> + </trim> + where coal_pay_id = #{coalPayId} and pay_status = 0 + </update> <select id="selectByCoalPayId" resultType="com.gkhy.exam.pay.entity.CoalPayStudent"> <include refid="selectCoalPayStudentVo"></include> @@ -92,8 +99,14 @@ <select id="selectByCoalPayIdAndPayStatus" resultType="com.gkhy.exam.pay.entity.CoalPayStudent"> <include refid="selectCoalPayStudentVo"></include> - where coal_pay_id = #{id} and pay_status = #{status} - and del_flag =0 + <where> + <if test="status == 0"> + and pay_type = 2 + </if> + and coal_pay_id = #{id} + and pay_status = #{status} + and del_flag =0 + </where> </select> <select id="selectByIds" resultType="com.gkhy.exam.pay.entity.CoalPayStudent"> diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml index a687cfe..3c1d886 100644 --- a/ruoyi-admin/src/main/resources/application-dev.yml +++ b/ruoyi-admin/src/main/resources/application-dev.yml @@ -137,3 +137,4 @@ orderUrl: http://finpt.xjcz.gov.cn/fs-service-test/fs-pay/invoice.do payNotifyUrl: http://finpt.xjcz.gov.cn/fs-service-test/fs-pay/notifyConfirm.do payQueryUrl: http://finpt.xjcz.gov.cn/fs-service/fs-pay/query.do + queryUrl: http://finpt.xjcz.gov.cn/fs-service-test/fs-pay/queryFile.do diff --git a/ruoyi-admin/src/main/resources/application-pro.yml b/ruoyi-admin/src/main/resources/application-pro.yml index 20fc39e..c48b982 100644 --- a/ruoyi-admin/src/main/resources/application-pro.yml +++ b/ruoyi-admin/src/main/resources/application-pro.yml @@ -135,4 +135,5 @@ apiId: ED76A5F1703540BE977D34780B371FEB orderUrl: http://finpt.xjcz.gov.cn/fs-service/fs-pay/invoice.do payNotifyUrl: http://finpt.xjcz.gov.cn/fs-service/fs-pay/notifyConfirm.do - payQueryUrl: http://finpt.xjcz.gov.cn/fs-service-test/fs-pay/query.do \ No newline at end of file + payQueryUrl: http://finpt.xjcz.gov.cn/fs-service-test/fs-pay/query.do + queryUrl: http://finpt.xjcz.gov.cn/fs-service/fs-pay/queryFile.do \ No newline at end of file -- Gitblit v1.9.2