入驻代理商的增强
This commit is contained in:
parent
abb9d189d9
commit
a81711fa25
@ -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;
|
||||
|
||||
@ -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 = "基于文件发起签署电子合同")
|
||||
|
||||
@ -32,7 +32,7 @@ public interface EsignPlatformInfoService {
|
||||
* @param mchId
|
||||
* @return
|
||||
*/
|
||||
List<EsignPlatformInfo> getDistributorAndPlatformByIds(Long mchId);
|
||||
List<EsignPlatformInfo> selectAgentAndPlatformByMchId(Long mchId);
|
||||
|
||||
/**
|
||||
* 根据分类和营业执照号获取平台方信息
|
||||
|
||||
@ -70,7 +70,7 @@ public class EsignPlatformInfoServiceImpl extends BaseServiceImpl<EsignPlatformI
|
||||
* @return List<EsignPlatformInfo> 平台方和代理商信息列表
|
||||
*/
|
||||
@Override
|
||||
public List<EsignPlatformInfo> getDistributorAndPlatformByIds(Long mchId) {
|
||||
public List<EsignPlatformInfo> selectAgentAndPlatformByMchId(Long mchId) {
|
||||
// 获取平台方记录
|
||||
QueryWrapper<EsignPlatformInfo> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("level", 0)
|
||||
|
||||
@ -99,4 +99,20 @@ public interface LklLedgerReceiverService extends IBaseService<LklLedgerReceiver
|
||||
* @return
|
||||
*/
|
||||
Long countByCondition(String LicenseNo, String ContactMobile, Long platformId);
|
||||
|
||||
/**
|
||||
* 根据入驻编号获取平台和代理商接收方信息
|
||||
*
|
||||
* @param mchId
|
||||
* @return
|
||||
*/
|
||||
List<LklLedgerReceiver> selectAgentAndPlatformByMchId(Long mchId);
|
||||
|
||||
/**
|
||||
* 根据入驻编号获取商户的二级代理接收方信息
|
||||
*
|
||||
* @param mchId
|
||||
* @return
|
||||
*/
|
||||
LklLedgerReceiver getMch2ndAgent(Long mchId);
|
||||
}
|
||||
|
||||
@ -1503,7 +1503,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
* <p>参考:https://o.lakala.com/#/home/document/detail?id=386
|
||||
* 为商户绑定分账接收方,包括平台方和代理商(如有)。
|
||||
*
|
||||
* @param paramsJSON 包含绑定参数的JSON对象 {merCupNo}
|
||||
* @param paramsJSON 包含绑定参数的JSON对象 {merCupNo, merInnerNo}
|
||||
* @return Pair对象,第一个元素表示操作是否成功,第二个元素为操作结果信息
|
||||
*/
|
||||
public Pair<Boolean, String> 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<LklLedgerReceiver> receiverList = lklLedgerReceiverService.selectPlatformAnDistributorList();
|
||||
List<LklLedgerReceiver> 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());
|
||||
|
||||
@ -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<LklLedgerRecei
|
||||
public JSONArray buildApplyLedgerReceiverReqParams(Long mchId) {
|
||||
|
||||
// 获取平台记录和代理商记录
|
||||
List<EsignPlatformInfo> esignPlatformInfoList = esignPlatformInfoService.getDistributorAndPlatformByIds(mchId);
|
||||
List<EsignPlatformInfo> esignPlatformInfoList = esignPlatformInfoService.selectAgentAndPlatformByMchId(mchId);
|
||||
if (CollectionUtil.isEmpty(esignPlatformInfoList)) {
|
||||
return null;
|
||||
}
|
||||
@ -166,6 +169,11 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
|
||||
reqParam.put("legalPersonCertificateType", "17");
|
||||
reqParam.put("legalPersonCertificateNo", esignPlatformInfo.getLegal_person_id_card());
|
||||
|
||||
reqParam.put("level", esignPlatformInfo.getLevel());
|
||||
reqParam.put("splitRatio", esignPlatformInfo.getSplit_ratio());
|
||||
reqParam.put("shippingFee", esignPlatformInfo.getShipping_fee());
|
||||
reqParam.put("parentId", CheckUtil.isEmpty(esignPlatformInfo.getParent_id()) ? 0L : esignPlatformInfo.getParent_id());
|
||||
|
||||
reqParam.put("acctNo", esignPlatformInfo.getRec_acc_card_no());
|
||||
reqParam.put("acctName", esignPlatformInfo.getRec_acc_bank_name());
|
||||
reqParam.put("acctTypeCode", "57");
|
||||
@ -218,18 +226,20 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
|
||||
*/
|
||||
@Override
|
||||
public Boolean innerApplyLedgerReceiver(Long mchId, String merCupNo) {
|
||||
// 接收方至少有一个平台方
|
||||
JSONArray buildApplyLedgerReceiverReqParams = buildApplyLedgerReceiverReqParams(mchId);
|
||||
// 商户的分账接收方:平台+代理商
|
||||
JSONArray platformAndAgentReceiver = buildApplyLedgerReceiverReqParams(mchId);
|
||||
|
||||
if (buildApplyLedgerReceiverReqParams == null || buildApplyLedgerReceiverReqParams.isEmpty()) {
|
||||
if (platformAndAgentReceiver == null || platformAndAgentReceiver.isEmpty()) {
|
||||
log.error("先新增平台或代理商信息");
|
||||
return false;
|
||||
}
|
||||
|
||||
int successCnt = 0;
|
||||
for (JSONObject reqParam : buildApplyLedgerReceiverReqParams.jsonIter()) {
|
||||
log.debug("申请分账接收方参数:{}", reqParam.toString());
|
||||
reqParam.put("mchId", mchId); // 附加入驻商户自增ID
|
||||
for (JSONObject reqParam : platformAndAgentReceiver.jsonIter()) {
|
||||
log.debug("申请分账接收方参数:{}", reqParam);
|
||||
reqParam.put("mchId", mchId); // 附加入驻商户编号
|
||||
|
||||
// 向拉卡拉申请分账接收方
|
||||
CommonResult result = lakalaApiService.applyLedgerReceiver(reqParam);
|
||||
if (result == null || result.getStatus() != ResultCode.SUCCESS.getStatus()) {
|
||||
log.error("申请分账接收方失败:{}", result.getMsg());
|
||||
@ -355,4 +365,121 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
|
||||
|
||||
return count(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据入驻编号获取平台和代理商接收方信息
|
||||
*
|
||||
* @param mchId
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<LklLedgerReceiver> selectAgentAndPlatformByMchId(Long mchId) {
|
||||
// 获取平台方记录
|
||||
QueryWrapper<LklLedgerReceiver> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("level", 0)
|
||||
.eq("status", CommonConstant.Enable).orderByAsc("id");
|
||||
|
||||
List<LklLedgerReceiver> 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<LklLedgerReceiver> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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("进件、申请分账业务成功已成功,等待拉卡拉审核分账业务请求,但创建分账接收方失败了,请管理员补偿流程");
|
||||
|
||||
Loading…
Reference in New Issue
Block a user