From f8b251573040d2762507909a02f274a6cf4d751c Mon Sep 17 00:00:00 2001 From: heheng <heheng@123456> Date: 星期四, 23 一月 2025 14:40:27 +0800 Subject: [PATCH] 特种作业非煤缴费版本优化 --- exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java | 148 +++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 143 insertions(+), 5 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 3b78a96..21dda14 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 @@ -4,23 +4,34 @@ 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; @@ -31,11 +42,138 @@ * @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, "已缴费请勿重复缴费"); + } + 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; + } + + 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; + + } /** * 查询【请填写功能名称】 @@ -212,7 +350,7 @@ 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); -- Gitblit v1.9.2