From e78cce35f2339fbbe1dd66be790bb8426e029d45 Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Thu, 6 Nov 2025 19:45:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/data/dao/vv/VvTradeOrderLineDao.java | 2 + .../entity/vv/VvTradeOrderLineEntity.java | 40 ++++++++++++++++++- .../java/com/test/xxx/MysqlMain_update.java | 2 +- .../java/com/heyu/api/jsapi/JsapiPrepay.java | 9 ++--- .../api/controller/vv/AppOrderController.java | 34 +++++++++++----- .../vv/AppWeiXinPayNotifyController.java | 20 +++++++++- 6 files changed, 89 insertions(+), 18 deletions(-) diff --git a/api-mapper/src/main/java/com/heyu/api/data/dao/vv/VvTradeOrderLineDao.java b/api-mapper/src/main/java/com/heyu/api/data/dao/vv/VvTradeOrderLineDao.java index 58b4764..72afccb 100644 --- a/api-mapper/src/main/java/com/heyu/api/data/dao/vv/VvTradeOrderLineDao.java +++ b/api-mapper/src/main/java/com/heyu/api/data/dao/vv/VvTradeOrderLineDao.java @@ -149,4 +149,6 @@ public interface VvTradeOrderLineDao extends BaseMapper List selectVvTradeOrderLineByBuyerIdTrackNumber(Long buyerId, String trackNumber); + + List selectByTradeOrderIdAndTransactionId(Long tradeOrderId, String transactionId); } \ No newline at end of file diff --git a/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java b/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java index 5655d71..c93de9c 100644 --- a/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java +++ b/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvTradeOrderLineEntity.java @@ -10,7 +10,7 @@ import java.util.Date;import java.util.Date; /** *购物车 * @author quyixiao -* @since 2025-10-25 +* @since 2025-11-06 */ @Data @@ -72,6 +72,8 @@ private static final long serialVersionUID = 1L; public final static String award_amount = CLASS_NAME + "award_amount"; // 奖励金额 public final static String activity_id = CLASS_NAME + "activity_id"; // 活动id public final static String activity_award_count = CLASS_NAME + "activity_award_count"; // 这次活动的奖励次数 + public final static String transaction_id = CLASS_NAME + "transaction_id"; // 支付事务id + public final static String pay_type = CLASS_NAME + "pay_type"; // 支付方式,weixin // @TableId(value = "id", type = IdType.AUTO) private Long id; @@ -175,6 +177,10 @@ private static final long serialVersionUID = 1L; private Long activityId; //这次活动的奖励次数 private Integer activityAwardCount; + //支付事务id + private String transactionId; + //支付方式,weixin + private String payType; /** * * @return @@ -940,6 +946,36 @@ private static final long serialVersionUID = 1L; this.activityAwardCount = activityAwardCount; } + /** + * 支付事务id + * @return + */ + public String getTransactionId() { + return transactionId; + } + /** + * 支付事务id + * @param transactionId + */ + public void setTransactionId(String transactionId) { + this.transactionId = transactionId; + } + + /** + * 支付方式,weixin + * @return + */ + public String getPayType() { + return payType; + } + /** + * 支付方式,weixin + * @param payType + */ + public void setPayType(String payType) { + this.payType = payType; + } + @Override public String toString() { return "VvTradeOrderLineEntity{" + @@ -994,6 +1030,8 @@ private static final long serialVersionUID = 1L; ",awardAmount=" + awardAmount + ",activityId=" + activityId + ",activityAwardCount=" + activityAwardCount + + ",transactionId=" + transactionId + + ",payType=" + payType + "}"; } } \ No newline at end of file diff --git a/api-mapper/src/test/java/com/test/xxx/MysqlMain_update.java b/api-mapper/src/test/java/com/test/xxx/MysqlMain_update.java index ce6c8d4..2777bdf 100644 --- a/api-mapper/src/test/java/com/test/xxx/MysqlMain_update.java +++ b/api-mapper/src/test/java/com/test/xxx/MysqlMain_update.java @@ -48,7 +48,7 @@ public class MysqlMain_update { } List list = new ArrayList(); - list.add(new TablesBean("vv_product")); + list.add(new TablesBean("vv_trade_order_line")); Map map = MysqlUtil2ShowCreateTable.getComments(); diff --git a/api-third/src/main/java/com/heyu/api/jsapi/JsapiPrepay.java b/api-third/src/main/java/com/heyu/api/jsapi/JsapiPrepay.java index d46b4ab..9729e95 100644 --- a/api-third/src/main/java/com/heyu/api/jsapi/JsapiPrepay.java +++ b/api-third/src/main/java/com/heyu/api/jsapi/JsapiPrepay.java @@ -61,8 +61,7 @@ public class JsapiPrepay { - public DirectAPIv3JsapiPrepayResponse prePay(String tradeOrderId, - String skuInfo, + public DirectAPIv3JsapiPrepayResponse prePay(Long tradeOrderId, Long amount, String openid ) { @@ -70,8 +69,8 @@ public class JsapiPrepay { request.setAppid(appid); request.setMchid(mchid); request.setNotifyUrl(notifyUrl); - request.setDescription(skuInfo); - request.setOutTradeNo(tradeOrderId); + request.setDescription(System.currentTimeMillis() + ""); + request.setOutTradeNo(tradeOrderId + ""); request.setTimeExpire(WXPayUtility.generateExpireTime()); // 2025-11-05T21:02:16+08:00 request.setAttach("自定义数据说明"); request.setGoodsTag("WXG"); @@ -87,7 +86,7 @@ public class JsapiPrepay { return doPay(request); } - public DirectAPIv3JsapiPrepayResponse doPay(DirectAPIv3JsapiPrepayRequest request) { + private DirectAPIv3JsapiPrepayResponse doPay(DirectAPIv3JsapiPrepayRequest request) { String uri = PATH; String reqBody = WXPayUtility.toJson(request); diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOrderController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOrderController.java index fee11ec..e08571d 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOrderController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOrderController.java @@ -15,6 +15,8 @@ import com.heyu.api.data.utils.BigDecimalUtil; import com.heyu.api.data.utils.R; import com.heyu.api.data.utils.SanUtils; import com.heyu.api.data.utils.StringUtils; +import com.heyu.api.jsapi.JsapiPrepay; +import com.heyu.api.jsapi.dto.DirectAPIv3JsapiPrepayResponse; import com.heyu.api.utils.ISelect; import com.heyu.api.utils.PPageUtils; import lombok.extern.slf4j.Slf4j; @@ -63,6 +65,9 @@ public class AppOrderController { @Autowired private VvBuyerAddressDao vvBuyerAddressDao; + @Autowired + private JsapiPrepay jsapiPrepay; + /*** * https://api.1024api.com/api-interface/app/order/list * @@ -267,7 +272,6 @@ public class AppOrderController { VvTradeOrderEntity vvTradeOrderEntity = new VvTradeOrderEntity(); VvBuyerEntity vvBuyerEntity = vvBuyerDao.selectVvBuyerById(vvOrderRequest.getBuyerId()); - //创建时间 vvTradeOrderEntity.setCreateTime(new Date()); vvTradeOrderEntity.setModifyTime(new Date()); @@ -276,7 +280,6 @@ public class AppOrderController { vvTradeOrderEntity.setBuyerName(vvBuyerEntity.getBuyerName()); vvTradeOrderEntity.setBuyerWeixin(vvBuyerEntity.getBuyerWeixin()); vvTradeOrderEntity.setGmtDownOrder(new Date()); - VvBuyerAddressEntity vvBuyerAddress = vvBuyerAddressDao.selectVvBuyerAddressById(vvOrderRequest.getBuyerAddressId()); vvTradeOrderEntity.setContry(vvBuyerAddress.getContry()); vvTradeOrderEntity.setProvince(vvBuyerAddress.getProvince()); @@ -287,13 +290,11 @@ public class AppOrderController { vvTradeOrderEntity.setBuyerId(vvOrderRequest.getBuyerId()); vvTradeOrderEntity.setCreateTimestamp(System.currentTimeMillis()); vvTradeOrderEntity.setModifyTimestamp(System.currentTimeMillis()); - vvTradeOrderDao.insertVvTradeOrder(vvTradeOrderEntity); for (VvTradeOrderLineEntity tradeOrderLineEntity : vvTradeOrderLineEntityList) { tradeOrderLineEntity.setTradeOrderId(vvTradeOrderEntity.getId()); vvTradeOrderLineDao.insertOrUpdateVvTradeOrderLine(tradeOrderLineEntity); } - for (VvTradeOrderLineDTO vvTradeOrderLineDTO : vvOrderRequest.getVvTradeOrderLineDTOList()) { vvSkuDao.updateVvSkuStockSaleCountById(vvTradeOrderLineDTO.getNum(), vvTradeOrderLineDTO.getNum(), vvTradeOrderLineDTO.getNum(), vvTradeOrderLineDTO.getSkuId()); } @@ -301,12 +302,19 @@ public class AppOrderController { for (Map.Entry map : productNumMap.entrySet()) { vvProductDao.updateShowSaleCountAndSaleCount(map.getValue(), map.getValue(), map.getKey()); } - - - - - - + DirectAPIv3JsapiPrepayResponse jsapiPrepayResponse = jsapiPrepay.prePay(vvTradeOrderEntity.getId(), + BigDecimalUtil.multiply(vvTradeOrderEntity.getAllPrice(), new BigDecimal(100)).longValue(), + vvBuyerEntity.getOpenid() + ); + if (jsapiPrepayResponse != null && jsapiPrepayResponse.getPrepayId() != null) { + List vvTradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(vvTradeOrderEntity.getId()); + for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntities) { + vvTradeOrderLineEntity.setPayType("weixin"); + vvTradeOrderLineEntity.setStatus(OrderStatusEnums.wait_pay.getStatus()); + vvTradeOrderLineEntity.setTransactionId(jsapiPrepayResponse.getPrepayId()); + vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity); + } + } return R.ok("订单创建成功"); } @@ -320,6 +328,8 @@ public class AppOrderController { return R.ok(); } + + /*** * 订单 妥投 /app/order/delivered */ @@ -339,4 +349,8 @@ public class AppOrderController { return R.ok(); } + + + + } diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppWeiXinPayNotifyController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppWeiXinPayNotifyController.java index dcfe2d4..09f4dd4 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppWeiXinPayNotifyController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppWeiXinPayNotifyController.java @@ -3,8 +3,13 @@ package com.heyu.api.controller.vv; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.heyu.api.alibaba.request.mm.enums.OrderStatusEnums; import com.heyu.api.common.annotation.Describe; +import com.heyu.api.data.dao.vv.VvTradeOrderLineDao; +import com.heyu.api.data.entity.vv.VvTradeOrderLineEntity; +import com.heyu.api.data.utils.NumberUtil; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -17,6 +22,8 @@ import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.Key; import java.util.Base64; +import java.util.Date; +import java.util.List; @Slf4j @RestController @@ -24,6 +31,10 @@ import java.util.Base64; public class AppWeiXinPayNotifyController { + @Autowired + private VvTradeOrderLineDao vvTradeOrderLineDao; + + // 微信支付APIv3密钥 @Value("${eb.config.weixin.pay.apiv3key}") private String apiv3key; @@ -80,9 +91,16 @@ public class AppWeiXinPayNotifyController { return new String(decryptedData, StandardCharsets.UTF_8); } + private void updateOrderStatus(String outTradeNo, String transactionId) { // 这里是更新商户订单状态的逻辑,例如标记订单已支付 - System.out.println("订单 " + outTradeNo + " 已支付,交易号:" + transactionId); + log.info("订单 " + outTradeNo + " 已支付,交易号:" + transactionId + "开始更新子订单信息"); + List vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectByTradeOrderIdAndTransactionId(NumberUtil.objToLong(outTradeNo), transactionId); + for (VvTradeOrderLineEntity vvTradeOrderLineEntity : vvTradeOrderLineEntityList) { + vvTradeOrderLineEntity.setStatus(OrderStatusEnums.wait_shipping.getStatus()); + vvTradeOrderLineEntity.setGmtPay(new Date()); + vvTradeOrderLineDao.updateVvTradeOrderLineById(vvTradeOrderLineEntity); + } } }