From 52ff9dabe0dfcdd23f0201ff07bebe9881ce6131 Mon Sep 17 00:00:00 2001 From: Jack <46790855@qq.com> Date: Mon, 22 Dec 2025 22:31:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E5=86=85=E9=83=A8=E9=85=8D?= =?UTF-8?q?=E9=80=81=E8=B4=B9=E8=AE=A1=E7=AE=97=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/modules/store/ShopMchEntry.java | 3 + .../controller/mobile/LakalaController.java | 2 +- .../lakala/service/impl/LklTkServiceImpl.java | 10 +- .../service/impl/SFExpressApiServiceImpl.java | 4 + ...StoreSameCityTransportBaseServiceImpl.java | 313 +++++++++--------- ...ShopStoreSameCityTransportServiceImpl.java | 22 +- 6 files changed, 188 insertions(+), 166 deletions(-) diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopMchEntry.java b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopMchEntry.java index bc774c98..fafbcd3a 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopMchEntry.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/store/ShopMchEntry.java @@ -258,6 +258,9 @@ public class ShopMchEntry implements Serializable { @ApiModelProperty(value = "是否绑定分账接收方:1-是;2-否;") private Integer has_bind_receiver; + @ApiModelProperty(value = "父入驻id(总店入驻id)") + private Integer parent_id; + @ApiModelProperty(value = "该商家入驻记录是否有效,0:无效,1:有效") private Integer status; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java index 4df37850..39ddd481 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/controller/mobile/LakalaController.java @@ -99,7 +99,7 @@ public class LakalaController extends BaseControllerImpl { // return lakalaApiService.tradeQuery(paramsJSON.getInt("storeId"), paramsJSON.getStr("orderId")); - return lklTkService.getLklShopId("8226330541100J8", ""); + return lklTkService.openMerchantAddTerm("8226330541100J8"); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java index d574e9af..3c0cf7bc 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklTkServiceImpl.java @@ -827,18 +827,18 @@ public class LklTkServiceImpl { String reviewPass = dataJSON.getStr("reviewPass"); String merCupNo = dataJSON.getStr("externalCustomerNo"); //拉卡拉外部商户号 String merInnerNo = dataJSON.getStr("customerNo"); //拉卡拉内部商户号 - String termNos = dataJSON.getStr("termNos"); //拉卡拉分配的业务终端号 + String termNo = dataJSON.getStr("termNo"); //拉卡拉分配的业务终端号 logger.debug("解析通知数据完成 - 审核状态: {},外部商户号: {},内部商户号: {},终端号: {}", - reviewPass, merCupNo, merInnerNo, termNos); + reviewPass, merCupNo, merInnerNo, termNo); // 合并参数校验 if (dataJSON.isEmpty() || StrUtil.isBlank(reviewPass) || StrUtil.isBlank(merCupNo) || StrUtil.isBlank(merInnerNo) || - StrUtil.isBlank(termNos)) { - logger.warn("拉卡拉进件异步通知参数解析出错,数据: {}", data); + StrUtil.isBlank(termNo)) { + logger.warn("拉卡拉改进异步通知参数解析出错,数据: {}", data); return new JSONObject().set("code", "500").set("message", "参数解析出错"); } @@ -869,7 +869,7 @@ public class LklTkServiceImpl { // 更新已进件成功的商户号和设备号 logger.debug("开始更新商户拉卡拉审核状态"); Boolean success = shopMchEntryService.updateMerchEntryLklAuditStatusByLklMerCupNo( - merInnerNo, merCupNo, termNos, CommonConstant.Enable, null, data); + merInnerNo, merCupNo, termNo, CommonConstant.Enable, null, data); if (!Boolean.TRUE.equals(success)) { logger.error("拉卡拉进件审核通过但更新商户号失败,商户ID: {}", mchId); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java index 769c80ef..111c21c7 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/sfexpress/service/impl/SFExpressApiServiceImpl.java @@ -1422,14 +1422,17 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { if (!shopOrderBase.getOperate_flag().equals("0")) { return CommonResult.failed("该状态不允许发货操作"); } + Pair pair = wxOrderShippingService.uploadShippingInfoToWx(2, shopOrderBase.getOrder_id()); if (pair.getFirst()) { Integer orderStatus = StateCode.ORDER_STATE_SHIPPED;//已发货 Integer orderIsOutStatus = StateCode.ORDER_PICKING_STATE_YES; // 已出库 shopOrderInfoService.changeOrderStatus(orderId, orderStatus, orderIsOutStatus, 0); + //完成订单后修改订单异常操作流程进入完成订单环节 shopOrderBase.setOperate_flag("1"); shopOrderBaseService.updateById(shopOrderBase); + //出库扣减思迅库存star // RMK 第三方数据同步相关:redis 给这个商品减去对应的库存 QueryWrapper itemQueryWrapper = new QueryWrapper<>(); @@ -1438,6 +1441,7 @@ public class SFExpressApiServiceImpl implements SFExpressApiService { if (picking(order_item_rows)) { logger.info("自行发货商品扣减库存成功"); } + if (!order_item_rows.isEmpty()) { for (ShopOrderItem shopOrderItem : order_item_rows) { Map stockDeltaMap = new HashMap<>(); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportBaseServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportBaseServiceImpl.java index b31e4c9d..60d7f719 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportBaseServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportBaseServiceImpl.java @@ -889,162 +889,171 @@ public class ShopStoreSameCityTransportBaseServiceImpl extends BaseServiceImpl transportList = shopStoreSameCityTransportService.selectShopStoreSameCityTransportList(Convert.toLong(storeId)); - - if (CollUtil.isEmpty(transportList)) { - // 没有配送范围规则的时候,直接以基础配送费来配送 - return deliveryBaseFee.multiply(BigDecimal.valueOf(100)).intValue(); - } - - // 判断配送范围和起送金额条件 - String canNotDeliveryReason = ""; - boolean canDelivery = false; - - // 优先处理距离和金额都满足的规则 - for (ShopStoreSameCityTransport transport : transportList) { - // 判断订单距离是否在配送范围内 - if (transport.getMax_delivery_radius() >= distance) { - // 距离在配送范围内,判断金额是否符合起配金额额度 - boolean moneyPassed = false; - if (CommonConstant.Delivery_Amount_Comput_Type_Original.equals(transport.getMin_delivery_amount_type())) { - moneyPassed = orderProductAmount != null && transport.getMin_delivery_amount().compareTo(orderProductAmount) <= 0; - } else if (CommonConstant.Delivery_Amount_Comput_Type_Discounted.equals(transport.getMin_delivery_amount_type())) { - moneyPassed = orderDiscountAmount != null && transport.getMin_delivery_amount().compareTo(orderDiscountAmount) <= 0; - } else if (CommonConstant.Delivery_Amount_Comput_Type_Payment.equals(transport.getMin_delivery_amount_type())) { - moneyPassed = orderPayAmount != null && transport.getMin_delivery_amount().compareTo(orderPayAmount) <= 0; - } - - // 距离和金额都满足条件 - if (moneyPassed) { - canDelivery = true; - break; - } - } - } - - // 如果没有找到完全满足条件的规则,再详细检查找出失败原因 - if (!canDelivery) { - for (ShopStoreSameCityTransport transport : transportList) { - // 判断订单距离是否在配送范围内 - if (transport.getMax_delivery_radius() < distance) { - // 记录距离不满足的原因 - canNotDeliveryReason = storeName + "的订单不在配送范围内,订单无法配送。"; - } else { - // 距离在配送范围内,判断金额是否符合起配金额额度 - if (CommonConstant.Delivery_Amount_Comput_Type_Original.equals(transport.getMin_delivery_amount_type())) { - if (orderProductAmount != null && transport.getMin_delivery_amount().compareTo(orderProductAmount) > 0) { - BigDecimal diffMoney = transport.getMin_delivery_amount().subtract(orderProductAmount); - canNotDeliveryReason = String.format("%s商品原价金额还差%.2f元,才满足配送条件,请检查订单。", storeName, diffMoney); - } else { - canDelivery = true; - break; - } - } else if (CommonConstant.Delivery_Amount_Comput_Type_Discounted.equals(transport.getMin_delivery_amount_type())) { - if (orderDiscountAmount != null && transport.getMin_delivery_amount().compareTo(orderDiscountAmount) > 0) { - BigDecimal diffMoney = transport.getMin_delivery_amount().subtract(orderDiscountAmount); - canNotDeliveryReason = String.format("%s订单折后金额还差%.2f元,才满足配送条件,请检查订单。", storeName, diffMoney); - } else { - canDelivery = true; - break; - } - } else if (CommonConstant.Delivery_Amount_Comput_Type_Payment.equals(transport.getMin_delivery_amount_type())) { - if (orderPayAmount != null && transport.getMin_delivery_amount().compareTo(orderPayAmount) > 0) { - BigDecimal diffMoney = transport.getMin_delivery_amount().subtract(orderPayAmount); - canNotDeliveryReason = String.format("%s订单应支付金额还差%.2f元,才满足配送条件,请检查订单。", storeName, diffMoney); - } else { - canDelivery = true; - break; - } - } - } - } - } - - // 如果仍然不能配送,记录日志并返回0 - if (!canDelivery) { - logger.warn(canNotDeliveryReason.isEmpty() ? (storeName + "订单不在配送范围内或未达起送金额,请检查!") : canNotDeliveryReason); - return 0; - } - - // 额外配送费计算 - // 每增加一个距离累加运费 - if (transportBase.getDistance_increase_km() != null && transportBase.getDistance_increase_fee() != null && distance > transportBase.getDistance_base() * 1000) { - // 实际配送距离超出基础距离,单位km - BigDecimal diffDistanceM = CommonUtil.DecimalRoundHalfUp(BigDecimal.valueOf(distance - transportBase.getDistance_base() * 1000).divide(BigDecimal.valueOf(1000))); - // 倍数 - BigDecimal times = BigDecimal.ZERO; - if (transportBase.getDistance_increase_km() > 0 && diffDistanceM.intValue() > transportBase.getDistance_increase_km()) { - // 末尾非零进位,比如:2.1将是3, 2.0将是2,2.001将是3 - times = NumberUtil.div(diffDistanceM, transportBase.getDistance_increase_km()).setScale(0, RoundingMode.UP); - } - - // 超过基础运费距离后,累加上运费 - deliveryBaseFee = deliveryBaseFee.add(transportBase.getDistance_increase_fee().multiply(times)); - } - - // 每增加一个重量累加运费(重量暂时忽略,配置的时候设置0) - if (transportBase.getWeight_increase_kg() != null && transportBase.getWeight_increase_fee() != null && orderWeightGram != null && orderWeightGram > transportBase.getWeight_base() * 1000) { - // 实际配送重量超出基础重量,单位kg - BigDecimal diffWeightKg = CommonUtil.DecimalRoundHalfUp(BigDecimal.valueOf(orderWeightGram - transportBase.getWeight_base() * 1000).divide(BigDecimal.valueOf(1000))); - // 倍数 - BigDecimal times = BigDecimal.ZERO; - if (transportBase.getWeight_increase_kg() > 0 && diffWeightKg.intValue() > transportBase.getWeight_increase_kg()) { - // 末尾非零进位,比如:2.1将是3, 2.0将是2,2.001将是3 - times = NumberUtil.div(diffWeightKg, transportBase.getWeight_increase_kg()).setScale(0, RoundingMode.UP); // 修正:应该除以weight_increase_kg而不是distance_increase_km - } - - deliveryBaseFee = deliveryBaseFee.add(transportBase.getWeight_increase_fee().multiply(times)); - } - - // 返回单位为分的配送费 - return deliveryBaseFee.multiply(BigDecimal.valueOf(100)).intValue(); +// 参数校验 +// if (storeId == null || orderLongitude == null || orderLatitude == null || storeId <= 0) { +// logger.warn("同城配送缺少必要参数,无法计算配送费。"); +// return 0; +// } +// +// // 获取店铺基本信息 +// ShopStoreBase storeBase = shopStoreBaseService.get(storeId); +// if (storeBase == null) { +// logger.warn("同城配送缺少店铺基本信息,无法计算配送费。"); +// return 0; +// } +// +// String storeName = storeBase.getStore_name(); +// String storeLng = storeBase.getStore_longitude(); +// String storeLat = storeBase.getStore_latitude(); +// if (StrUtil.isBlank(storeLng) || StrUtil.isBlank(storeLat)) { +// logger.warn("无法获取{}的具体位置,请联系商家。", storeName); +// return 0; +// } +// +// // 获取平台的基础运费设置记录 +// ShopStoreSameCityTransportBase transportBase = getShopStoreSameCityTransportBaseById(Convert.toLong(storeId), CommonConstant.Enable); +// if (transportBase == null) { +// logger.warn("商家{}尚未完成同城配送设置,无法计算配送费。", storeName); +// return 0; +// } +// +// // 设置默认值 +// if (transportBase.getDistance_base() == null) { +// transportBase.setDistance_base(0); +// } +// if (transportBase.getWeight_base() == null) { +// transportBase.setWeight_base(0); +// } +// if (transportBase.getDelivery_base_fee() == null) { +// transportBase.setDelivery_base_fee(BigDecimal.ZERO); +// } +// +// // 计算两点的距离(单位米) +// Double distanceD = PositionUtil.getDistance1(Convert.toDouble(storeLng), Convert.toDouble(storeLat), Convert.toDouble(orderLongitude), Convert.toDouble(orderLatitude)); +// Integer distance = (distanceD != null) ? distanceD.intValue() : 0; +// +// // 基础配送费计算 +// BigDecimal deliveryBaseFee = Convert.toBigDecimal(transportBase.getDelivery_base_fee(), BigDecimal.ZERO); +// +// // 获取运费配送范围信息 +// List transportList = shopStoreSameCityTransportService.selectShopStoreSameCityTransportList(Convert.toLong(storeId)); +// +// if (CollUtil.isEmpty(transportList)) { +// // 没有配送范围规则的时候,直接以基础配送费来配送 +// return deliveryBaseFee.multiply(BigDecimal.valueOf(100)).intValue(); +// } +// +// // 判断配送范围和起送金额条件 +// String canNotDeliveryReason = ""; +// boolean canDelivery = false; +// +// // 优先处理距离和金额都满足的规则 +// for (ShopStoreSameCityTransport transport : transportList) { +// // 判断订单距离是否在配送范围内 +// if (transport.getMax_delivery_radius() >= distance) { +// // 距离在配送范围内,判断金额是否符合起配金额额度 +// boolean moneyPassed = false; +// if (CommonConstant.Delivery_Amount_Comput_Type_Original.equals(transport.getMin_delivery_amount_type())) { +// moneyPassed = orderProductAmount != null && transport.getMin_delivery_amount().compareTo(orderProductAmount) <= 0; +// } else if (CommonConstant.Delivery_Amount_Comput_Type_Discounted.equals(transport.getMin_delivery_amount_type())) { +// moneyPassed = orderDiscountAmount != null && transport.getMin_delivery_amount().compareTo(orderDiscountAmount) <= 0; +// } else if (CommonConstant.Delivery_Amount_Comput_Type_Payment.equals(transport.getMin_delivery_amount_type())) { +// moneyPassed = orderPayAmount != null && transport.getMin_delivery_amount().compareTo(orderPayAmount) <= 0; +// } +// +// // 距离和金额都满足条件 +// if (moneyPassed) { +// canDelivery = true; +// break; +// } +// } +// } +// +// // 如果没有找到完全满足条件的规则,再详细检查找出失败原因 +// if (!canDelivery) { +// for (ShopStoreSameCityTransport transport : transportList) { +// // 判断订单距离是否在配送范围内 +// if (transport.getMax_delivery_radius() < distance) { +// // 记录距离不满足的原因 +// canNotDeliveryReason = storeName + "的订单不在配送范围内,订单无法配送。"; +// } else { +// // 距离在配送范围内,判断金额是否符合起配金额额度 +// if (CommonConstant.Delivery_Amount_Comput_Type_Original.equals(transport.getMin_delivery_amount_type())) { +// if (orderProductAmount != null && transport.getMin_delivery_amount().compareTo(orderProductAmount) > 0) { +// BigDecimal diffMoney = transport.getMin_delivery_amount().subtract(orderProductAmount); +// canNotDeliveryReason = String.format("%s商品原价金额还差%.2f元,才满足配送条件,请检查订单。", storeName, diffMoney); +// } else { +// canDelivery = true; +// break; +// } +// } else if (CommonConstant.Delivery_Amount_Comput_Type_Discounted.equals(transport.getMin_delivery_amount_type())) { +// if (orderDiscountAmount != null && transport.getMin_delivery_amount().compareTo(orderDiscountAmount) > 0) { +// BigDecimal diffMoney = transport.getMin_delivery_amount().subtract(orderDiscountAmount); +// canNotDeliveryReason = String.format("%s订单折后金额还差%.2f元,才满足配送条件,请检查订单。", storeName, diffMoney); +// } else { +// canDelivery = true; +// break; +// } +// } else if (CommonConstant.Delivery_Amount_Comput_Type_Payment.equals(transport.getMin_delivery_amount_type())) { +// if (orderPayAmount != null && transport.getMin_delivery_amount().compareTo(orderPayAmount) > 0) { +// BigDecimal diffMoney = transport.getMin_delivery_amount().subtract(orderPayAmount); +// canNotDeliveryReason = String.format("%s订单应支付金额还差%.2f元,才满足配送条件,请检查订单。", storeName, diffMoney); +// } else { +// canDelivery = true; +// break; +// } +// } +// } +// } +// } +// +// // 如果仍然不能配送,记录日志并返回0 +// if (!canDelivery) { +// logger.warn(canNotDeliveryReason.isEmpty() ? (storeName + "订单不在配送范围内或未达起送金额,请检查!") : canNotDeliveryReason); +// return 0; +// } +// +// // 额外配送费计算 +// // 每增加一个距离累加运费 +// if (transportBase.getDistance_increase_km() != null && transportBase.getDistance_increase_fee() != null && distance > transportBase.getDistance_base() * 1000) { +// // 实际配送距离超出基础距离,单位km +// BigDecimal diffDistanceM = CommonUtil.DecimalRoundHalfUp(BigDecimal.valueOf(distance - transportBase.getDistance_base() * 1000).divide(BigDecimal.valueOf(1000))); +// // 倍数 +// BigDecimal times = BigDecimal.ZERO; +// if (transportBase.getDistance_increase_km() > 0 && diffDistanceM.intValue() > transportBase.getDistance_increase_km()) { +// // 末尾非零进位,比如:2.1将是3, 2.0将是2,2.001将是3 +// times = NumberUtil.div(diffDistanceM, transportBase.getDistance_increase_km()).setScale(0, RoundingMode.UP); +// } +// +// // 超过基础运费距离后,累加上运费 +// deliveryBaseFee = deliveryBaseFee.add(transportBase.getDistance_increase_fee().multiply(times)); +// } +// +// // 每增加一个重量累加运费(重量暂时忽略,配置的时候设置0) +// if (transportBase.getWeight_increase_kg() != null && transportBase.getWeight_increase_fee() != null && orderWeightGram != null && orderWeightGram > transportBase.getWeight_base() * 1000) { +// // 实际配送重量超出基础重量,单位kg +// BigDecimal diffWeightKg = CommonUtil.DecimalRoundHalfUp(BigDecimal.valueOf(orderWeightGram - transportBase.getWeight_base() * 1000).divide(BigDecimal.valueOf(1000))); +// // 倍数 +// BigDecimal times = BigDecimal.ZERO; +// if (transportBase.getWeight_increase_kg() > 0 && diffWeightKg.intValue() > transportBase.getWeight_increase_kg()) { +// // 末尾非零进位,比如:2.1将是3, 2.0将是2,2.001将是3 +// times = NumberUtil.div(diffWeightKg, transportBase.getWeight_increase_kg()).setScale(0, RoundingMode.UP); +// } +// +// deliveryBaseFee = deliveryBaseFee.add(transportBase.getWeight_increase_fee().multiply(times)); +// } +// +// // 返回单位为分的配送费 +// return deliveryBaseFee.multiply(BigDecimal.valueOf(100)).intValue(); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportServiceImpl.java index fc431599..a46c4082 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/store/service/impl/ShopStoreSameCityTransportServiceImpl.java @@ -10,6 +10,7 @@ package com.suisung.mall.shop.store.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.convert.Convert; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.suisung.mall.common.api.CommonResult; @@ -45,13 +46,16 @@ public class ShopStoreSameCityTransportServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("transport_id", transportId); - queryWrapper.eq("store_id", storeId); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(ShopStoreSameCityTransport::getTransport_id, transportId); + if (storeId != null && storeId > 0) { + queryWrapper.eq(ShopStoreSameCityTransport::getStore_id, storeId); + } ShopStoreSameCityTransport record = getOne(queryWrapper); if (record == null) {