diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/EsignPlatformInfoService.java b/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/EsignPlatformInfoService.java index 80582157..dc2e0217 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/EsignPlatformInfoService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/EsignPlatformInfoService.java @@ -27,12 +27,12 @@ public interface EsignPlatformInfoService { EsignPlatformInfo getDistributorInfoById(Long id); /** - * 根据ID获取代理商信息 + * 根据入驻编号获取平台和代理商信息 * - * @param ids + * @param mchId * @return */ - List getDistributorAndPlatformByIds(Long... ids); + List getDistributorAndPlatformByIds(Long mchId); /** * 根据分类和营业执照号获取平台方信息 @@ -57,4 +57,20 @@ public interface EsignPlatformInfoService { * @return */ Pair getEsignPlatformMobileAndLicenseNumber(); + + /** + * 根据入驻编号获取商户的二级代理 + * + * @param mchId + * @return + */ + EsignPlatformInfo getMch2ndAgent(Long mchId); + + /** + * 根据入驻编号获取商户的二级代理(收运费的代理商) + * + * @param mchId + * @return + */ + EsignPlatformInfo getMch2ndAgentWithShippingFee(Long mchId); } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/impl/EsignPlatformInfoServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/impl/EsignPlatformInfoServiceImpl.java index 9aeed464..8c259542 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/impl/EsignPlatformInfoServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/esign/service/impl/EsignPlatformInfoServiceImpl.java @@ -13,18 +13,30 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.modules.esign.EsignPlatformInfo; +import com.suisung.mall.common.modules.store.ShopMchEntry; +import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.common.utils.phone.PhoneNumberUtils; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.esign.mapper.EsignPlatformInfoMapper; import com.suisung.mall.shop.esign.service.EsignPlatformInfoService; +import com.suisung.mall.shop.store.service.ShopMchEntryService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Lazy; import org.springframework.data.util.Pair; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; +import javax.annotation.Resource; import java.util.List; +@Slf4j @Service public class EsignPlatformInfoServiceImpl extends BaseServiceImpl implements EsignPlatformInfoService { + + @Lazy + @Resource + private ShopMchEntryService shopMchEntryService; + /** * 根据ID获取代理商信息 * @@ -51,34 +63,52 @@ public class EsignPlatformInfoServiceImpl extends BaseServiceImpl 平台方和代理商信息列表 */ @Override - public List getDistributorAndPlatformByIds(Long... ids) { + public List getDistributorAndPlatformByIds(Long mchId) { + // 获取平台方记录 QueryWrapper queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("status", CommonConstant.Enable).orderByAsc("level"); - if (ids != null && ids.length > 0) { - queryWrapper.and(wrapper -> { - wrapper.in("id", ids).gt("level", 0); - wrapper.or(wrapperOr -> { - wrapperOr.eq("level", 0); - }); - }); - } else { - queryWrapper.eq("level", 0); - } + queryWrapper.eq("level", 0) + .eq("status", CommonConstant.Enable) + .orderByAsc("level"); List esignPlatformInfos = list(queryWrapper); if (CollectionUtil.isEmpty(esignPlatformInfos)) { + log.error("[获取平台和代理商信息] 未找到平台方记录"); return null; } + // 获取商户的二级代理 + EsignPlatformInfo agent2nd = getMch2ndAgent(mchId); + if (agent2nd == null) { + return esignPlatformInfos; + } + + esignPlatformInfos.add(agent2nd); + + // 获取一级代理(如果存在) + if (CheckUtil.isEmpty(agent2nd.getParent_id())) { + return esignPlatformInfos; + } + + try { + EsignPlatformInfo agent1st = get(agent2nd.getParent_id()); + if (agent1st != null) { + esignPlatformInfos.add(agent1st); + } + } catch (Exception e) { + log.error("[获取平台和代理商信息] 获取一级代理商时发生异常,parent_id: {}", agent2nd.getParent_id(), e); + } + return esignPlatformInfos; } + /** * 根据分类和营业执照号获取平台方信息 * @@ -148,4 +178,98 @@ public class EsignPlatformInfoServiceImpl extends BaseServiceImpl queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("level", CommonConstant.Agent_Level_2nd) + .eq("status", CommonConstant.Enable) + .orderByAsc("id"); + + // 优先使用指定的分销商ID查询,否则使用区域信息查询 + if (CheckUtil.isNotEmpty(shopMchEntry.getDistributor_id())) { + queryWrapper.eq("id", shopMchEntry.getDistributor_id()); + log.debug("[获取二级代理] 使用指定分销商ID查询,distributorId={}", shopMchEntry.getDistributor_id()); + } + + EsignPlatformInfo result = findOne(queryWrapper); + if (result == null) { + if (StrUtil.isNotBlank(shopMchEntry.getStore_district())) { + // 运费代理商 + queryWrapper.clear(); + queryWrapper.eq("level", CommonConstant.Agent_Level_2nd) + .eq("status", CommonConstant.Enable) + .eq("license_district_id", shopMchEntry.getStore_district()) + .gt("shipping_fee", 0).ne("supplier_id", "") + .orderByAsc("id"); + log.debug("[获取二级代理] 使用区域信息查询,districtId={}", shopMchEntry.getStore_district()); + + result = findOne(queryWrapper); + } + } + + if (result == null) { + log.info("[获取二级代理] 未找到匹配的二级代理信息,mchId={}", mchId); + } else { + log.debug("[获取二级代理] 成功获取二级代理信息,mchId={}, agentId={}", mchId, result.getId()); + } + + return result; + + } catch (Exception e) { + log.error("[获取二级代理] 查询过程中发生异常,mchId={}", mchId, e); + return null; + } + } + + /** + * 根据入驻编号获取商户的二级代理(收运费的代理商) + * + * @param mchId 商户入驻编号 + * @return EsignPlatformInfo 收运费的二级代理信息,未找到或不满足条件时返回null + */ + @Override + public EsignPlatformInfo getMch2ndAgentWithShippingFee(Long mchId) { + // 获取商户的二级代理信息 + EsignPlatformInfo esignPlatformInfo = getMch2ndAgent(mchId); + if (esignPlatformInfo == null) { + return null; + } + + // 检查该代理是否具备收取运费的条件:设置了运费且有供应商ID + if (CheckUtil.isNotEmpty(esignPlatformInfo.getShipping_fee()) && + StrUtil.isNotBlank(esignPlatformInfo.getSupplier_id())) { + return esignPlatformInfo; + } + + return null; + } + } diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerReceiverService.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerReceiverService.java index c7e6d88a..61ec9d94 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerReceiverService.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/LklLedgerReceiverService.java @@ -43,20 +43,19 @@ public interface LklLedgerReceiverService extends IBaseServicedistributor_id) + if (esignPlatformInfoService.getMch2ndAgent(shopMchEntry.getId()) != null) { ecParams.put("E1", platformName + "和代理商"); ecParams.put("E2", "《平台商户入驻服务框架协议》和《小发同城服务费结算》"); } else { @@ -1189,7 +1193,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { Long receiverCnt = lklLedgerReceiverService.countByCondition("", "", shopMchEntry.getDistributor_id()); if (receiverCnt <= 0) { // 1:新增一个接收方记录,起码要一个平台方,代理商根据入驻信息新增 - Boolean success = lklLedgerReceiverService.innerApplyLedgerReceiver(shopMchEntry.getId(), merCupNo, shopMchEntry.getDistributor_id()); + Boolean success = lklLedgerReceiverService.innerApplyLedgerReceiver(shopMchEntry.getId(), merCupNo); if (!success) { return CommonResult.failed("申请分账接收方失败"); } @@ -2564,7 +2568,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { } return Pair.of(false, "订单可分账金额低于1分钱"); } - + Integer merchantAmount = lklSeparateDTO.getMchAmount(); Integer platformAmount = lklSeparateDTO.getPlatAmount(); Integer agent1stAmount = lklSeparateDTO.getAgent1stAmount(); diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java index 0fe18ce6..2832b90a 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/lakala/service/impl/LklLedgerReceiverServiceImpl.java @@ -32,7 +32,6 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.ArrayList; import java.util.List; @Slf4j @@ -137,21 +136,19 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl ids = new ArrayList<>(); - if (distributorId != null && distributorId > 0) { - ids.add(distributorId); - } + public JSONArray buildApplyLedgerReceiverReqParams(Long mchId) { + // 获取平台记录和代理商记录 - List esignPlatformInfoList = esignPlatformInfoService.getDistributorAndPlatformByIds(ids.toArray(new Long[0])); + List esignPlatformInfoList = esignPlatformInfoService.getDistributorAndPlatformByIds(mchId); if (CollectionUtil.isEmpty(esignPlatformInfoList)) { return null; } + JSONArray reqParams = new JSONArray(); for (EsignPlatformInfo esignPlatformInfo : esignPlatformInfoList) { JSONObject reqParam = new JSONObject(); @@ -216,14 +213,14 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl