From c15dda7ca82a479caa54cbbe169f1cf80c3be156 Mon Sep 17 00:00:00 2001
From: heheng <heheng@123456>
Date: 星期四, 20 二月 2025 13:22:12 +0800
Subject: [PATCH] 修改

---
 exam-system/src/main/java/com/gkhy/exam/pay/entity/NonCoalPayStudent.java                  |   11 +++++
 exam-system/src/main/java/com/gkhy/exam/pay/utils/CaiZhengConstans.java                    |    9 ++++
 exam-system/src/main/java/com/gkhy/exam/pay/utils/PayUtils.java                            |    4 +-
 exam-system/src/main/java/com/gkhy/exam/pay/dto/req/NonCoalPayStuImport.java               |    6 +-
 exam-system/src/main/java/com/gkhy/exam/pay/service/impl/NonCoalPayStudentServiceImpl.java |   24 ++++++-----
 exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml                      |    9 +++-
 exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalStuRep.java                     |    3 +
 exam-system/src/main/resources/mapper/pay/NonCoalPayMapper.xml                             |    4 +
 exam-system/src/main/java/com/gkhy/exam/pay/utils/SexUtils.java                            |   11 +++++
 exam-system/src/main/java/com/gkhy/exam/pay/controller/PaymentApiController.java           |    1 
 10 files changed, 62 insertions(+), 20 deletions(-)

diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/controller/PaymentApiController.java b/exam-system/src/main/java/com/gkhy/exam/pay/controller/PaymentApiController.java
index fa5c8f7..cdc0281 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/controller/PaymentApiController.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/controller/PaymentApiController.java
@@ -55,7 +55,6 @@
 
     @GetMapping({"/confirm"})
     @ApiOperation("回调确认")
-    @Anonymous
     public void notifyConfirm(String orderNo) {
         try {
             paymentService.notifyConfirm(orderNo);
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalStuRep.java b/exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalStuRep.java
index 0d1f7ab..1ac2278 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalStuRep.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/dto/rep/NonCoalStuRep.java
@@ -51,4 +51,7 @@
 
     @ApiModelProperty("财政订单状态0未生成1生成中2已生成")
     private Long govPayStatus;
+
+    @ApiModelProperty("财政缴款码")
+    private String payCode;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/dto/req/NonCoalPayStuImport.java b/exam-system/src/main/java/com/gkhy/exam/pay/dto/req/NonCoalPayStuImport.java
index 0d763f5..c3e6611 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/dto/req/NonCoalPayStuImport.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/dto/req/NonCoalPayStuImport.java
@@ -27,7 +27,7 @@
     /**
      * 0男 1女 2未知
      */
-    @Excel(name = "性别")
-    @ApiModelProperty("性别 0男1女2未知")
-    private String sex;
+    @Excel(name = "培训机构(填机构名称 非必填)")
+    @ApiModelProperty("培训机构(填机构名称 非必填)")
+    private String train;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/entity/NonCoalPayStudent.java b/exam-system/src/main/java/com/gkhy/exam/pay/entity/NonCoalPayStudent.java
index 2f0188b..b69a4b7 100644
--- a/exam-system/src/main/java/com/gkhy/exam/pay/entity/NonCoalPayStudent.java
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/entity/NonCoalPayStudent.java
@@ -106,6 +106,9 @@
      */
     @ApiModelProperty("财政订单状态0未生成1生成中2已生成")
     private Integer govPayStatus;
+
+    @ApiModelProperty("培训机构")
+    private String train;
     /**
      * 删除标志(0代表存在2代表删除)
      */
@@ -249,4 +252,12 @@
     public void setGovPayStatus(Integer govPayStatus) {
         this.govPayStatus = govPayStatus;
     }
+
+    public String getTrain() {
+        return train;
+    }
+
+    public void setTrain(String train) {
+        this.train = train;
+    }
 }
\ No newline at end of file
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 28931a1..333f15c 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,7 +4,6 @@
 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;
@@ -16,8 +15,10 @@
 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.CaiZhengConstans;
 import com.gkhy.exam.pay.utils.PayUtils;
 import com.gkhy.exam.pay.utils.ResultVo;
+import com.gkhy.exam.pay.utils.SexUtils;
 import com.ruoyi.common.constant.ResultConstants;
 import com.ruoyi.common.exception.BusinessException;
 import com.ruoyi.common.exception.ServiceException;
@@ -54,18 +55,16 @@
     @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;
+        String lockKey = CaiZhengConstans.NON_COAL_PAY_STUDENT_LOCK + dataId + CaiZhengConstans.UN_COAL_ORDER_KEY_1 + payType;
 
 
         Boolean b = redisLock.tryLock(lockKey, 30, 40, TimeUnit.SECONDS);
         if (b) {
-            String orderNo = RandomUtil.generateOrderNumber(dataId, "NC");
+            String orderNo = RandomUtil.generateOrderNumber(dataId, CaiZhengConstans.UN_COAL_ORDER_PERFIX);
             List<NonCoalPayOrder> nonCoalPayOrders = nonCoalPayMapper.selectNonCoalPayOrderByParam(dataId, Long.valueOf(payType), 1L);
             if (StringUtils.isEmpty(nonCoalPayOrders)) {
                 throw new BusinessException(this.getClass(), ResultConstants.BUSINESS_ERROR, "未找到相关缴费信息");
@@ -117,7 +116,7 @@
             try {
                 ResultVo resultVo = payUtils.faqiV2(payReqData);
                 log.info("调用接口返回结果:" + resultVo);
-                if (resultVo.getRespcode().equals("BUS0000")) {
+                if (resultVo.getRespcode().equals(CaiZhengConstans.CAI_ZHENG_SUCCESS)) {
                     String orderId = resultVo.getRespdata().getOrderId();
                     String billNo = resultVo.getRespdata().getBillNo();
                     if (StringUtils.isNotEmpty(orderId)) {
@@ -183,7 +182,7 @@
                 JSONObject result = payUtils.query(nonCoalStuRep.getOrderNo());
                 log.info("查询财政订单返回结果:" + result);
                 String respcode = result.getString("respcode");
-                if ("BUS0000".equals(respcode)) {
+                if (CaiZhengConstans.CAI_ZHENG_SUCCESS.equals(respcode)) {
                     JSONObject respdata = result.getJSONObject("respdata");
                     if (respdata != null && "1".equals(respdata.getString("status"))) {
                         nonCoalPayStudentMapper.update(null, Wrappers.<NonCoalPayStudent>lambdaUpdate()
@@ -191,6 +190,8 @@
                                 .set(NonCoalPayStudent::getPayTime, respdata.getDate("payTime"))
                                 .eq(NonCoalPayStudent::getOrderNo, nonCoalStuRep.getOrderNo()).eq(NonCoalPayStudent::getDelFlag, 0)
                                 .eq(NonCoalPayStudent::getPayStatus, 0));
+                        // 回调确认支付
+                        payUtils.affirmPost(nonCoalStuRep.getOrderNo());
                     } else {
                         log.error("查询财政订单失败:" + result.getString("respmsg") + ",错误编码:" + result.getString("respcode"));
                     }
@@ -410,7 +411,7 @@
         StringBuilder failureMsg = new StringBuilder();
         for (NonCoalPayStuImport stu : nonCoalPayStudents) {
             try {
-                if (StringUtils.isEmpty(stu.getIdCard()) || StringUtils.isEmpty(stu.getName()) || StringUtils.isEmpty(stu.getPhone()) || stu.getSex() == null) {
+                if (StringUtils.isEmpty(stu.getIdCard()) || StringUtils.isEmpty(stu.getName()) || StringUtils.isEmpty(stu.getPhone())) {
                     failureMsg.append("<br/>" + failureNum + "、导入数据为空: " + stu.getIdCard() + " 数据错误");
                 } else if (idCardToNameMap.get(stu.getIdCard().trim()) != null) {
                     failureMsg.append("<br/>" + failureNum + "、身份证号: " + stu.getIdCard() + " 数据已存在");
@@ -423,9 +424,10 @@
                     stu1.setName(stu.getName());
                     stu1.setIdCard(stu.getIdCard());
                     stu1.setPhone(stu.getPhone());
-
-//                    stu1.setOrderNo(RandomUtil.generateOrderNumber());
-                    stu1.setSex(StudentSex.BOY.getDesc().equals(stu.getSex().trim()) ? 0L : 1L);
+                    if (StringUtils.isNotEmpty(stu.getTrain())) {
+                        stu1.setTrain(stu.getTrain());
+                    }
+                    stu1.setSex(SexUtils.sexType(stu.getIdCard()));
                     nonCoalPayStudentMapper.insertNonCoalPayStudent(stu1);
                     successNum++;
                     successMsg.append("<br/>" + successNum + "、身份证号 " + stu.getIdCard() + " 导入成功");
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/utils/CaiZhengConstans.java b/exam-system/src/main/java/com/gkhy/exam/pay/utils/CaiZhengConstans.java
new file mode 100644
index 0000000..359d6c2
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/utils/CaiZhengConstans.java
@@ -0,0 +1,9 @@
+package com.gkhy.exam.pay.utils;
+
+public class CaiZhengConstans {
+    public static final String UN_COAL_ORDER_PERFIX = "NC";
+    public static final String NON_COAL_PAY_STUDENT_LOCK = "NON_COAL_PAY_STUDENT_LOCK_";
+    public static final String UN_COAL_ORDER_KEY_1 = "_PAY_TYPE_";
+
+    public static final String CAI_ZHENG_SUCCESS = "BUS0000";
+}
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 337ff13..06802cc 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
@@ -311,7 +311,7 @@
         String stringContent = execute.getStringContent();
         ResultVo resultVo = JSONObject.parseObject(stringContent, ResultVo.class);
         log.info("请求结果为:" + resultVo);
-        if (resultVo.getRespcode().equals("BUS0000")) {
+        if (resultVo.getRespcode().equals(CaiZhengConstans.CAI_ZHENG_SUCCESS)) {
             return "success";
         }
         return "fail";
@@ -598,7 +598,7 @@
         BillClient billClient = ClientFactory.getBillClient();
         ResponseDataVo<UploadXmlReponseDataVo> dataRes = billClient.uploadXml(signatureFile);
 
-        if (!dataRes.getRespcode().equals("BUS0000")) {
+        if (!dataRes.getRespcode().equals(CaiZhengConstans.CAI_ZHENG_SUCCESS)) {
             log.info("上传验签失败:" + dataRes);
             return false;
         }
diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/utils/SexUtils.java b/exam-system/src/main/java/com/gkhy/exam/pay/utils/SexUtils.java
new file mode 100644
index 0000000..1049bbf
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/pay/utils/SexUtils.java
@@ -0,0 +1,11 @@
+package com.gkhy.exam.pay.utils;
+
+public class SexUtils {
+
+    public static Long sexType(String idCard) {
+        //如果身份证号的倒数第二位是偶数,则性别为女(1L)
+        //如果身份证号的倒数第二位是奇数,则性别为男(0L)
+        idCard = idCard.trim();
+        return (idCard.charAt(idCard.length() - 2) - '0') % 2 == 0 ? 1L : 0L;
+    }
+}
diff --git a/exam-system/src/main/resources/mapper/pay/NonCoalPayMapper.xml b/exam-system/src/main/resources/mapper/pay/NonCoalPayMapper.xml
index 7e7a2d9..d32f665 100644
--- a/exam-system/src/main/resources/mapper/pay/NonCoalPayMapper.xml
+++ b/exam-system/src/main/resources/mapper/pay/NonCoalPayMapper.xml
@@ -239,6 +239,7 @@
         <result property="orderId" column="order_id"/>
         <result property="orderNo" column="order_no"/>
         <result property="govPayStatus" column="gov_pay_status"/>
+        <result property="payCode" column="pay_code"/>
     </resultMap>
 
 
@@ -267,7 +268,8 @@
         t.pay_status,
         t.order_id,
         t.gov_pay_status,
-        t.order_no
+        t.order_no,
+        t.pay_code
         from non_coal_pay a
         inner join non_coal_pay_student t on t.non_coal_pay_id = a.id and t.del_flag = 0
         <if test="isPay != null and isPay == 1 ">and t.pay_status = 0</if>
diff --git a/exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml b/exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml
index b15f948..f53bf0b 100644
--- a/exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml
+++ b/exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml
@@ -24,6 +24,7 @@
         <result property="fileData" column="file_data"/>
         <result property="payTime" column="pay_time"/>
         <result property="govPayStatus" column="gov_pay_status"/>
+        <result property="train" column="train"/>
     </resultMap>
 
     <sql id="selectNonCoalPayStudentVo">
@@ -45,7 +46,8 @@
                order_id,
                file_data,
                pay_time,
-               gov_pay_status
+               gov_pay_status,
+               train
         from non_coal_pay_student
     </sql>
 
@@ -83,6 +85,7 @@
             <if test="payCode != null">pay_code,</if>
             <if test="payType != null">pay_type,</if>
             <if test="orderNo != null and orderNo != '' ">order_no,</if>
+            <if test="train != null and train != '' ">train,</if>
             <if test="payStatus != null">pay_status,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
@@ -101,6 +104,7 @@
             <if test="payCode != null">#{payCode},</if>
             <if test="payType != null">#{payType},</if>
             <if test="orderNo != null and orderNo != '' ">#{orderNo},</if>
+            <if test="train != null and train != '' ">#{train},</if>
             <if test="payStatus != null">#{payStatus},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
@@ -126,7 +130,8 @@
             <if test="phone != null and phone != ''">phone = #{phone},</if>
             <if test="sex != null">sex = #{sex},</if>
             <if test="orderNo != null and orderNo != ''">order_no = #{orderNo},</if>
-            <if test="orderId != null and orderId != ''">order_id = #{orderId},</if>
+            <if test="orderNo != null and orderNo != ''">order_no = #{orderNo},</if>
+            <if test="train != null and train != ''">train = #{train},</if>
             <if test="govPayStatus!=null">gov_pay_status=#{govPayStatus},</if>
             <if test="fileData != null and fileData != ''">file_data = #{fileData},</if>
             <if test="payTime != null">pay_time = #{payTime},</if>

--
Gitblit v1.9.2