linhw 2024-04-26 17:38:20 +08:00
parent 60b3eb990c
commit 52a5285b56
5 changed files with 161 additions and 9 deletions

View File

@ -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());

View File

@ -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;

View File

@ -18,6 +18,7 @@ public interface AppOrderMapper
* @return
*/
public AppOrder selectAppOrderById(Long id);
public AppOrder selectOneByOutTradeNo(String tradeNo);
/**
*

View File

@ -42,6 +42,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<include refid="selectAppOrderVo"/>
where id = #{id}
</select>
<select id="selectOneByOutTradeNo" parameterType="Long" resultMap="AppOrderResult">
<include refid="selectAppOrderVo"/>
where outTradeNo = #{tradeNo}
</select>
<insert id="insertAppOrder" parameterType="AppOrder" useGeneratedKeys="true" keyProperty="id">
insert into app_order

View File

@ -39,6 +39,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="city" column="city" />
<result property="other" column="other" />
<result property="isMember" column="is_member" />
<result property="orderId" column="order_id" />
<result property="orderStartTime" column="order_start_time" />
<result property="orderEndTime" column="order_end_time" />
</resultMap>
<sql id="appUserColumns">
a.id as "id",
@ -77,7 +80,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</sql>
<sql id="selectAppUserVo">
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
</sql>
<select id="selectAppUserList" parameterType="AppUser" resultMap="AppUserResult">
@ -113,6 +117,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="hobby != null and hobby != ''"> and hobby = #{hobby}</if>
<if test="city != null and city != ''"> and city = #{city}</if>
<if test="other != null and other != ''"> and other = #{other}</if>
<if test="isMember != null "> and is_member = #{isMember}</if>
<if test="orderId != null "> and order_id = #{orderId}</if>
<if test="orderStartTime != null "> and order_start_time = #{orderStartTime}</if>
<if test="orderEndTime != null "> and order_end_time = #{orderEndTime}</if>
</where>
</select>
@ -160,6 +168,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="hobby != null">hobby,</if>
<if test="city != null">city,</if>
<if test="other != null">other,</if>
<if test="isMember != null">is_member,</if>
<if test="orderId != null">order_id,</if>
<if test="orderStartTime != null">order_start_time,</if>
<if test="orderEndTime != null">order_end_time,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="username != null">#{username},</if>
@ -194,6 +206,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="hobby != null">#{hobby},</if>
<if test="city != null">#{city},</if>
<if test="other != null">#{other},</if>
<if test="isMember != null">#{isMember},</if>
<if test="orderId != null">#{orderId},</if>
<if test="orderStartTime != null">#{orderStartTime},</if>
<if test="orderEndTime != null">#{orderEndTime},</if>
</trim>
</insert>
@ -232,6 +248,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="hobby != null">hobby = #{hobby},</if>
<if test="city != null">city = #{city},</if>
<if test="other != null">other = #{other},</if>
<if test="isMember != null">is_member = #{isMember},</if>
<if test="orderId != null">order_id = #{orderId},</if>
<if test="orderStartTime != null">order_start_time = #{orderStartTime},</if>
<if test="orderEndTime != null">order_end_time = #{orderEndTime},</if>
</trim>
where id = #{id}
</update>