From c0895bccd7e54f867bbdf0f32d2fd04e97d0c223 Mon Sep 17 00:00:00 2001 From: heheng <475597332@qq.com> Date: 星期一, 19 五月 2025 15:11:17 +0800 Subject: [PATCH] 修改 --- ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java | 13 - exam-system/src/main/java/com/gkhy/exam/pay/service/PaymentService.java | 3 exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml | 255 +++++++++++++++++++++++++++-------- exam-system/src/main/java/com/gkhy/exam/pay/utils/SignDto.java | 9 exam-system/src/main/java/com/gkhy/exam/pay/controller/PaymentApiController.java | 9 + exam-system/src/main/java/com/gkhy/exam/pay/service/impl/PaymentServiceImpl.java | 79 +++++++++++ exam-system/src/main/java/com/gkhy/exam/pay/mapper/NonCoalPayStudentMapper.java | 3 7 files changed, 296 insertions(+), 75 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 cdc0281..975109f 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 @@ -6,6 +6,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; @@ -55,6 +56,7 @@ @GetMapping({"/confirm"}) @ApiOperation("回调确认") + @Anonymous public void notifyConfirm(String orderNo) { try { paymentService.notifyConfirm(orderNo); @@ -62,4 +64,11 @@ e.printStackTrace(); } } + + @Scheduled(cron = "0 23 10 * * ? ") + // @Scheduled(cron = "0 37 17 * * ?") + public void checkWarning() { + paymentService.schedulePayment(); + } + } diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/mapper/NonCoalPayStudentMapper.java b/exam-system/src/main/java/com/gkhy/exam/pay/mapper/NonCoalPayStudentMapper.java index bbd6c53..fca626d 100644 --- a/exam-system/src/main/java/com/gkhy/exam/pay/mapper/NonCoalPayStudentMapper.java +++ b/exam-system/src/main/java/com/gkhy/exam/pay/mapper/NonCoalPayStudentMapper.java @@ -63,4 +63,7 @@ * @return 结果 */ public int deleteNonCoalPayStudentByIds(Long[] ids); + + + List<NonCoalPayStudent> getsch(); } diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/service/PaymentService.java b/exam-system/src/main/java/com/gkhy/exam/pay/service/PaymentService.java index a2b1c85..74ac745 100644 --- a/exam-system/src/main/java/com/gkhy/exam/pay/service/PaymentService.java +++ b/exam-system/src/main/java/com/gkhy/exam/pay/service/PaymentService.java @@ -10,4 +10,7 @@ void notifyConfirm(String orderNo); void paySuccess(String orderNo, Date payTime); + + + void schedulePayment(); } diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/PaymentServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/PaymentServiceImpl.java index c75d118..eb252fd 100644 --- a/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/PaymentServiceImpl.java +++ b/exam-system/src/main/java/com/gkhy/exam/pay/service/impl/PaymentServiceImpl.java @@ -1,18 +1,27 @@ package com.gkhy.exam.pay.service.impl; +import cn.hutool.http.HttpUtil; +import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.gkhy.exam.pay.entity.CoalPayStudent; import com.gkhy.exam.pay.entity.NonCoalPayStudent; import com.gkhy.exam.pay.mapper.CoalPayStudentMapper; import com.gkhy.exam.pay.mapper.NonCoalPayStudentMapper; import com.gkhy.exam.pay.service.PaymentService; +import com.gkhy.exam.pay.utils.CaiZhengConstans; import com.gkhy.exam.pay.utils.PayUtils; +import jar.org.apache.commons.codec.binary.Base64; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.Date; +import java.util.List; + +import static com.ruoyi.common.utils.Threads.sleep; @Service @Slf4j @@ -33,6 +42,38 @@ e.printStackTrace(); } + String reqdatastr1 = "{\"orderNo\": \"" + orderNo + "\"}"; + String mac1 = getMD5("A1749891493E4CDDBFE4506357B1F0AB||" + getBase64(reqdatastr1)); + JSONObject jsonObject1 = new JSONObject(); + jsonObject1.put("appid", "A1749891493E4CDDBFE4506357B1F0AB"); + jsonObject1.put("mac", mac1); + jsonObject1.put("reqdata", getBase64(reqdatastr1)); + String resultStr1 = HttpUtil.post("http://finpt.xjcz.gov.cn/fs-service/fs-pay/notifyConfirm.do", jsonObject1); + System.out.println("通知确定入参===" + jsonObject1); + JSONObject result1 = JSONObject.parseObject(resultStr1); + System.out.println("通知确定回参===" + result1); + + + } + + + public String getMD5(String input) { + try { + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] messageDigest = md.digest(input.getBytes()); + StringBuilder hexString = new StringBuilder(); + for (byte b : messageDigest) { + hexString.append(String.format("%02x", new Object[]{Byte.valueOf(b)})); + } + return hexString.toString(); + } catch (NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + } + + public String getBase64(String str) { + String encodedStr = Base64.encodeBase64String(str.getBytes()); + return encodedStr; } @Override @@ -56,5 +97,43 @@ } + @Override + public void schedulePayment() { + List<NonCoalPayStudent> nonCoalPayStudents = nonCoalPayStudentMapper.getsch(); + + if (nonCoalPayStudents != null) { + for (NonCoalPayStudent nonCoalPayStudent : nonCoalPayStudents) { + sleep(5000); + if (nonCoalPayStudent.getGovPayStatus() == 2 && nonCoalPayStudent.getPayStatus() == 0) { + try { + JSONObject result = payUtils.query(nonCoalPayStudent.getOrderNo()); + log.info("查询财政订单返回结果:" + result); + String respcode = result.getString("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() + .set(NonCoalPayStudent::getPayStatus, 1) + .set(NonCoalPayStudent::getPayTime, respdata.getDate("payTime")) + .eq(NonCoalPayStudent::getOrderNo, nonCoalPayStudent.getOrderNo()).eq(NonCoalPayStudent::getDelFlag, 0) + .eq(NonCoalPayStudent::getPayStatus, 0)); + // 回调确认支付 + nonCoalPayStudent.setPayStatus(1L); + payUtils.affirmPost(nonCoalPayStudent.getOrderNo()); + } else { + log.error("查询财政订单失败:" + result.getString("respmsg") + ",错误编码:" + result.getString("respcode")); + } + + } + } catch (Exception e) { + log.error("查询财政订单失败:" + e.getMessage()); + + } + } + } + } + + } + } diff --git a/exam-system/src/main/java/com/gkhy/exam/pay/utils/SignDto.java b/exam-system/src/main/java/com/gkhy/exam/pay/utils/SignDto.java index ceaa02d..7fba158 100644 --- a/exam-system/src/main/java/com/gkhy/exam/pay/utils/SignDto.java +++ b/exam-system/src/main/java/com/gkhy/exam/pay/utils/SignDto.java @@ -2,6 +2,7 @@ import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Locale; import java.util.TimeZone; public class SignDto { @@ -14,13 +15,9 @@ private static final String UTC_DATE_TIME = "dd MMM yyyy HH:mm:ss z"; public static String formatWithTimeZone(Date date) { - /* 48 */ - SimpleDateFormat sdf = new SimpleDateFormat(); - /* 49 */ + SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z", Locale.CHINA); sdf.setTimeZone(TimeZone.getTimeZone("GMT+8")); - /* 50 */ - sdf.applyPattern("dd MMM yyyy HH:mm:ss z"); - /* 51 */ + // sdf.applyPattern("dd MMM yyyy HH:mm:ss z", Locale.CHINA); return sdf.format(date); } diff --git a/exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml b/exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml index bff6a69..d119bc0 100644 --- a/exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml +++ b/exam-system/src/main/resources/mapper/pay/NonCoalPayStudentMapper.xml @@ -3,7 +3,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gkhy.exam.pay.mapper.NonCoalPayStudentMapper"> - <resultMap type="NonCoalPayStudent" id="NonCoalPayStudentResult"> <result property="id" column="id"/> <result property="nonCoalPayId" column="non_coal_pay_id"/> @@ -55,14 +54,30 @@ <include refid="selectNonCoalPayStudentVo"/> <where> and del_flag = 0 - <if test="nonCoalPayId != null ">and non_coal_pay_id = #{nonCoalPayId}</if> - <if test="name != null and name != ''">and name like concat('%', #{name}, '%')</if> - <if test="idCard != null and idCard != ''">and id_card = #{idCard}</if> - <if test="phone != null and phone != ''">and phone = #{phone}</if> - <if test="sex != null ">and sex = #{sex}</if> - <if test="payCode != null and payCode != ''">and pay_code = #{payCode}</if> - <if test="payStatus != null ">and pay_status = #{payStatus}</if> - <if test="payType != null ">and pay_type = #{payType}</if> + <if test="nonCoalPayId != null "> + and non_coal_pay_id = #{nonCoalPayId} + </if> + <if test="name != null and name != ''"> + and name like concat('%', #{name}, '%') + </if> + <if test="idCard != null and idCard != ''"> + and id_card = #{idCard} + </if> + <if test="phone != null and phone != ''"> + and phone = #{phone} + </if> + <if test="sex != null "> + and sex = #{sex} + </if> + <if test="payCode != null and payCode != ''"> + and pay_code = #{payCode} + </if> + <if test="payStatus != null "> + and pay_status = #{payStatus} + </if> + <if test="payType != null "> + and pay_type = #{payType} + </if> </where> order by create_time desc </select> @@ -75,42 +90,110 @@ <insert id="insertNonCoalPayStudent" parameterType="NonCoalPayStudent"> insert into non_coal_pay_student <trim prefix="(" suffix=")" suffixOverrides=","> - <if test="id != null">id,</if> - <if test="nonCoalPayId != null">non_coal_pay_id,</if> - <if test="name != null and name != ''">name,</if> - <if test="idCard != null and idCard != ''">id_card,</if> - <if test="phone != null and phone != ''">phone,</if> - <if test="sex != null">sex,</if> - <if test="govPayStatus!=null">gov_pay_status,</if> - <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> - <if test="createBy != null">create_by,</if> - <if test="createTime != null">create_time,</if> - <if test="delFlag != null">del_flag,</if> + <if test="id != null"> + id, + </if> + <if test="nonCoalPayId != null"> + non_coal_pay_id, + </if> + <if test="name != null and name != ''"> + name, + </if> + <if test="idCard != null and idCard != ''"> + id_card, + </if> + <if test="phone != null and phone != ''"> + phone, + </if> + <if test="sex != null"> + sex, + </if> + <if test="govPayStatus!=null"> + gov_pay_status, + </if> + <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> + <if test="createBy != null"> + create_by, + </if> + <if test="createTime != null"> + create_time, + </if> + <if test="delFlag != null"> + del_flag, + </if> </trim> <trim prefix="values (" suffix=")" suffixOverrides=","> - <if test="id != null">#{id},</if> - <if test="nonCoalPayId != null">#{nonCoalPayId},</if> - <if test="name != null and name != ''">#{name},</if> - <if test="idCard != null and idCard != ''">#{idCard},</if> - <if test="phone != null and phone != ''">#{phone},</if> - <if test="sex != null">#{sex},</if> - <if test="govPayStatus!=null">#{govPayStatus},</if> - <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> - <if test="createBy != null">#{createBy},</if> - <if test="createTime != null">#{createTime},</if> - <if test="delFlag != null">#{delFlag},</if> + <if test="id != null"> + #{id}, + </if> + <if test="nonCoalPayId != null"> + #{nonCoalPayId}, + </if> + <if test="name != null and name != ''"> + #{name}, + </if> + <if test="idCard != null and idCard != ''"> + #{idCard}, + </if> + <if test="phone != null and phone != ''"> + #{phone}, + </if> + <if test="sex != null"> + #{sex}, + </if> + <if test="govPayStatus!=null"> + #{govPayStatus}, + </if> + <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> + <if test="createBy != null"> + #{createBy}, + </if> + <if test="createTime != null"> + #{createTime}, + </if> + <if test="delFlag != null"> + #{delFlag}, + </if> </trim> </insert> @@ -122,28 +205,76 @@ and pay_status = 0 and order_no is null </update> + + + <select id="getsch" resultMap="NonCoalPayStudentResult"> + select * + from non_coal_pay_student + where order_no is not null + and pay_status = 0 + and pay_type = 1 + and update_time between '2025-02-28 00:00:00' and '2025-03-04 14:29:59' + </select> <update id="updateNonCoalPayStudent" parameterType="NonCoalPayStudent"> update non_coal_pay_student <trim prefix="SET" suffixOverrides=","> - <if test="nonCoalPayId != null">non_coal_pay_id = #{nonCoalPayId},</if> - <if test="name != null and name != ''">name = #{name},</if> - <if test="idCard != null and idCard != ''">id_card = #{idCard},</if> - <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="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> - <if test="payType != null">pay_type = #{payType},</if> - <if test="payCode != null">pay_code = #{payCode},</if> - <if test="payStatus != null">pay_status = #{payStatus},</if> - <if test="updateBy != null">update_by = #{updateBy},</if> - <if test="updateTime != null">update_time = #{updateTime},</if> - <if test="createBy != null">create_by = #{createBy},</if> - <if test="createTime != null">create_time = #{createTime},</if> - <if test="delFlag != null">del_flag = #{delFlag},</if> + <if test="nonCoalPayId != null"> + non_coal_pay_id = #{nonCoalPayId}, + </if> + <if test="name != null and name != ''"> + name = #{name}, + </if> + <if test="idCard != null and idCard != ''"> + id_card = #{idCard}, + </if> + <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="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> + <if test="payType != null"> + pay_type = #{payType}, + </if> + <if test="payCode != null"> + pay_code = #{payCode}, + </if> + <if test="payStatus != null"> + pay_status = #{payStatus}, + </if> + <if test="updateBy != null"> + update_by = #{updateBy}, + </if> + <if test="updateTime != null"> + update_time = #{updateTime}, + </if> + <if test="createBy != null"> + create_by = #{createBy}, + </if> + <if test="createTime != null"> + create_time = #{createTime}, + </if> + <if test="delFlag != null"> + del_flag = #{delFlag}, + </if> </trim> where id = #{id} </update> diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java index 30f4f9c..b8b949f 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java @@ -1,20 +1,19 @@ package com.ruoyi; -import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.scheduling.annotation.EnableScheduling; /** * 启动程序 - * + * * @author ruoyi */ -@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class },scanBasePackages = {"com.gkhy","com.ruoyi"}) -public class RuoYiApplication -{ - public static void main(String[] args) - { +@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}, scanBasePackages = {"com.gkhy", "com.ruoyi"}) +@EnableScheduling +public class RuoYiApplication { + public static void main(String[] args) { // System.setProperty("spring.devtools.restart.enabled", "false"); SpringApplication.run(RuoYiApplication.class, args); System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" + -- Gitblit v1.9.2