From dc2300397d0e04e5f9c5e29e4639c36489b1a182 Mon Sep 17 00:00:00 2001
From: Jack <46790855@qq.com>
Date: Sun, 8 Jun 2025 23:49:19 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8B=89=E5=8D=A1=E6=8B=89sdk=20jar=20?=
=?UTF-8?q?=E5=AE=89=E8=A3=85=E5=88=B0=E6=9C=AC=E5=9C=B0=20maven=20?=
=?UTF-8?q?=E5=BA=93=EF=BC=8C=E5=B9=B6=E5=BC=95=E7=94=A8=EF=BC=8C=E9=98=B2?=
=?UTF-8?q?=E6=AD=A2=E4=BE=9D=E8=B5=96=E4=B8=8D=E5=8F=AF=E4=BC=A0=E9=80=92?=
=?UTF-8?q?=E6=80=A7?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mall-shop/README.MD | 13 +++++-
mall-shop/pom.xml | 10 +----
.../service/LklOrderSeparateService.java | 9 ++++
.../service/impl/LakalaApiServiceImpl.java | 45 +++++++++++++------
.../impl/LklOrderSeparateServiceImpl.java | 34 ++++++++++++++
.../admin/ShopOrderReturnController.java | 2 +-
.../impl/ShopOrderBaseServiceImpl.java | 16 ++++++-
.../impl/ShopOrderLogisticsServiceImpl.java | 28 ++++++++++++
8 files changed, 131 insertions(+), 26 deletions(-)
diff --git a/mall-shop/README.MD b/mall-shop/README.MD
index 1607608e..57402a34 100644
--- a/mall-shop/README.MD
+++ b/mall-shop/README.MD
@@ -1,6 +1,15 @@
项目备份录
-account_user_bind_connect 用户手机、邮件、微博、QQ、微信绑定表
+account_user_bind_connect 用户手机、邮件、微博、QQ、微信绑定表
admin_base_protocol
admin_rights_base
-权限赋值的表
\ No newline at end of file
+权限赋值的表
+
+拉卡拉sdk jar 本地 maven 安装:
+
+mvn install:install-file \
+-Dfile=/Users/panjunjie/code/java-mall/mall-shop/src/main/resources/lib/lkl-java-sdk-1.0.7.jar \
+-DgroupId=com.lkl.laop.sdk \
+-DartifactId=lkl-laop-java-sdk \
+-Dversion=1.0.7 \
+-Dpackaging=jar
\ No newline at end of file
diff --git a/mall-shop/pom.xml b/mall-shop/pom.xml
index 7edcf4b9..d09326d8 100644
--- a/mall-shop/pom.xml
+++ b/mall-shop/pom.xml
@@ -283,8 +283,8 @@
com.lkl.laop.sdk
lkl-laop-java-sdk
1.0.7
- ${project.basedir}/src/main/resources/lib/lkl-java-sdk-1.0.7.jar
- system
+
+
@@ -294,12 +294,6 @@
2.8.0
compile
-
-
- com.microsoft.sqlserver
- mssql-jdbc
- 9.2.1.jre8
-
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderSeparateService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderSeparateService.java
index 07ea7bac..910102a0 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderSeparateService.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklOrderSeparateService.java
@@ -20,4 +20,13 @@ public interface LklOrderSeparateService extends IBaseService
* @return
*/
Boolean addOrUpdateByReceiverNo(LklOrderSeparate record);
+
+ /**
+ * 根据拉卡拉对账单流水号和平台订单号查询记录
+ *
+ * @param logNo
+ * @param outSeparateNo
+ * @return
+ */
+ LklOrderSeparate getByOutTradeNo(String logNo, String outSeparateNo);
}
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 9783f394..91d41df2 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
@@ -1632,9 +1632,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
try {
// TODO 检查可分账余额是否足够?
- // 初始化拉卡拉SDK
- initLKLSDK();
-
// 查询订单信息
List shopOrderLklList = shopOrderLklService.selectByOrderId(orderId, "", storeId);
if (CollectionUtil.isEmpty(shopOrderLklList)) {
@@ -1645,16 +1642,36 @@ public class LakalaApiServiceImpl implements LakalaApiService {
int successCount = 0;
StringBuilder errorMessages = new StringBuilder();
+ // 初始化拉卡拉SDK
+ initLKLSDK();
+
// 遍历处理每个店铺订单的分账
- for (ShopOrderLkl order : shopOrderLklList) {
- String merchantNo = order.getLkl_merchant_no();
- Integer paymentAmount = order.getTotal_amt();
- Integer shoppingFee = order.getShopping_fee();
- BigDecimal splitRatioMch = order.getSplit_ratio();
+ for (ShopOrderLkl shopOrderLkl : shopOrderLklList) {
+
+ // TODO 检查已经分账的,不再去分账了
+ LklOrderSeparate lklOrderSeparateExist = lklOrderSeparateService.getByOutTradeNo(shopOrderLkl.getLkl_log_no(), orderId);
+ if (lklOrderSeparateExist != null) {
+ String status = lklOrderSeparateExist.getStatus();
+ if ("SUCCESS".equals(status)) {
+ log.warn("订单 [{}] 已完成分账,跳过处理。", orderId);
+ successCount++;
+ continue;
+ }
+ if ("PROCESSING".equals(status) || "ACCEPTED".equals(status)) {
+ log.warn("订单 [{}] 分账处理中或已受理,跳过处理。", orderId);
+ successCount++;
+ continue;
+ }
+ }
+
+ String merchantNo = shopOrderLkl.getLkl_merchant_no();
+ Integer paymentAmount = shopOrderLkl.getTotal_amt();
+ Integer shoppingFee = shopOrderLkl.getShopping_fee();
+ BigDecimal splitRatioMch = shopOrderLkl.getSplit_ratio();
// 金额合法性校验
if (paymentAmount <= 0 || (shoppingFee != null && paymentAmount <= shoppingFee)) {
- String errorMsg = String.format("店铺[%s]订单金额异常或运费过高,跳过分账", order.getStore_id());
+ String errorMsg = String.format("店铺[%s]订单金额异常或运费过高,跳过分账", shopOrderLkl.getStore_id());
log.error(errorMsg);
errorMessages.append(errorMsg).append("; ");
continue;
@@ -1665,7 +1682,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
List distributors = lklLedgerMerReceiverBindService.selectDistributorByMerCupNo(merchantNo);
if (platform == null) {
- String errorMsg = String.format("店铺[%s]未绑定平台方接收账户,跳过分账", order.getStore_id());
+ String errorMsg = String.format("店铺[%s]未绑定平台方接收账户,跳过分账", shopOrderLkl.getStore_id());
log.error(errorMsg);
errorMessages.append(errorMsg).append("; ");
continue;
@@ -1674,14 +1691,14 @@ public class LakalaApiServiceImpl implements LakalaApiService {
// 判断是否可以分账(商家比例非100%)
boolean canSplit = splitRatioMch != null && splitRatioMch.compareTo(new BigDecimal("100")) < 0;
if (!canSplit) {
- log.warn("店铺[{}]分账比例为0,仅扣除运费", order.getStore_id());
+ log.warn("店铺[{}]分账比例为0,仅扣除运费", shopOrderLkl.getStore_id());
}
// 构建分账请求对象
V3SacsSeparateRequest request = new V3SacsSeparateRequest();
request.setMerchantNo(merchantNo);
- request.setLogNo(order.getLkl_log_no());
- request.setLogDate(order.getLkl_log_date());
+ request.setLogNo(shopOrderLkl.getLkl_log_no());
+ request.setLogDate(shopOrderLkl.getLkl_log_date());
request.setOutSeparateNo(orderId);
request.setTotalAmt(paymentAmount.toString());
request.setLklOrgNo(orgCode);
@@ -1776,7 +1793,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
lklOrderSeparate.setMerchant_no(merchantNo);
lklOrderSeparate.setLog_no(request.getLogNo());
lklOrderSeparate.setLog_date(request.getLogDate());
- lklOrderSeparate.setOrder_id(order.getOrder_id());
+ lklOrderSeparate.setOrder_id(shopOrderLkl.getOrder_id());
lklOrderSeparate.setTotal_amt(request.getTotalAmt());
lklOrderSeparate.setNotify_url(request.getNotifyUrl());
lklOrderSeparate.setLkl_org_no(request.getLklOrgNo());
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderSeparateServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderSeparateServiceImpl.java
index d285873e..d86b7ce8 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderSeparateServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklOrderSeparateServiceImpl.java
@@ -8,6 +8,7 @@
package com.suisung.mall.shop.lakala.service.impl;
+import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.suisung.mall.common.modules.lakala.LklOrderSeparate;
@@ -17,6 +18,8 @@ import com.suisung.mall.shop.lakala.service.LklOrderSeparateService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
+import java.util.List;
+
@Slf4j
@Service
public class LklOrderSeparateServiceImpl extends BaseServiceImpl implements LklOrderSeparateService {
@@ -47,4 +50,35 @@ public class LklOrderSeparateServiceImpl extends BaseServiceImpl list = list(new QueryWrapper()
+ .eq("log_no", logNo)
+ .eq("out_separate_no", outSeparateNo));
+
+ if (CollUtil.isEmpty(list)) {
+ log.info("未找到记录:logNo={}, outSeparateNo={}", logNo, outSeparateNo);
+ return null;
+ }
+
+ return list.get(0);
+ } catch (Exception e) {
+ log.error("查询记录时发生异常:logNo={}, outSeparateNo={}, 异常信息={}", logNo, outSeparateNo, e.getMessage(), e);
+ return null;
+ }
+ }
}
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/admin/ShopOrderReturnController.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/admin/ShopOrderReturnController.java
index 7e88f609..4964d0fa 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/admin/ShopOrderReturnController.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/controller/admin/ShopOrderReturnController.java
@@ -113,7 +113,7 @@ public class ShopOrderReturnController extends BaseControllerImpl {
return CommonResult.success(shopOrderReturnService.refund(return_id));
}
- @ApiOperation(value = "确认收货", notes = "确认收货")
+ @ApiOperation(value = "退单审核", notes = "退单审核")
@RequestMapping(value = "/receive", method = RequestMethod.POST)
public CommonResult receive(@RequestParam(name = "return_id") String return_id) {
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
index f6ac6ef8..dd0e9f53 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderBaseServiceImpl.java
@@ -80,6 +80,7 @@ import com.suisung.mall.shop.invoicing.service.InvoicingCustomerBaseService;
import com.suisung.mall.shop.invoicing.service.InvoicingStockBillItemService;
import com.suisung.mall.shop.invoicing.service.InvoicingStockBillService;
import com.suisung.mall.shop.invoicing.service.InvoicingWarehouseBaseService;
+import com.suisung.mall.shop.lakala.service.LakalaApiService;
import com.suisung.mall.shop.message.service.MqMessageService;
import com.suisung.mall.shop.message.service.ShopMessageTemplateService;
import com.suisung.mall.shop.message.vo.MqMessageVo;
@@ -292,6 +293,10 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl cbQueryWrapper = new QueryWrapper<>();
cbQueryWrapper.in("order_id", order_ids);
ShopOrderCb shopOrderCb = new ShopOrderCb();
@@ -4743,6 +4749,7 @@ public class ShopOrderBaseServiceImpl extends BaseServiceImpl retOrderSeparateRet = lakalaApiService.innerDoOrderSeparate(order_row.getOrder_id(), Convert.toStr(order_row.getOrder_state_id()));
+ if (!retOrderSeparateRet.getFirst()) {
+ throw new ApiException(I18nUtil._("平台或代理商分账失败: " + retOrderSeparateRet.getSecond()));
+ }
+
// 统计总营业额
ShopStoreAnalytics analytics_row = shopStoreAnalyticsService.get(store_id);
BigDecimal order_payment_amount = order_row.getOrder_payment_amount();
diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLogisticsServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLogisticsServiceImpl.java
index 7d1dae64..3f15a1d9 100644
--- a/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLogisticsServiceImpl.java
+++ b/mall-shop/src/main/java/com/suisung/mall/shop/order/service/impl/ShopOrderLogisticsServiceImpl.java
@@ -27,7 +27,9 @@ import com.suisung.mall.shop.order.mapper.ShopOrderLogisticsMapper;
import com.suisung.mall.shop.order.service.*;
import com.suisung.mall.shop.store.service.ShopStoreExpressLogisticsService;
import com.suisung.mall.shop.store.service.ShopStoreShippingAddressService;
+import com.suisung.mall.shop.wechat.service.WxOrderShippingService;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -81,6 +83,10 @@ public class ShopOrderLogisticsServiceImpl extends BaseServiceImpl辅助资料->发货地址!"));
}
+
// todo 添加发货通知
+
+ // 上传发货信息到微信
+ if (order_info_row != null) {
+ //配送方式(ENUM):1-快递配送(运费 10 元);5-自提;10-快递;16-同城配送;
+ Integer deliveryType = order_info_row.getDelivery_type_id();
+ //订单种类(ENUM): 1201-实物 ; 1202-虚拟 ; 1203-电子卡券 ; 1204-外卖订单
+ Integer kindId = order_info_row.getKind_id();
+ //物流模式,发货方式枚举值:1、实体物流配送采用快递公司进行实体物流配送形式 2、同城配送 3、虚拟商品,虚拟商品,例如话费充值,点卡等,无实体配送形式 4、用户自提
+ Integer logisticsType = 1;
+ if (kindId != null && (kindId.equals(1202) || kindId.equals(1203))) {
+ logisticsType = 3;
+ }
+
+ if (deliveryType != null && deliveryType.equals(5)) {
+ logisticsType = 4;
+ }
+
+ // 上传发货信息到微信
+ wxOrderShippingService.uploadShippingInfoToWx(logisticsType, orderId);
+ }
+
}
return CommonResult.success();