diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java index 9ab3848..4a62b92 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/controller/PayController.java @@ -1,14 +1,11 @@ package com.ruoyi.app.controller; -import com.ruoyi.app.domain.AppDynamicComment; -import com.ruoyi.app.domain.AppOrder; -import com.ruoyi.app.domain.AppOrderArg; -import com.ruoyi.app.domain.dto.KeyUtil; -import com.ruoyi.app.domain.dto.PayConfig; -import com.ruoyi.app.domain.dto.PayUtils; -import com.ruoyi.app.domain.dto.WeChatPrepayResult; +import com.ruoyi.app.domain.*; +import com.ruoyi.app.domain.dto.*; import com.ruoyi.app.domain.vo.AppDynamicCommentVo; import com.ruoyi.app.mapper.AppOrderMapper; +import com.ruoyi.app.mapper.AppOrderPayMapper; +import com.ruoyi.app.mapper.AppUserMapper; import com.ruoyi.app.service.IAppDynamicCommentService; import com.ruoyi.app.service.IPayService; import com.ruoyi.common.core.utils.poi.ExcelUtil; @@ -21,10 +18,15 @@ import com.ruoyi.common.security.annotation.RequiresPermissions; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.dom4j.Document; +import org.dom4j.DocumentHelper; +import org.dom4j.Element; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.*; import java.util.Date; import java.util.List; import java.util.SortedMap; @@ -48,12 +50,18 @@ public class PayController extends BaseController @Autowired private AppOrderMapper appOrderMapper; + @Autowired + private AppOrderPayMapper appOrderPayMapper; + + @Autowired + private AppUserMapper appUserMapper; + /** * 查询动态评论列表 */ @PostMapping("/wechatPrePay") @ApiOperation(value = "微信支付", notes = "微信支付", httpMethod = "POST") - public AjaxResult wechatPrePay(AppOrderArg appOrderArg) { + public AjaxResult wechatPrePay(@RequestBody AppOrderArg appOrderArg) { Integer price = appOrderArg.getPrice(); PayConfig payConfig = getPayConfigByAppid(); @@ -112,6 +120,108 @@ public class PayController extends BaseController return AjaxResult.success(prePayResult); } + @RequestMapping(value = "/wechatNotify") + public void wechatNotify(HttpServletRequest request, HttpServletResponse response) { + log.info("=======>>>开始获取微信支付返回信息"); + StringBuilder sb = new StringBuilder(); + InputStream in; + try { + in = request.getInputStream(); + InputStreamReader reader = new InputStreamReader(in); + BufferedReader br = new BufferedReader(reader); + String s = ""; + while ((s = br.readLine()) != null) { + sb.append(s); + } + br.close(); + reader.close(); + in.close(); + } catch (IOException e) { + log.info("获取返回信息失败"); + } + log.info("微信返回来的字符串" + sb.toString()); + WeChatPayResult wexinResult = getResultByXml(sb.toString()); + PrintWriter out; + try { + out = response.getWriter(); + if (!("SUCCESS".equals(wexinResult.getResultCode()))) { + out.println("fail"); + } + + String outTradeNo = wexinResult.getOutTradeNo(); + AppOrder appOrder = appOrderMapper.selectOneByOutTradeNo(outTradeNo); + + AppOrder entity = new AppOrder(); + entity.setId(appOrder.getId()); + entity.setTradeNo(wexinResult.getTransactionId()); + entity.setPayStatus(2); + entity.setPayTime(new Date()); + appOrderMapper.updateAppOrder(entity); + + AppOrderPay miniOrderWechatPay = new AppOrderPay(); + miniOrderWechatPay.setAppid(wexinResult.getAppid()); + miniOrderWechatPay.setNoncestr(wexinResult.getNonceStr()); + miniOrderWechatPay.setOuttradeno(wexinResult.getOutTradeNo()); + miniOrderWechatPay.setResultcode(wexinResult.getResultCode()); + miniOrderWechatPay.setTimeend(wexinResult.getTimeEnd()); + miniOrderWechatPay.setTotalfee(wexinResult.getTotalFee()); + miniOrderWechatPay.setTransactionid(wexinResult.getTransactionId()); + appOrderPayMapper.insertAppOrderPay(miniOrderWechatPay); + + // 修改用户信息 + AppUser appUser = appUserMapper.selectAppUserById(appOrder.getUserId()); + AppUser userEntity = new AppUser(); + userEntity.setId(appUser.getId()); + userEntity.setIsMember(0); + userEntity.setOrderId(appOrder.getId()); + // 开始时间,结束时间 + Date startDate = appUser.getOrderStartTime(); + if (null == startDate) { + startDate = new Date(); + } + Date endDate = appUser.getEndTime(); + if (null == endDate) { + endDate = startDate; + } + + + + out.println("success"); + } catch (Exception e) { + log.info("异常订单:" + wexinResult.toString()); + log.info("========>PrintWriter fail"); + } + } + + public WeChatPayResult getResultByXml(String response) { + WeChatPayResult wexinResult = new WeChatPayResult(); + Document document; + try { + document = DocumentHelper.parseText(response); + Element root = document.getRootElement(); + String cashFee = root.element("cash_fee").getText(); + String totalFee = root.element("total_fee").getText(); + wexinResult.setAppid(root.element("appid").getText()); + wexinResult.setBankType(root.element("bank_type").getText()); + wexinResult.setCashFee(cashFee); + wexinResult.setMchId(root.element("mch_id").getText()); + wexinResult.setNonceStr(root.element("nonce_str").getText()); + wexinResult.setOpenid(root.element("openid").getText()); + wexinResult.setOutTradeNo(root.element("out_trade_no").getText()); + wexinResult.setResultCode(root.element("result_code").getText()); + wexinResult.setReturnCode(root.element("return_code").getText()); + wexinResult.setSign(root.element("sign").getText()); + wexinResult.setTimeEnd(root.element("time_end").getText()); + wexinResult.setTotalFee(totalFee); + wexinResult.setTradeType(root.element("trade_type").getText()); + wexinResult.setTransactionId(root.element("transaction_id").getText()); + return wexinResult; + } catch (Exception ex) { + log.info("解析失败"); + } + return null; + } + public PayConfig getPayConfigByAppid() { PayConfig payConfig = new PayConfig(); payConfig.setAPPID(payConfig.getAPPID()); diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUser.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUser.java index 3e34aca..6855ecb 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUser.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/domain/AppUser.java @@ -4,6 +4,7 @@ import java.util.Date; import java.util.List; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import com.ruoyi.common.core.annotation.Excel; @@ -15,6 +16,7 @@ import com.ruoyi.common.core.web.domain.BaseEntity; * @author wyh * @date 2024-04-23 */ +@Data public class AppUser extends BaseEntity { private static final long serialVersionUID = 1L; @@ -151,6 +153,20 @@ public class AppUser extends BaseEntity private int isMember; + /** 订单记录 */ + @Excel(name = "订单记录") + private Long orderId; + + /** 开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "开始时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date orderStartTime; + + /** 结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd") + @Excel(name = "结束时间", width = 30, dateFormat = "yyyy-MM-dd") + private Date orderEndTime; + public void setId(Long id) { this.id = id; diff --git a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderMapper.java b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderMapper.java index 378a217..74f6c69 100644 --- a/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderMapper.java +++ b/gan-modules/ruoyi-gan/src/main/java/com/ruoyi/app/mapper/AppOrderMapper.java @@ -18,6 +18,7 @@ public interface AppOrderMapper * @return 订单 */ public AppOrder selectAppOrderById(Long id); + public AppOrder selectOneByOutTradeNo(String tradeNo); /** * 查询订单列表 diff --git a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderMapper.xml b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderMapper.xml index 3b0bfe6..3f642a3 100644 --- a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderMapper.xml +++ b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppOrderMapper.xml @@ -42,6 +42,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where id = #{id} + + insert into app_order diff --git a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserMapper.xml b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserMapper.xml index 2516561..cdf38f9 100644 --- a/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserMapper.xml +++ b/gan-modules/ruoyi-gan/src/main/resources/mapper/app/AppUserMapper.xml @@ -39,6 +39,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + a.id as "id", @@ -77,7 +80,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - select id, username, password, nickname, email, phone, address, create_time, update_time, avatar_url, education, school, major, start_time, end_time, experience, company_name, industry, job_time, job_name, job_type, skill_id, job_content, type,is_member from app_user + select id, username, password, nickname, email, phone, address, create_time, update_time, avatar_url, education, school, major, start_time, end_time, experience, company_name, industry, job_time, job_name, job_type, skill_id, job_content, type,is_member, + order_id, order_start_time, order_end_time from app_user @@ -160,6 +168,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" hobby, city, other, + is_member, + order_id, + order_start_time, + order_end_time, #{username}, @@ -194,6 +206,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{hobby}, #{city}, #{other}, + #{isMember}, + #{orderId}, + #{orderStartTime}, + #{orderEndTime}, @@ -232,6 +248,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" hobby = #{hobby}, city = #{city}, other = #{other}, + is_member = #{isMember}, + order_id = #{orderId}, + order_start_time = #{orderStartTime}, + order_end_time = #{orderEndTime}, where id = #{id}