From 10bc17df0ece3b262174c33b6c09a310be5ef541 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Mon, 20 Oct 2025 21:30:56 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E5=86=99=E7=A6=81=E6=AD=A2=E9=80=80?= =?UTF-8?q?=E8=B4=A7=E7=9A=84=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/modules/lakala/LklOrderDraw.java | 3 + .../admin/LakalaAdminController.java | 2 +- .../shop/lakala/service/LakalaApiService.java | 3 +- .../lakala/service/LklOrderDrawService.java | 8 ++ .../service/impl/LakalaApiServiceImpl.java | 22 +++-- .../service/impl/LklOrderDrawServiceImpl.java | 37 ++++++++- .../mobile/UserReturnController.java | 3 +- .../impl/ShopOrderReturnServiceImpl.java | 82 ++++++++++++++++--- 8 files changed, 136 insertions(+), 24 deletions(-) diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklOrderDraw.java b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklOrderDraw.java index d41b1abf..0a3afff3 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklOrderDraw.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklOrderDraw.java @@ -110,6 +110,9 @@ public class LklOrderDraw { @ApiModelProperty(value = "商户订单号", example = "MER2023100100001") private String mer_order_no; + @ApiModelProperty(value = "商城订单Id") + private String order_id; + /** * 结算流水号 */ diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java index f1da4113..fe9b4ca8 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/admin/LakalaAdminController.java @@ -49,7 +49,7 @@ public class LakalaAdminController extends BaseControllerImpl { } // 执行业务逻辑 - Boolean success = lakalaPayService.ewalletWithDrawD1(paramsJSON.getStr("mercId"), paramsJSON.getStr("merOrderNo"), paramsJSON.getStr("drawAmt"), paramsJSON.getStr("summary")); + Boolean success = lakalaPayService.ewalletWithDrawD1(paramsJSON.getStr("mercId"), paramsJSON.getStr("merOrderNo"), paramsJSON.getStr("drawAmt"), paramsJSON.getStr("orderId"), paramsJSON.getStr("summary")); if (success) { return CommonResult.success("账户D1提现提交成功"); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java index 8b653e06..9f7631f3 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LakalaApiService.java @@ -340,9 +340,10 @@ public interface LakalaApiService { * @param mercId 822商户号或receiveNo * @param merOrderNo 商户订单号 * @param drawAmt 提现金额(分) + * @param orderId 商城订单Id * @param summary */ - Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String summary); + Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String orderId, String summary); /** * 拉卡拉账户D1提现结果通知 diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderDrawService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderDrawService.java index 8d074ae6..f98153b5 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderDrawService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderDrawService.java @@ -29,4 +29,12 @@ public interface LklOrderDrawService extends IBaseService { * @return */ LklOrderDraw getByByMercIdAndMerOrderNo(String mercId, String merOrderNo); + + /** + * 判断订单是否已经提现完成 + * + * @param orderId + * @return + */ + Boolean isOrderDrawed(String orderId); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java index 9ebb96b4..dffb287d 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LakalaApiServiceImpl.java @@ -2808,11 +2808,12 @@ public class LakalaApiServiceImpl implements LakalaApiService { public JSONObject sacsSeparateNotify(HttpServletRequest request, String merchantNoParam, String separateNoParam) { String channel = ""; try { - JSONObject paramsJson = null; + JSONObject paramsJson; if (!StrUtil.hasBlank(merchantNoParam, separateNoParam)) { channel = "(补偿)"; log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调{},merchantNoParam={},separateNoParam={}", channel, merchantNoParam, separateNoParam); + // 主动从拉卡拉获取分账结果 paramsJson = sacsQuery(merchantNoParam, separateNoParam); } else { log.info("[拉卡拉分账通知] 开始处理拉卡拉分账结果通知异步回调"); @@ -2931,13 +2932,15 @@ public class LakalaApiServiceImpl implements LakalaApiService { continue; } + // 分账成功之后,立即申请提现 String recvNo = Convert.toStr(detailData.get("recv_no"), ""); String amt = Convert.toStr(detailData.get("amt"), ""); if (StrUtil.isNotBlank(recvNo) && StrUtil.isNotBlank(amt)) { - String outSeparateNoTemp = String.format("%s_%d", outSeparateNo, idx); - Boolean drawSuccess = ewalletWithDrawD1(recvNo, outSeparateNoTemp, amt, JSONUtil.toJsonStr(detailDatas)); + String merOrderNo = String.format("%s_%d", outSeparateNo, idx); + // 账户D1提现 + Boolean drawSuccess = ewalletWithDrawD1(recvNo, merOrderNo, amt, outSeparateNo, JSONUtil.toJsonStr(detailDatas)); log.info("[拉卡拉分账通知] 账户D1提现{},商户号={},分账单号={},金额={}分", - Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, outSeparateNoTemp, amt); + Boolean.TRUE.equals(drawSuccess) ? "成功" : "失败", recvNo, merOrderNo, amt); idx++; } } @@ -3508,11 +3511,12 @@ public class LakalaApiServiceImpl implements LakalaApiService { * @param mercId 822商户号或receiveNo * @param merOrderNo 商户订单号 * @param drawAmt 提现金额(分) + * @param orderId 商城订单Id * @param summary 摘要信息 * @return 操作结果,成功返回true,失败返回false */ @Override - public Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String summary) { + public Boolean ewalletWithDrawD1(String mercId, String merOrderNo, String drawAmt, String orderId, String summary) { // 1. 参数校验 if (StrUtil.hasBlank(mercId, merOrderNo, drawAmt)) { log.warn("[D1提现申请] D1提现参数校验失败,关键参数为空: mercId={}, merOrderNo={}, drawAmt={}", @@ -3557,7 +3561,8 @@ public class LakalaApiServiceImpl implements LakalaApiService { if (StrUtil.isNotBlank(summary)) { request.setSummary(summary); } - request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/ewallet/ewallet/drawNotify"); + + request.setNotifyUrl(projectDomain + "/api/mobile/shop/lakala/ewallet/drawNotify"); // 4. 发送请求 String responseStr = LKLSDK.httpPost(request); @@ -3583,6 +3588,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { LklOrderDraw lklOrderDraw = new LklOrderDraw(); lklOrderDraw.setMerc_id(mercId); lklOrderDraw.setMer_order_no(merOrderNo); + lklOrderDraw.setOrder_id(orderId); lklOrderDraw.setDraw_jnl(Convert.toStr(drawJnl)); lklOrderDraw.setDraw_amt(drawAmtYuan); lklOrderDraw.setBatch_auto_settle(payType); @@ -3654,7 +3660,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { log.info("[拉卡拉D1提现结果通知] 提现通知参数: drawState={}, mercId={}, merOrderNo={}", drawState, mercId, merOrderNo); - if (StrUtil.isBlank(mercId) || StrUtil.isBlank(merOrderNo) || StrUtil.isBlank(drawState)) { + if (StrUtil.hasBlank(mercId, merOrderNo, drawState)) { log.warn("[拉卡拉提现结果通知] 回调参数缺失: drawState={}, mercId={}, merOrderNo={}", drawState, mercId, merOrderNo); return JSONUtil.createObj() .set("code", "FAIL") @@ -3665,7 +3671,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { if (!"DRAW.SUCCESS".equals(drawState)) { log.debug("[拉卡拉D1提现结果通知] 提现状态未成功,忽略处理: drawState={}", drawState); return JSONUtil.createObj() - .set("code", "SUCCESS") // 返回成功,避免重复通知 + .set("code", "FAIL") // 返回成功,避免重复通知 .set("message", "状态未成功,忽略处理"); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderDrawServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderDrawServiceImpl.java index 22e7043c..d676e913 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderDrawServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderDrawServiceImpl.java @@ -38,7 +38,7 @@ public class LklOrderDrawServiceImpl extends BaseServiceImpl 0) { // 更新记录 log.info("[LklOrderDraw] 记录已存在,执行更新操作,ID={}", existsRecord.getId()); @@ -102,4 +102,39 @@ public class LklOrderDrawServiceImpl extends BaseServiceImpl() + .eq("order_id", orderId) + .eq("draw_state", "DRAW.SUCCESS") + .orderByDesc("id")); + + // 根据查询结果判断是否已提现 + if (lklOrderDraw != null) { + log.debug("订单[{}]提现已完成", orderId); + return true; + } else { + log.debug("订单[{}]提现未完成或不存在提现记录", orderId); + return false; + } + } catch (Exception e) { + log.error("查询订单[{}]提现状态异常", orderId, e); + return false; + } + } } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserReturnController.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserReturnController.java index 95db5e8d..5fa657ae 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserReturnController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/mobile/UserReturnController.java @@ -85,7 +85,8 @@ public class UserReturnController extends BaseControllerImpl { return CommonResult.failed(ResultCode.NEED_LOGIN); } - return shopOrderReturnService.addWholeItems(order_id, false, ""); + // return shopOrderReturnService.addWholeItems(order_id, false, ""); + return shopOrderReturnService.addRemainingItems(order_id, true, ""); } @ApiOperation(value = "取消退款订单", notes = "取消退款订单") diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderReturnServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderReturnServiceImpl.java index d86c9b22..c9aa5a49 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderReturnServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderReturnServiceImpl.java @@ -43,6 +43,7 @@ import com.suisung.mall.shop.base.service.ShopBaseStateCodeService; import com.suisung.mall.shop.distribution.service.ShopDistributionUserCommissionService; import com.suisung.mall.shop.distribution.service.ShopDistributionUserOrderItemService; import com.suisung.mall.shop.distribution.service.ShopDistributionUserOrderService; +import com.suisung.mall.shop.lakala.service.LklOrderDrawService; import com.suisung.mall.shop.lakala.service.LklOrderSeparateService; import com.suisung.mall.shop.message.service.PushMessageService; import com.suisung.mall.shop.number.service.ShopNumberSeqService; @@ -195,7 +196,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl contractTypeIds = Convert.toList(Integer.class, shopProductIndex.getContract_type_ids()); //start判断是否可以申请退款 - // 1、商品是否允许 + // 1、商品是否禁止退货 if (contractTypeIds.contains(new Integer(StateCode.CONTRACT_TYPE_DENY_RETURN))) { - is_denyreturn = true; - // throw new ApiException(I18nUtil._("此商品不允许退货!")); + log.error("此商品不允许退货!"); + return true; } // 2、是否已经可结算, 进入可结算,不允许退货。 @@ -2133,14 +2136,69 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl 0) { - is_denyreturn = true; - //throw new ApiException(I18nUtil._("此商品已过退货期,不允许退货!")); + log.error("此商品已过退货期,不允许退货!"); + return true; } } - return is_denyreturn; + return is_deny_return; } + + /** + * 判断订单是否禁止退货 + * + * @param orderId 订单ID + * @return 如果订单禁止退货返回true,否则返回false + */ + public boolean isOrderDenyReturn(String orderId) { + // 参数校验 + if (StrUtil.isBlank(orderId)) { + log.warn("订单ID为空,无法判断退货状态"); + return true; + } + + try { + // 获取订单信息 + ShopOrderInfo shopOrderInfo = shopOrderInfoService.get(orderId); + if (shopOrderInfo == null) { + log.error("订单信息不存在,订单ID: {}", orderId); + return true; + } + + // 检查订单状态是否已收货或已完成 + Integer orderStateId = shopOrderInfo.getOrder_state_id(); + if (ObjectUtil.equal(orderStateId, StateCode.ORDER_STATE_RECEIVED) || + ObjectUtil.equal(orderStateId, StateCode.ORDER_STATE_FINISH)) { + + // 获取可提现时间戳 + Long withdrawTime = shopOrderBaseService.getWithdrawTime(); + Long orderDealTime = shopOrderInfo.getOrder_deal_time(); + + // 如果订单成交时间早于可提现时间,说明已过退货期 + if (orderDealTime != null && withdrawTime.compareTo(orderDealTime) > 0) { + log.debug("订单[{}]已过退货期,不允许退货", orderId); + return true; + } + } + + // 检查拉卡拉分账和提现状态 + if (lklOrderSeparateService.isOrderSeparated(orderId) && + lklOrderDrawService.isOrderDrawed(orderId)) { + log.debug("订单[{}]已提现,不允许退货", orderId); + return true; + } + + // 默认允许退货 + return false; + + } catch (Exception e) { + log.error("查询订单[{}]退货状态异常", orderId, e); + return true; + } + } + + /** * 该函数用于判断指定订单商品是否禁止退货。 * 根据 order_item_id 获取订单商品信息; @@ -2284,7 +2342,7 @@ public class ShopOrderReturnServiceImpl extends BaseServiceImpl