From 9a041565e4e730a4d0e4c3a5797228d83fad7c63 Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: Fri, 14 Feb 2025 11:09:51 +0800
Subject: [PATCH] 煤矿缴费修改
---
exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 208 insertions(+), 11 deletions(-)
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java
index 63b2d96..c6df39a 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java
@@ -3,22 +3,35 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.institutionalaccess.enums.StudentSex;
+import com.gkhy.exam.pay.dto.rep.NonCoalCateRep;
+import com.gkhy.exam.pay.dto.rep.NonCoalPayOrder;
+import com.gkhy.exam.pay.dto.rep.NonCoalStuRep;
+import com.gkhy.exam.pay.dto.req.NonCoalPayStuImport;
import com.gkhy.exam.pay.dto.req.NonCoalPayStudentReqDto;
import com.gkhy.exam.pay.entity.NonCoalPay;
import com.gkhy.exam.pay.entity.NonCoalPayStudent;
+import com.gkhy.exam.pay.entity.PayReqData;
import com.gkhy.exam.pay.mapper.NonCoalPayMapper;
import com.gkhy.exam.pay.mapper.NonCoalPayStudentMapper;
import com.gkhy.exam.pay.service.NonCoalPayStudentService;
+import com.gkhy.exam.pay.utils.PayUtils;
+import com.gkhy.exam.pay.utils.ResultVo;
+import com.ruoyi.common.constant.ResultConstants;
+import com.ruoyi.common.exception.BusinessException;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.RandomUtil;
+import com.ruoyi.common.utils.RedisLock;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -29,11 +42,184 @@
* @date 2025-01-16
*/
@Service
+@Slf4j
public class NonCoalPayStudentServiceImpl extends ServiceImpl<NonCoalPayStudentMapper, NonCoalPayStudent> implements NonCoalPayStudentService {
@Resource
private NonCoalPayStudentMapper nonCoalPayStudentMapper;
@Resource
private NonCoalPayMapper nonCoalPayMapper;
+ @Resource
+ private PayUtils payUtils;
+ @Autowired
+ private RedisLock redisLock;
+
+ private static final String NON_COAL_PAY_STUDENT_LOCK = "NON_COAL_PAY_STUDENT_LOCK_";
+
+
+ @Override
+ public String sendOrder(Long dataId, String payType) {
+
+ String lockKey = NON_COAL_PAY_STUDENT_LOCK + dataId + "_PAY_TYPE_" + payType;
+
+
+ Boolean b = redisLock.tryLock(lockKey, 10, 20, TimeUnit.SECONDS);
+ if (b) {
+ String orderNo = RandomUtil.generateOrderNumber(dataId, "NC");
+ List<NonCoalPayOrder> nonCoalPayOrders = nonCoalPayMapper.selectNonCoalPayOrderByParam(dataId, Long.valueOf(payType));
+ if (StringUtils.isEmpty(nonCoalPayOrders)) {
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "未找到相关缴费信息");
+ }
+ NonCoalPayOrder nonCoalPayOrder = nonCoalPayOrders.get(0);
+
+ List<NonCoalStuRep> nonCoalStuList = nonCoalPayOrder.getNonCoalStuList();
+
+ if (StringUtils.isEmpty(nonCoalStuList)) {
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "未找到需要缴费的学员");
+ }
+ NonCoalStuRep nonCoalStuRep = nonCoalStuList.get(0);
+
+ if (nonCoalStuRep.getPayStatus() == 1) {
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "已缴费请勿重复缴费");
+ }
+ //财政缴款码已生成了
+ if (nonCoalStuRep.getGovPayStatus() == 2) {
+ return nonCoalStuRep.getOrderId();
+ }
+ //财政缴款码未生成
+ if (nonCoalStuRep.getPayStatus() == 0) {
+ if ("1".equals(payType)) {
+ baseMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
+ .set(NonCoalPayStudent::getOrderNo, orderNo)
+ .set(NonCoalPayStudent::getGovPayStatus, 1)
+ .eq(NonCoalPayStudent::getId, dataId).eq(NonCoalPayStudent::getDelFlag, 0)
+ .eq(NonCoalPayStudent::getPayType, payType).eq(NonCoalPayStudent::getPayStatus, 0));
+ } else {
+ //团体缴费
+ baseMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
+ .set(NonCoalPayStudent::getOrderNo, orderNo)
+ .set(NonCoalPayStudent::getGovPayStatus, 1)
+ .eq(NonCoalPayStudent::getNonCoalPayId, dataId).eq(NonCoalPayStudent::getDelFlag, 0)
+ .eq(NonCoalPayStudent::getPayType, payType).eq(NonCoalPayStudent::getPayStatus, 0));
+ }
+ } else {
+ orderNo = nonCoalStuRep.getOrderNo();
+ }
+ List<NonCoalCateRep> nonCoalPayCategoryList = nonCoalPayOrder.getNonCoalPayCategoryList();
+
+ if (StringUtils.isEmpty(nonCoalPayCategoryList)) {
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "缴费信息缺失");
+ }
+ // 业务处理
+ //查询主信息 查询是否是团队
+ PayReqData payReqData = dealData(nonCoalPayOrder, orderNo, payType);
+
+ try {
+ ResultVo resultVo = payUtils.sendApiPost(payReqData);
+ log.info("调用接口返回结果:" + resultVo);
+ if (resultVo.getRespcode().equals("BUS0000")) {
+ String orderId = resultVo.getRespdata().getOrderId();
+ String billNo = resultVo.getRespdata().getBillNo();
+ if (StringUtils.isNotEmpty(orderId)) {
+ // 更新订单
+ if ("1".equals(payType)) {
+ baseMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
+ .set(NonCoalPayStudent::getOrderId, orderId)
+// .set(NonCoalPayStudent::getOrderNo, orderNo)
+ .set(NonCoalPayStudent::getPayCode, billNo)
+ .eq(NonCoalPayStudent::getId, dataId).eq(NonCoalPayStudent::getDelFlag, 0)
+ .eq(NonCoalPayStudent::getPayType, payType).eq(NonCoalPayStudent::getPayStatus, 0));
+ } else {
+ //团体缴费
+ baseMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
+ .set(NonCoalPayStudent::getOrderId, orderId)
+// .set(NonCoalPayStudent::getOrderNo, orderNo)
+ .set(NonCoalPayStudent::getPayCode, billNo)
+ .eq(NonCoalPayStudent::getNonCoalPayId, dataId).eq(NonCoalPayStudent::getDelFlag, 0)
+ .eq(NonCoalPayStudent::getPayType, payType).eq(NonCoalPayStudent::getPayStatus, 0));
+ }
+ }
+ return orderId;
+ } else {
+ log.error("生成订单失败:" + resultVo.getRespmsg() + ",请稍后重试,错误编码:" + resultVo.getRespcode() + "参数如下:" + payReqData);
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "发起支付失败,请稍后重试");
+ }
+
+ } catch (Exception e) {
+ log.error("发起支付调用接口失败:" + e);
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, e.getMessage());
+ } finally {
+ redisLock.unlock(lockKey);
+ }
+ }
+
+
+ return null;
+ }
+
+ @Override
+ public NonCoalStuRep queryOrder(Long dataId, String payType) {
+ List<NonCoalPayOrder> nonCoalPayOrders = nonCoalPayMapper.selectNonCoalPayOrderByParam(dataId, Long.valueOf(payType));
+ if (StringUtils.isEmpty(nonCoalPayOrders)) {
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "未找到相关缴费信息");
+ }
+ NonCoalPayOrder nonCoalPayOrder = nonCoalPayOrders.get(0);
+
+ List<NonCoalStuRep> nonCoalStuList = nonCoalPayOrder.getNonCoalStuList();
+
+ if (StringUtils.isEmpty(nonCoalStuList)) {
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "未找到需要缴费的学员");
+ }
+ NonCoalStuRep nonCoalStuRep = nonCoalStuList.get(0);
+
+ if (nonCoalStuRep.getPayStatus() == 1) {
+ throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "已缴费请勿重复缴费");
+ }
+
+ return nonCoalStuRep;
+ }
+
+ private PayReqData dealData(NonCoalPayOrder nonCoalPayOrder, String orderNo, String payType) {
+ List<NonCoalStuRep> nonCoalStuList = nonCoalPayOrder.getNonCoalStuList();
+ List<NonCoalCateRep> nonCoalPayCategoryList = nonCoalPayOrder.getNonCoalPayCategoryList();
+ PayReqData payReqData = new PayReqData();
+ payReqData.setOrderNo(orderNo);
+ payReqData.setPayerType(Integer.valueOf(payType));
+ payReqData.setMoney(nonCoalPayOrder.getAmount().multiply(BigDecimal.valueOf(nonCoalStuList.size())));
+ payReqData.setAmount(nonCoalStuList.size());
+
+ payReqData.setDesc(nonCoalPayOrder.getBatchName());
+
+ NonCoalCateRep nonCoalCateRep1 = nonCoalPayCategoryList.get(0);
+ payReqData.setHandlingPerson(nonCoalCateRep1.getDrawer());
+ payReqData.setChecker(nonCoalCateRep1.getReviewer());
+ payReqData.setEnterCode(nonCoalCateRep1.getCompanyCode());
+ payReqData.setInvoiceSocialCode(nonCoalCateRep1.getInvoicingCompanyCode());
+
+ List<PayReqData.Feedata> feedatas1 = new ArrayList<>();
+ for (NonCoalCateRep nonCoalCateRep : nonCoalPayCategoryList) {
+ PayReqData.Feedata feedatas = new PayReqData.Feedata();
+ feedatas.setAmount(nonCoalStuList.size());
+ feedatas.setBusCode(nonCoalCateRep.getBusinessCode());
+ feedatas.setPrice(nonCoalCateRep.getCategoryAmount());
+ feedatas1.add(feedatas);
+ }
+ payReqData.setFeeDatas(feedatas1);
+ if ("1".equals(payType)) {
+ //个人缴费
+ NonCoalStuRep nonCoalStuRep = nonCoalStuList.get(0);
+ payReqData.setPayerName(nonCoalStuRep.getStudentName());
+ payReqData.setCertNo(nonCoalStuRep.getIdCard());
+ } else {
+ //团体缴费
+ payReqData.setPayerName(nonCoalPayOrder.getPayCompanyName());
+ payReqData.setCertNo(nonCoalPayOrder.getPayCompanyCard());
+ //todo 待确认
+ payReqData.setInvoiceSocialCode(nonCoalPayOrder.getPayCompanyCard());
+ payReqData.setEnterCode(nonCoalPayOrder.getPayCompanyCard());
+ }
+ return payReqData;
+
+ }
/**
* 查询【请填写功能名称】
@@ -69,6 +255,8 @@
checkSameData(nonCoalPayStudent);
NonCoalPay nonCoalPay = checkNonCoalPay(nonCoalPayStudent.getNonCoalPayId());
nonCoalPayStudent.setPayType(nonCoalPay.getPayPersonType().longValue());
+// nonCoalPayStudent.setOrderNo(RandomUtil.generateOrderNumber());
+
nonCoalPayStudent.setCreateBy(SecurityUtils.getUsername());
return nonCoalPayStudentMapper.insertNonCoalPayStudent(nonCoalPayStudent);
}
@@ -84,6 +272,7 @@
checkData(nonCoalPayStudent.getId());
checkSameData(nonCoalPayStudent);
nonCoalPayStudent.setPayType(null);
+ nonCoalPayStudent.setOrderNo(null);
nonCoalPayStudent.setUpdateBy(SecurityUtils.getUsername());
return nonCoalPayStudentMapper.updateNonCoalPayStudent(nonCoalPayStudent);
}
@@ -164,14 +353,14 @@
}
@Override
- public String importData(List<NonCoalPayStudent> nonCoalPayStudents, String operName, Long nonCoalPayId) {
+ public String importData(List<NonCoalPayStuImport> nonCoalPayStudents, String operName, Long nonCoalPayId) {
if (StringUtils.isNull(nonCoalPayStudents) || nonCoalPayStudents.isEmpty()) {
throw new ServiceException("导入数据不能为空!");
}
NonCoalPay nonCoalPay = checkNonCoalPay(nonCoalPayId);
Integer payPersonType = nonCoalPay.getPayPersonType();
Set<String> collect = nonCoalPayStudents.stream()
- .map(NonCoalPayStudent::getIdCard)
+ .map(NonCoalPayStuImport::getIdCard)
.collect(Collectors.toSet());
if (collect.size() != nonCoalPayStudents.size()) {
throw new ServiceException("导入数据不能有重复身份证号!");
@@ -192,17 +381,25 @@
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
- for (NonCoalPayStudent stu : nonCoalPayStudents) {
+ for (NonCoalPayStuImport stu : nonCoalPayStudents) {
try {
if (StringUtils.isEmpty(stu.getIdCard()) || StringUtils.isEmpty(stu.getName()) || StringUtils.isEmpty(stu.getPhone()) || stu.getSex() == null) {
failureMsg.append("<br/>" + failureNum + "、导入数据为空: " + stu.getIdCard() + " 数据错误");
} else if (idCardToNameMap.get(stu.getIdCard().trim()) != null) {
failureMsg.append("<br/>" + failureNum + "、身份证号: " + stu.getIdCard() + " 数据已存在");
} else {
- stu.setPayStatus(0L);
- stu.setPayType(payPersonType.longValue());
- stu.setNonCoalPayId(nonCoalPayId);
- save(stu);
+ NonCoalPayStudent stu1 = new NonCoalPayStudent();
+ stu1.setPayStatus(0L);
+ stu1.setPayType(payPersonType.longValue());
+ stu1.setNonCoalPayId(nonCoalPayId);
+ stu1.setCreateBy(operName);
+ stu1.setName(stu.getName());
+ stu1.setIdCard(stu.getIdCard());
+ stu1.setPhone(stu.getPhone());
+
+// stu1.setOrderNo(RandomUtil.generateOrderNumber());
+ stu1.setSex(StudentSex.BOY.getStatus().equals(stu.getSex().trim()) ? 0L : 1L);
+ nonCoalPayStudentMapper.insertNonCoalPayStudent(stu1);
successNum++;
successMsg.append("<br/>" + successNum + "、身份证号 " + stu.getIdCard() + " 导入成功");
idCardToNameMap.put(stu.getIdCard(), stu.getIdCard());
--
Gitblit v1.9.2