diff --git a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerReceiver.java b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerReceiver.java index 1beb64f3..abeb6f4f 100644 --- a/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerReceiver.java +++ b/mall-common/src/main/java/com/suisung/mall/common/modules/lakala/LklLedgerReceiver.java @@ -41,6 +41,7 @@ public class LklLedgerReceiver implements Serializable { private String contact_mobile; private String license_no; private String license_name; + private String license_district_id; private String legal_person_name; private String legal_person_certificate_type; private String legal_person_certificate_no; @@ -55,6 +56,8 @@ public class LklLedgerReceiver implements Serializable { private String attach_list; private String settle_type; private Long platform_id; + private Long parent_id; + private String supplier_id; private Integer level; private BigDecimal split_ratio; private Integer shipping_fee; diff --git a/mall-shop/src/main/java/com/suisung/mall/shop/esign/controller/admin/EsignController.java b/mall-shop/src/main/java/com/suisung/mall/shop/esign/controller/admin/EsignController.java index e71b6a37..620147fd 100644 --- a/mall-shop/src/main/java/com/suisung/mall/shop/esign/controller/admin/EsignController.java +++ b/mall-shop/src/main/java/com/suisung/mall/shop/esign/controller/admin/EsignController.java @@ -44,7 +44,7 @@ public class EsignController extends BaseControllerImpl { @RequestMapping(value = "/testcase", method = RequestMethod.POST) public Object testCase() { //return esignContractFillingFileService.fillDocTemplate("13128997057", "91450881MADEQ92533"); - return esignPlatformInfoService.getDistributorAndPlatformByIds(1L); + return esignPlatformInfoService.selectAgentAndPlatformByMchId(1L); } @ApiOperation(value = "管理员发起签署电子合同流程", notes = "基于文件发起签署电子合同") 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 dc2e0217..208ca9c5 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 @@ -32,7 +32,7 @@ public interface EsignPlatformInfoService { * @param mchId * @return */ - List getDistributorAndPlatformByIds(Long mchId); + List selectAgentAndPlatformByMchId(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 8c259542..9776561f 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 @@ -70,7 +70,7 @@ public class EsignPlatformInfoServiceImpl extends BaseServiceImpl 平台方和代理商信息列表 */ @Override - public List getDistributorAndPlatformByIds(Long mchId) { + public List selectAgentAndPlatformByMchId(Long mchId) { // 获取平台方记录 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("level", 0) 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 61ec9d94..00666ce8 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 @@ -99,4 +99,20 @@ public interface LklLedgerReceiverService extends IBaseService selectAgentAndPlatformByMchId(Long mchId); + + /** + * 根据入驻编号获取商户的二级代理接收方信息 + * + * @param mchId + * @return + */ + LklLedgerReceiver getMch2ndAgent(Long mchId); } 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 9716535f..5bfe15d0 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 @@ -1503,7 +1503,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { *

参考:https://o.lakala.com/#/home/document/detail?id=386 * 为商户绑定分账接收方,包括平台方和代理商(如有)。 * - * @param paramsJSON 包含绑定参数的JSON对象 {merCupNo} + * @param paramsJSON 包含绑定参数的JSON对象 {merCupNo, merInnerNo} * @return Pair对象,第一个元素表示操作是否成功,第二个元素为操作结果信息 */ public Pair innerApplyLedgerMerReceiverBind(JSONObject paramsJSON) { @@ -1532,6 +1532,8 @@ public class LakalaApiServiceImpl implements LakalaApiService { return Pair.of(false, "商户入驻记录不存在"); } + Long mchId = shopMchEntry.getId(); + // 进件记录 log.debug("开始查询分账业务申请记录,商户号: {}", merCupNo); LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByMerCupNo(merCupNo); @@ -1548,7 +1550,7 @@ public class LakalaApiServiceImpl implements LakalaApiService { // 分账接收方列表 log.debug("开始查询分账接收方列表"); - List receiverList = lklLedgerReceiverService.selectPlatformAnDistributorList(); + List receiverList = lklLedgerReceiverService.selectAgentAndPlatformByMchId(mchId); if (CollectionUtil.isEmpty(receiverList)) { log.warn("商家绑定分账接收方申请失败:分账接收方信息为空"); return Pair.of(false, "分账接收方信息为空"); @@ -1652,7 +1654,11 @@ public class LakalaApiServiceImpl implements LakalaApiService { paramsJSON.set("ret_url", retUrl); paramsJSON.set("remark", respJson.getStr("retMsg")); paramsJSON.set("platform_id", receiver.getPlatform_id()); - paramsJSON.set("mch_id", shopMchEntry.getId()); + paramsJSON.set("mch_id", mchId); + + paramsJSON.set("level", receiver.getLevel()); + paramsJSON.set("split_ratio", receiver.getSplit_ratio()); + paramsJSON.set("shipping_fee", receiver.getShipping_fee()); // 转换JSON键名格式并保存 String snakeJson = StringUtils.convertCamelToSnake(paramsJSON.toString()); 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 2832b90a..5f413f2f 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 @@ -19,6 +19,8 @@ import com.suisung.mall.common.api.ResultCode; import com.suisung.mall.common.constant.CommonConstant; import com.suisung.mall.common.modules.esign.EsignPlatformInfo; import com.suisung.mall.common.modules.lakala.LklLedgerReceiver; +import com.suisung.mall.common.modules.store.ShopMchEntry; +import com.suisung.mall.common.utils.CheckUtil; import com.suisung.mall.core.web.service.impl.BaseServiceImpl; import com.suisung.mall.shop.esign.service.EsignPlatformInfoService; import com.suisung.mall.shop.lakala.mapper.LklLedgerReceiverMapper; @@ -32,6 +34,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Collections; import java.util.List; @Slf4j @@ -143,7 +146,7 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl esignPlatformInfoList = esignPlatformInfoService.getDistributorAndPlatformByIds(mchId); + List esignPlatformInfoList = esignPlatformInfoService.selectAgentAndPlatformByMchId(mchId); if (CollectionUtil.isEmpty(esignPlatformInfoList)) { return null; } @@ -166,6 +169,11 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl selectAgentAndPlatformByMchId(Long mchId) { + // 获取平台方记录 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("level", 0) + .eq("status", CommonConstant.Enable).orderByAsc("id"); + + List list = list(queryWrapper); + if (CollectionUtil.isEmpty(list)) { + log.error("[获取平台和代理商信息] 未找到平台方记录, mchId={}", mchId); + return Collections.emptyList(); + } + + // 获取商户的二级代理 + LklLedgerReceiver agent2nd = getMch2ndAgent(mchId); + if (agent2nd == null) { + log.debug("[获取平台和代理商信息] 未找到二级代理商或无需二级代理商, mchId={}", mchId); + return list; + } + + list.add(agent2nd); + + // 获取一级代理(如果存在) + if (CheckUtil.isEmpty(agent2nd.getParent_id())) { + log.debug("[获取平台和代理商信息] 二级代理商无上级代理, mchId={}", mchId); + return list; + } + + try { + queryWrapper.clear(); + queryWrapper.eq("parent_id", agent2nd.getParent_id()) + .eq("status", CommonConstant.Enable) + .orderByAsc("id"); + LklLedgerReceiver agent1st = findOne(queryWrapper); + if (agent1st != null) { + list.add(agent1st); + } else { + log.warn("[获取平台和代理商信息] 未找到一级代理商, parent_id: {}, mchId: {}", agent2nd.getParent_id(), mchId); + } + } catch (Exception e) { + log.error("[获取平台和代理商信息] 获取一级代理商时发生异常,parent_id: {}, mchId: {}", agent2nd.getParent_id(), mchId, e); + } + + return list; + } + + /** + * 根据入驻编号获取商户的二级代理接收方信息 + * + * @param mchId + * @return + */ + @Override + public LklLedgerReceiver getMch2ndAgent(Long mchId) { + // 参数校验 + if (CheckUtil.isEmpty(mchId)) { + log.warn("[获取二级代理] 参数校验失败:商户入驻编号为空"); + return null; + } + + try { + // 获取商户入驻信息 + ShopMchEntry shopMchEntry = shopMchEntryService.shopMerchEntryById(mchId); + if (shopMchEntry == null) { + log.warn("[获取二级代理] 未找到商户入驻信息,mchId={}", mchId); + return null; + } + + // 检查是否有指定的分销商ID或区域信息 + if (CheckUtil.isEmpty(shopMchEntry.getDistributor_id()) && StrUtil.isBlank(shopMchEntry.getStore_district())) { + log.debug("[获取二级代理] 商户未指定分销商且无区域信息,mchId={}", mchId); + return null; + } + + // 构建查询条件 + QueryWrapper 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("platform_id", shopMchEntry.getDistributor_id()); + log.debug("[获取二级代理] 使用指定分销商ID查询,distributorId={}", shopMchEntry.getDistributor_id()); + } else 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()); + } + + LklLedgerReceiver result = findOne(queryWrapper); + + if (result == null) { + log.info("[获取二级代理] 未找到匹配的二级代理信息,mchId={}", mchId); + } else { + log.debug("[获取二级代理] 成功获取二级代理信息,receiverNo={}, id={}", result.getReceiver_no(), result.getId()); + } + + return result; + + } catch (Exception e) { + log.error("[获取二级代理] 查询过程中发生异常,mchId=" + mchId, e); + return null; + } + } } 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 474c0230..c9a6337a 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 @@ -365,7 +365,7 @@ public class LklTkServiceImpl { && !StrUtil.hasBlank(shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getLkl_term_no())) { // 已经进件过了,执行下一步操作 logger.info("商户已进件,执行后续操作,商户ID: {}", mchId); - registrationMerchantAfterHook(mchId, shopMchEntry.getLkl_mer_cup_no(), shopMchEntry.getDistributor_id()); + registrationMerchantAfterHook(mchId, shopMchEntry.getLkl_mer_cup_no()); return Pair.of(true, "请勿重复提交,拉卡拉已进件成功了,准备提交分账业务申请!"); } @@ -709,7 +709,7 @@ public class LklTkServiceImpl { //密集操作:进件审核通过之后,要下一步流程操作:申请分账业务、创建分账接收方 logger.info("开始执行进件后续操作,商户ID: {},拉卡拉商户号: {}", mchId, merCupNo); - registrationMerchantAfterHook(mchId, merCupNo, shopMchEntry.getDistributor_id()); + registrationMerchantAfterHook(mchId, merCupNo); logger.info("拉卡拉进件异步通知处理完成,商户ID: {}", mchId); return new JSONObject().set("code", "200").set("message", "处理成功"); @@ -725,9 +725,8 @@ public class LklTkServiceImpl { * * @param mchId * @param merCupNo - * @param distributorId */ - private void registrationMerchantAfterHook(Long mchId, String merCupNo, Long distributorId) { + private void registrationMerchantAfterHook(Long mchId, String merCupNo) { logger.info("商家进件已成功,下一步申请拉卡拉分账业务,再创建分账接收方!"); // 重要:给商家申请分账业务;务必检查是否申请过?申请过忽略 @@ -740,7 +739,7 @@ public class LklTkServiceImpl { logger.info("申请分账业务已成功,等待拉卡拉审核,准备创建分账接收方!"); } - // 2:新增一个接收方记录,起码要一个平台方,代理商根据入驻信息新增 + // 2:新增一个接收方记录,起码要一个平台方,代理商根据入驻商家由哪个代理商邀请而确定是否新增 Boolean genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(mchId, merCupNo); if (!genSuccess) { logger.error("进件、申请分账业务成功已成功,等待拉卡拉审核分账业务请求,但创建分账接收方失败了,请管理员补偿流程");