入驻连起来

This commit is contained in:
Jack 2025-05-06 00:25:52 +08:00
parent 2ed235f8fb
commit 8873bff6e5
8 changed files with 116 additions and 24 deletions

View File

@ -26,6 +26,14 @@ public interface EsignContractService {
*/
CommonResult signFlowCreateByFile(String mchMobile);
/**
* 内部调用发起合同签署流程
*
* @param mchMobile
* @return
*/
Pair<Boolean, String> innerSignFlowCreateByFile(String mchMobile);
/**
* 签署流程结束异步通知由e签宝通知
*

View File

@ -159,28 +159,32 @@ public class EsignContractServiceImpl extends BaseServiceImpl<EsignContractMappe
*/
@Override
public CommonResult signFlowCreateByFile(String mchMobile) {
String userId = "0";
Pair<Boolean, String> ret = innerSignFlowCreateByFile(mchMobile);
if (!ret.getFirst()) {
return CommonResult.failed(ret.getSecond());
}
// UserDto user = getCurrentUser();
// if (!user.isAdmin()) {
// return CommonResult.failed("权限不足!");
// }
// userId = user.getId().toString();
return CommonResult.success(null, ret.getSecond());
}
@Override
public Pair<Boolean, String> innerSignFlowCreateByFile(String mchMobile) {
//String userId = "0";
if (StrUtil.isBlank(mchMobile)) {
return CommonResult.failed("缺少必要参数!");
return Pair.of(false, "缺少必要参数!");
}
EsignContract esignContract = getEsignContractByMchMobile(mchMobile);
if (esignContract == null) {
return CommonResult.failed("未找到商家合同信息");
return Pair.of(false, "未找到商家合同信息");
}
// 检查商户入驻信息是否被审核通过
// 检查店铺是否已经申请过入驻
Integer apprStatus = shopMchEntryService.getApprovalStatus(mchMobile);
if (!CommonConstant.MCH_APPR_STA_PASS.equals(apprStatus)) {
return CommonResult.failed("请先审核商家入驻信息");
return Pair.of(false, "请先审核商家入驻信息");
}
//"{\"docs\":[{\"fileId\":\"ab30d2c5600441f4a7daf512e4d69157\",\"fileName\":\"平台商户入驻合同协议.pdf\"}],\"signFlowConfig\":{\"signFlowTitle\":\"平台商户入驻合同协议\",\"signFlowExpireTime\":1746844718000,\"autoFinish\":true,\"notifyUrl\":\"https://mall.gpxscs.cn/asyn/notify\",\"redirectConfig\":{\"redirectUrl\":\"https://mall.gpxscs.cn/\"}},\"signers\":[{\"signConfig\":{\"signOrder\":1},\"noticeConfig\":{\"noticeTypes\":\"1\"},\"signerType\":0,\"psnSignerInfo\":{\"psnAccount\":\"13128997057\",\"psnInfo\":{\"psnName\":\"潘军杰\"}},\"signFields\":[{\"fileId\":\"ab30d2c5600441f4a7daf512e4d69157\",\"normalSignFieldConfig\":{\"signFieldStyle\":1,\"signFieldPosition\":{\"positionPage\":40,\"positionX\":472.3607,\"positionY\":277.19104}}},{\"fileId\":\"ab30d2c5600441f4a7daf512e4d69157\",\"normalSignFieldConfig\":{\"signFieldStyle\":1,\"signFieldPosition\":{\"positionPage\":5,\"positionX\":470.58798,\"positionY\":589.14496}}}]},{\"signConfig\":{\"signOrder\":2},\"noticeConfig\":{\"noticeTypes\":\"1\"},\"signerType\":1,\"orgSignerInfo\":{\"orgName\":\"桂平发发网络有限公司\",\"orgInfo\":{\"orgIDCardNum\":\"91450881MADEQ92533\",\"orgIDCardType\":\"CRED_ORG_USCC\"},\"transactorInfo\":{\"psnAccount\":\"17777525395\",\"psnInfo\":{\"psnName\":\"谢能坤\"}}},\"signFields\":[{\"fileId\":\"ab30d2c5600441f4a7daf512e4d69157\",\"normalSignFieldConfig\":{\"signFieldStyle\":1,\"signFieldPosition\":{\"positionPage\":2,\"positionX\":479.04996,\"positionY\":357.2327}}},{\"fileId\":\"ab30d2c5600441f4a7daf512e4d69157\",\"normalSignFieldConfig\":{\"signFieldStyle\":1,\"signFieldPosition\":{\"positionPage\":5,\"positionX\":255.96832,\"positionY\":588.4553}}}]}]}";
@ -198,7 +202,7 @@ public class EsignContractServiceImpl extends BaseServiceImpl<EsignContractMappe
EsignHttpResponse createByDocTemplate = EsignHttpHelper.doCommHttp(serverUrl, apiAddr, requestType, jsonParams, header, debug);
if (createByDocTemplate.getStatus() != 200 || createByDocTemplate.getBody() == null) {
log.error("e签宝请求失败返回状态码{}", createByDocTemplate.getStatus());
return CommonResult.failed("签署失败,状态码:" + createByDocTemplate.getStatus());
return Pair.of(false, "e签宝请求失败,状态码:" + createByDocTemplate.getStatus());
}
JSONObject jsonObject = JSONUtil.parseObj(createByDocTemplate.getBody());
@ -206,20 +210,21 @@ public class EsignContractServiceImpl extends BaseServiceImpl<EsignContractMappe
String signFlowId = (String) jsonObject.getByPath("data.signFlowId");
if (code == null || code != 0 || StrUtil.isBlank(signFlowId)) {
log.error("e签宝请求失败返回状态码{}", createByDocTemplate.getStatus());
return CommonResult.failed("签署失败,状态码:" + createByDocTemplate.getStatus());
return Pair.of(false, "e签宝请求失败,状态码:" + createByDocTemplate.getStatus());
}
//合同签署状态-1预备数据阶段0-等待签署1-已部分签署2-已完成所有签署方完成签署3-已撤销发起方撤销签署任务5-已过期签署截止日到期后触发7-已拒签签署方拒绝签署
Boolean success = updateContractFlowIdAndFileUrl(esignContract.getId(), signFlowId, CommonConstant.CONTRACT_SIGN_STA_ING, null);
if (!success) {
log.error("更新合同流程状态失败");
return CommonResult.failed("更新合同流程状态失败");
return Pair.of(false, "更新合同流程状态失败");
}
return CommonResult.success("合同流程创建成功合同流程ID" + signFlowId);
return Pair.of(true, "合同流程创建成功合同流程ID" + signFlowId);
} catch (EsignDemoException e) {
throw new RuntimeException(e);
log.error("发起签署电子合同请求失败:", e);
return Pair.of(false, "发起签署电子合同请求失败!");
}
}
@ -288,9 +293,11 @@ public class EsignContractServiceImpl extends BaseServiceImpl<EsignContractMappe
boolean success = updateContractFlowStatusAndFileUrlBySignFlowId(signFlowId, CommonConstant.CONTRACT_SIGN_STA_FINISH, downloadUrl);
if (success && StrUtil.isNotBlank(downloadUrl)) {
// 新建一个正式的已审核通过的店铺
taskService.executeTask(() -> {
taskService.executeTask(() -> {
// 申请分账
// 新建一个正式的已审核通过的店铺
Pair<Integer, String> retPair = shopStoreBaseService.merchEntryInfo2StoreInfo(esignContract.getMch_mobile());
if (retPair.getFirst() > 0) {
// 更改合同记录表的店铺id

View File

@ -54,4 +54,15 @@ public interface LklLedgerMemberService extends IBaseService<LklLedgerMember> {
*/
Boolean updateAuditResult(String applyId, String merInnerNo, String merCupNo, String entrustFileName, String entrustFilePath, String auditStatus, String auditStatusText, String remark);
/**
* 更新分账多个状态
*
* @param merCupNo
* @param hasEsigned
* @param hasApplySplit
* @param hasReceiver
* @param hasBindReceiver
* @return
*/
Boolean updateMulStatus(String merCupNo, Integer hasEsigned, Integer hasApplySplit, Integer hasReceiver, Integer hasBindReceiver);
}

View File

@ -49,10 +49,11 @@ public interface LklLedgerReceiverService extends IBaseService<LklLedgerReceiver
/**
* 内部调用申请分账接收方
*
* @param merCupNo
* @param platformId
* @return
*/
Boolean innerApplyLedgerReceiver(Long platformId);
Boolean innerApplyLedgerReceiver(String merCupNo, Long platformId);
/**
* 是否存在平台方的相关记录信息

View File

@ -494,7 +494,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
return CommonResult.success(null, "提交成功,待审核中!");
} catch (SDKException e) {
log.error("分账申请失败", e);
log.error("申请开通分账出错", e);
throw new ApiException(I18nUtil._("申请开通分账出错!"), e);
}
}
@ -657,7 +657,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
LklLedgerReceiver lklLedgerReceiver = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerReceiver.class);
// 新增或修改本地数据
lklLedgerReceiverService.saveOrUpdateByReceiverNo(lklLedgerReceiver);
Boolean success = lklLedgerReceiverService.saveOrUpdateByReceiverNo(lklLedgerReceiver);
if (!success) {
log.error("接收方创建成功,但更新本地数据 lklLedgerReceiverService.saveOrUpdateByReceiverNo 失败!");
}
return CommonResult.success(lklLedgerReceiver, "创建接收方成功!");
} catch (SDKException e) {

View File

@ -12,6 +12,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.suisung.mall.common.constant.CommonConstant;
import com.suisung.mall.common.modules.lakala.LklLedgerMember;
import com.suisung.mall.core.web.service.impl.BaseServiceImpl;
import com.suisung.mall.shop.lakala.mapper.LklLedgerMemberMapper;
@ -116,8 +117,54 @@ public class LklLedgerMemberServiceImpl extends BaseServiceImpl<LklLedgerMemberM
updateWrapper.set("split_entrust_file_path", entrustFilePath);
updateWrapper.set("audit_status", auditStatus);
updateWrapper.set("audit_status_text", auditStatusText);
updateWrapper.set("has_esigned", CommonConstant.Enable); // 电子合同签署完成之后才能做分账申请
updateWrapper.set("has_apply_split", CommonConstant.Enable);
updateWrapper.set("remark", remark);
return update(updateWrapper);
}
/**
* 更新分账多个状态
*
* @param merCupNo
* @param hasEsigned
* @param hasApplySplit
* @param hasReceiver
* @param hasBindReceiver
* @return
*/
@Override
public Boolean updateMulStatus(String merCupNo, Integer hasEsigned, Integer hasApplySplit, Integer hasReceiver, Integer hasBindReceiver) {
if (StrUtil.isBlank(merCupNo)) {
log.error("缺少参数merCupNo}");
return false;
}
int i = 0;
UpdateWrapper<LklLedgerMember> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("mer_cup_no", merCupNo);
if (hasEsigned != null && hasEsigned > 0) {
i++;
updateWrapper.set("has_esigned", hasEsigned);
}
if (hasApplySplit != null && hasApplySplit > 0) {
i++;
updateWrapper.set("has_apply_split", hasApplySplit);
}
if (hasReceiver != null && hasReceiver > 0) {
i++;
updateWrapper.set("has_receiver", hasReceiver);
}
if (hasBindReceiver != null && hasBindReceiver > 0) {
i++;
updateWrapper.set("has_bind_receiver", hasBindReceiver);
}
if (i == 0) {
return false;
}
return update(updateWrapper);
}
}

View File

@ -22,6 +22,7 @@ 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;
import com.suisung.mall.shop.lakala.service.LakalaApiService;
import com.suisung.mall.shop.lakala.service.LklLedgerMemberService;
import com.suisung.mall.shop.lakala.service.LklLedgerReceiverService;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@ -40,6 +41,10 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
@Resource
private LakalaApiService lakalaApiService;
@Lazy
@Resource
private LklLedgerMemberService lklLedgerMemberService;
/**
* 根据接收方编号新增或更新记录
*
@ -145,7 +150,7 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
reqParam.put("receiverName", esignPlatformInfo.getLicense_company());
reqParam.put("contactMobile", esignPlatformInfo.getLegal_person_mobile());
reqParam.put("platformId", esignPlatformInfo.getId());
reqParam.put("licenseNo", esignPlatformInfo.getLicense_number());
reqParam.put("licenseName", esignPlatformInfo.getLicense_company());
reqParam.put("legalPersonName", esignPlatformInfo.getLegal_person_name());
@ -199,7 +204,7 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
* @return
*/
@Override
public Boolean innerApplyLedgerReceiver(Long platformId) {
public Boolean innerApplyLedgerReceiver(String merCupNo, Long platformId) {
JSONArray buildApplyLedgerReceiverReqParams = buildApplyLedgerReceiverReqParams(platformId);
if (CollectionUtil.isEmpty(buildApplyLedgerReceiverReqParams)) {
return false;
@ -211,6 +216,9 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
if (result == null || result.getCode() != 200) {
continue;
}
// 更新多个状态
lklLedgerMemberService.updateMulStatus(merCupNo, 0, 0, 1, 0);
success += 1;
}

View File

@ -20,6 +20,7 @@ import com.suisung.mall.common.utils.RestTemplateHttpUtil;
import com.suisung.mall.common.utils.StringUtils;
import com.suisung.mall.common.utils.UploadUtil;
import com.suisung.mall.core.web.service.RedisService;
import com.suisung.mall.shop.esign.service.EsignContractService;
import com.suisung.mall.shop.lakala.service.LklLedgerReceiverService;
import com.suisung.mall.shop.lakala.utils.LakalaUtil;
import com.suisung.mall.shop.store.service.ShopMchEntryService;
@ -77,6 +78,10 @@ public class LklTkServiceImpl {
@Resource
private LklLedgerReceiverService lklLedgerReceiverService;
@Lazy
@Resource
private EsignContractService esignContractService;
@Autowired
private RedisService redisService;
@ -423,10 +428,11 @@ public class LklTkServiceImpl {
return new JSONObject().set("code", "500").set("message", "商户入驻信息不存在");
}
// 1发起E签宝合同签署2立即给商家申请分账功能权限3新增一个接收方记录起码要一个平台方代理商根据入驻信息新增
// 1发起E签宝合同签署签署完成之后生成分账盖章协议书下一步才能申请分账功能权限
esignContractService.innerSignFlowCreateByFile(shopMchEntry.getLogin_mobile());
//3
lklLedgerReceiverService.innerApplyLedgerReceiver(shopMchEntry.getDistributor_id());
// 2新增一个接收方记录起码要一个平台方代理商根据入驻信息新增
lklLedgerReceiverService.innerApplyLedgerReceiver(merCupNo, shopMchEntry.getDistributor_id());
return new JSONObject().set("code", "200").set("message", "成功");
}