From fc9c279a4981d653076442a357cd1f8c05f5caa6 Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Sun, 9 Nov 2025 21:10:09 +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 --- .../alibaba/request/mm/order/AppCloseDTO.java | 18 +++++++++++ .../java/com/heyu/api/jsapi/JsapiPrepay.java | 17 ++++++---- .../api/controller/vv/AppOrderController.java | 32 ++++++++++++++++++- .../controller/vv/AppReverseController.java | 10 ------ .../vv/AppWeiXinRefundNotifyController.java | 2 +- 5 files changed, 61 insertions(+), 18 deletions(-) create mode 100644 api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/AppCloseDTO.java diff --git a/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/AppCloseDTO.java b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/AppCloseDTO.java new file mode 100644 index 0000000..c3b592e --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/alibaba/request/mm/order/AppCloseDTO.java @@ -0,0 +1,18 @@ +package com.heyu.api.alibaba.request.mm.order; + + +import com.heyu.api.alibaba.request.vv.AppBaseRequest; +import lombok.Data; + +@Data +public class AppCloseDTO extends AppBaseRequest { + + + /*** + * 订单id + */ + private Long tradeOrderId; + +} + + 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 a610f4f..6ae8556 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 @@ -143,6 +143,7 @@ public class JsapiPrepay { if (!queryString.isEmpty()) { uri = uri + "?" + queryString; } + log.info("JsapiPrepay queryOrder uri:{},params:{}",uri,JSON.toJSONString(args)); Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); reqBuilder.addHeader("Accept", "application/json"); reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); @@ -153,7 +154,7 @@ public class JsapiPrepay { OkHttpClient client = new OkHttpClient.Builder().build(); try (Response httpResponse = client.newCall(httpRequest).execute()) { String respBody = WXPayUtility.extractBody(httpResponse); - log.info("JsapiPrepay queryOrder respBody = " + respBody); + log.info("JsapiPrepay queryOrder respBody = " + respBody); if (httpResponse.code() >= 200 && httpResponse.code() < 300) { // 2XX 成功,验证应答签名 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, @@ -173,16 +174,17 @@ public class JsapiPrepay { * 关闭订单 * https://pay.weixin.qq.com/doc/v3/merchant/4012791901 */ - public void close(String tradeOrderId) { + public void close(Long tradeOrderId) { String HOST = "https://api.mch.weixin.qq.com"; String METHOD = "POST"; String PATH = "/v3/pay/transactions/out-trade-no/{out_trade_no}/close"; CloseOrderRequest request = new CloseOrderRequest(); - request.setOutTradeNo(tradeOrderId); + request.setOutTradeNo(tradeOrderId + ""); request.setMchid(mchid); String uri = PATH; uri = uri.replace("{out_trade_no}", WXPayUtility.urlEncode(request.outTradeNo)); String reqBody = WXPayUtility.toJson(request); + log.info("JsapiPrepay close reqBody = " + reqBody); Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); reqBuilder.addHeader("Accept", "application/json"); reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); @@ -196,6 +198,7 @@ public class JsapiPrepay { OkHttpClient client = new OkHttpClient.Builder().build(); try (Response httpResponse = client.newCall(httpRequest).execute()) { String respBody = WXPayUtility.extractBody(httpResponse); + log.info("JsapiPrepay close respBody = " + respBody); if (httpResponse.code() >= 200 && httpResponse.code() < 300) { // 2XX 成功,验证应答签名 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, @@ -229,7 +232,6 @@ public class JsapiPrepay { * UNSETTLED: 仅对出行预付押金退款适用,指定从未结算资金出资。 */ request.fundsAccount = ReqFundsAccount.AVAILABLE; // 【退款资金来源】 若传递此参数则使用对应的资金账户退款。 - // 【金额信息】订单退款金额信息 request.amount = new AmountReq(); @@ -243,7 +245,7 @@ public class JsapiPrepay { String HOST = "https://api.mch.weixin.qq.com"; String METHOD = "POST"; String uri = "/v3/refund/domestic/refunds"; - log.info("RefundServiceImpl refund params :{}", JSON.toJSONString(request)); + log.info("JsapiPrepay refund params :{}", JSON.toJSONString(request)); String reqBody = WXPayUtility.toJson(request); Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); reqBuilder.addHeader("Accept", "application/json"); @@ -257,7 +259,7 @@ public class JsapiPrepay { OkHttpClient client = new OkHttpClient.Builder().build(); try (Response httpResponse = client.newCall(httpRequest).execute()) { String respBody = WXPayUtility.extractBody(httpResponse); - log.info("order refund respBody:{}", respBody); + log.info("JsapiPrepay order refund respBody:{}", respBody); if (httpResponse.code() >= 200 && httpResponse.code() < 300) { // 2XX 成功,验证应答签名 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, @@ -291,6 +293,7 @@ public class JsapiPrepay { request.outRefundNo = reverseOrderId + ""; // 【商户退款单号】 商户申请退款时传入的商户系统内部退款单号。 String uri = PATH; uri = uri.replace("{out_refund_no}", WXPayUtility.urlEncode(request.outRefundNo)); + log.info("JsapiPrepay queryRefund params :{},uri:{}", JSON.toJSONString(request),uri); Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); reqBuilder.addHeader("Accept", "application/json"); reqBuilder.addHeader("Wechatpay-Serial", wechatPayPublicKeyId); @@ -302,6 +305,7 @@ public class JsapiPrepay { OkHttpClient client = new OkHttpClient.Builder().build(); try (Response httpResponse = client.newCall(httpRequest).execute()) { String respBody = WXPayUtility.extractBody(httpResponse); + log.info("JsapiPrepay queryRefund respBody:{}", respBody); if (httpResponse.code() >= 200 && httpResponse.code() < 300) { // 2XX 成功,验证应答签名 WXPayUtility.validateResponse(this.wechatPayPublicKeyId, this.wechatPayPublicKey, @@ -322,6 +326,7 @@ public class JsapiPrepay { String METHOD = "POST"; String PATH = "/v3/pay/transactions/jsapi"; String uri = PATH; + log.info("JsapiPrepay doPay params :{}", JSON.toJSONString(request)); String reqBody = WXPayUtility.toJson(request); Request.Builder reqBuilder = new Request.Builder().url(HOST + uri); reqBuilder.addHeader("Accept", "application/json"); 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 59d1421..79423c9 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 @@ -4,6 +4,7 @@ package com.heyu.api.controller.vv; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.metadata.IPage; import com.heyu.api.alibaba.request.mm.enums.OrderStatusEnums; +import com.heyu.api.alibaba.request.mm.order.AppCloseDTO; import com.heyu.api.alibaba.request.mm.order.AppDeliveredDTO; import com.heyu.api.alibaba.request.mm.order.VvTradeOrderLineTrackNumberDTO; import com.heyu.api.alibaba.request.mm.order.resp.*; @@ -91,6 +92,9 @@ public class AppOrderController { @Value("${eb.config.weixin.pay.privateKeyFilePath}") private String privateKey; + @Autowired + private JsapiPrepay jsApiPrepay; + /*** * https://api.1024api.com/api-interface/app/order/list * @@ -399,7 +403,6 @@ public class AppOrderController { @Describe("删除订单") @RequestMapping("/delete") public R add(@RequestBody VvTradeOrderDeleteDTO vvOrderRequest) { - if (StringUtils.isNotEmpty(vvOrderRequest.getTrackNumber())) { List vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTrackNumberBuyerId( vvOrderRequest.getTrackNumber(),vvOrderRequest.getBuyerId()); @@ -441,12 +444,39 @@ public class AppOrderController { } for (VvTradeOrderLineEntity tradeOrderLineEntity : vvTradeOrderLineEntityList) { tradeOrderLineEntity.setStatus(OrderStatusEnums.delivered.getStatus()); + tradeOrderLineEntity.setGmtDelivered(new Date()); vvTradeOrderLineDao.updateVvTradeOrderLineById(tradeOrderLineEntity); } return R.ok(); } + /*** + * 订单关闭 /app/order/close + */ + @Describe("订单关闭") + @RequestMapping("/close") + public R close(@RequestBody AppCloseDTO appCloseDTO) { + List vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTradeOrderId(appCloseDTO.getTradeOrderId()); + for (VvTradeOrderLineEntity tradeOrderLineEntity : vvTradeOrderLineEntityList) { + if (!OrderStatusEnums.wait_pay.getStatus().equals(tradeOrderLineEntity.getStatus())) { + return R.error("订单状态不是wait_pay不对"); + } + } + + for (VvTradeOrderLineEntity tradeOrderLineEntity : vvTradeOrderLineEntityList) { + tradeOrderLineEntity.setStatus(OrderStatusEnums.close.getStatus()); + tradeOrderLineEntity.setGmtClose(new Date()); + vvTradeOrderLineDao.updateVvTradeOrderLineById(tradeOrderLineEntity); + } + + + + jsApiPrepay.close(appCloseDTO.getTradeOrderId() ); + + return R.ok(); + } + diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppReverseController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppReverseController.java index 08b4486..b35a809 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppReverseController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppReverseController.java @@ -65,9 +65,7 @@ public class AppReverseController { @Describe("逆向订单创建") @RequestMapping("/add") public R add(@RequestBody AppliyReverseRequest appliyReverseRequest) { - List vvTradeOrderLineEntityList = vvTradeOrderLineDao.selectVvTradeOrderLineByTrackNumber(appliyReverseRequest.getTrackNumber()); - return reverseOrderService.createReverseOrder(vvTradeOrderLineEntityList, appliyReverseRequest); } @@ -114,21 +112,13 @@ public class AppReverseController { @Describe("逆向订单关闭") @RequestMapping("/close") public R close(@RequestBody AppliyReverseCloseRequest appliyReverseRequest) { - VvReverseOrderEntity vvReverseOrderEntity = vvReverseOrderDao.selectVvReverseOrderById(appliyReverseRequest.getReverseOrderId()); - vvReverseOrderEntity.setStatus(ReverseStatusEnums.close.getStatus()); - vvReverseOrderEntity.setGmtClose(new Date()); - vvReverseOrderDao.updateVvReverseOrderById(vvReverseOrderEntity); - List vvReverseOrderLineEntities = vvReverseOrderLineDao.selectVvReverseOrderLineByReverseOrderId(appliyReverseRequest.getReverseOrderId()); - List tradeOrderLineIds = SanUtils.list2list(vvReverseOrderLineEntities, VvReverseOrderLineEntity::getTradeOrderLineId); - List tradeOrderLineEntities = vvTradeOrderLineDao.selectVvTradeOrderLineByIds(tradeOrderLineIds); - for (VvTradeOrderLineEntity tradeOrderLineEntity : tradeOrderLineEntities) { tradeOrderLineEntity.setReverseStatus(ReverseStatusEnums.close.getStatus()); diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppWeiXinRefundNotifyController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppWeiXinRefundNotifyController.java index 4f1bec2..f43ab55 100644 --- a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppWeiXinRefundNotifyController.java +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppWeiXinRefundNotifyController.java @@ -106,7 +106,7 @@ public class AppWeiXinRefundNotifyController { String refund_status = reqInfo.get("refund_status");//退款状态 String out_trade_no = reqInfo.get("out_trade_no"); //订单号 String out_refund_no = reqInfo.get("out_refund_no"); //订单号 - log.info("AppWeiXinRefundNotifyController refundNotifyUrl out_trade_no:{} refund_status:{} resultStr :{} " ,out_trade_no,refund_status,resultStr); + log.info("AppWeiXinRefundNotifyController refundNotifyUrl out_trade_no:{} ,out_refund_no:{} refund_status:{} resultStr :{} " ,out_trade_no,out_refund_no,refund_status,resultStr); Map parm = new HashMap<>(); if (!StringUtils.isEmpty(refund_status) && "SUCCESS".equals(refund_status)) { VvReverseOrderEntity vvReverseOrderEntity = reverseOrderDao.selectVvReverseOrderById(NumberUtil.objToLong(out_refund_no));