回归测试,bug修改
This commit is contained in:
parent
2feebfafd4
commit
b865aafadf
@ -103,7 +103,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean isProd() {
|
||||
protected boolean isProdProject() {
|
||||
return "prod".equalsIgnoreCase(profile);
|
||||
}
|
||||
|
||||
@ -432,7 +432,7 @@ public class LakalaPayServiceImpl implements LakalaPayService {
|
||||
String splitEntrustFilePath = fileUploadResp.getStr("attFileId");
|
||||
req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf;
|
||||
|
||||
if (isProd()) {
|
||||
if (isProdProject()) {
|
||||
projectDomain = projectDomain + "/api";
|
||||
}
|
||||
// 给拉卡拉通知的回调地址
|
||||
|
||||
@ -33,8 +33,8 @@ public class LakalaController extends BaseControllerImpl {
|
||||
@ApiOperation(value = "测试案例", notes = "测试案例")
|
||||
@RequestMapping(value = "/testcase", method = RequestMethod.POST)
|
||||
public Object testcase(@RequestBody JSONObject paramsJSON) {
|
||||
// return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile"));
|
||||
return lakalaPayService.LedgerMerEcDownload(975790666910121984L);
|
||||
return lakalaPayService.applyLedgerMerEc(paramsJSON.getStr("mchMobile"));
|
||||
// return lakalaPayService.LedgerMerEcDownload(975790666910121984L);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "本地文件转base64", notes = "本地文件转base64")
|
||||
|
||||
@ -30,8 +30,6 @@ import com.suisung.mall.common.modules.lakala.LklLedgerReceiver;
|
||||
import com.suisung.mall.common.modules.store.ShopMchEntry;
|
||||
import com.suisung.mall.common.modules.store.ShopStoreBase;
|
||||
import com.suisung.mall.common.utils.*;
|
||||
import com.suisung.mall.shop.esign.service.EsignContractFillingFileService;
|
||||
import com.suisung.mall.shop.esign.service.EsignContractService;
|
||||
import com.suisung.mall.shop.lakala.service.*;
|
||||
import com.suisung.mall.shop.lakala.utils.LakalaUtil;
|
||||
import com.suisung.mall.shop.page.service.OssService;
|
||||
@ -91,6 +89,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
private String projectDomain;
|
||||
@Value("${spring.profiles.active}")
|
||||
private String profile;
|
||||
@Value("${lakala.is_prod}")
|
||||
private Boolean isLklProd;
|
||||
|
||||
@Value("#{accountBaseConfigService.getConfig('tengxun_default_dir')}")
|
||||
private String TENGXUN_DEFAULT_DIR;
|
||||
@ -112,14 +112,14 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
@Resource
|
||||
private ShopMchEntryService shopMchEntryService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private
|
||||
EsignContractService esignContractService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private EsignContractFillingFileService esignContractFillingFileService;
|
||||
// @Lazy
|
||||
// @Resource
|
||||
// private
|
||||
// EsignContractService esignContractService;
|
||||
//
|
||||
// @Lazy
|
||||
// @Resource
|
||||
// private EsignContractFillingFileService esignContractFillingFileService;
|
||||
|
||||
|
||||
@Lazy
|
||||
@ -151,10 +151,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
return true;
|
||||
}
|
||||
|
||||
protected boolean isProd() {
|
||||
return false;
|
||||
protected boolean isProdProject() {
|
||||
// return false;
|
||||
// 正式发布时再启用
|
||||
//return "prod".equalsIgnoreCase(profile);
|
||||
return "prod".equalsIgnoreCase(profile);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -487,7 +487,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
// 获取商家信息
|
||||
ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, "");
|
||||
if (shopMchEntry == null) {
|
||||
return Pair.of(false, I18nUtil._("无法查找商家相关信息!"));
|
||||
return Pair.of(false, I18nUtil._("缺少商家相关信息!"));
|
||||
}
|
||||
|
||||
LklLedgerEc lklLedgerEc = lklLedgerEcService.getByMchMobile(mchMobile, "", CommonConstant.Enable);
|
||||
@ -521,12 +521,14 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
reqData.put("acct_name", shopMchEntry.getAccount_holder_name());
|
||||
reqData.put("remark", "申请入网电子合同");
|
||||
|
||||
// 正式上线的时候,调整 api 地址
|
||||
String domain = projectDomain;
|
||||
if (isProd()) {
|
||||
if (isProdProject()) {
|
||||
domain += "/api";
|
||||
}
|
||||
|
||||
// 给拉卡拉通知的回调地址 TODO 生产环境一定去掉 api
|
||||
String retUrl = domain + "/api/mobile/shop/lakala/ec/applyNotify";
|
||||
String retUrl = domain + "/mobile/shop/lakala/ec/applyNotify";
|
||||
reqData.put("ret_url", retUrl);
|
||||
|
||||
LocalDate today = LocalDate.now(); // 获取当前日期
|
||||
@ -534,7 +536,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
|
||||
String platformName = "桂平发发网络有限公司";
|
||||
String ratioNum = "0.6";
|
||||
if (isProd()) {
|
||||
if (isLklProd) {
|
||||
ratioNum = "0.25";
|
||||
}
|
||||
JSONObject ecParams = new JSONObject();
|
||||
@ -542,7 +544,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
ecParams.put("A30", ratioNum); // 测试环境微信费率0.6
|
||||
ecParams.put("A96", "1");
|
||||
ecParams.put("A97", "是");
|
||||
ecParams.put("A100", "否");
|
||||
ecParams.put("A100", "是");
|
||||
ecParams.put("A101", "中国境内");
|
||||
ecParams.put("A102", platformName);
|
||||
ecParams.put("A103", "小发同城");
|
||||
@ -554,14 +556,22 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
ecParams.put("A109", today.getDayOfMonth());
|
||||
ecParams.put("B1", today.getYear());
|
||||
ecParams.put("B3", "是");
|
||||
ecParams.put("B4", "是");
|
||||
ecParams.put("B2", today.getMonthValue());
|
||||
ecParams.put("B8", isQy ? shopMchEntry.getBiz_license_company() : shopMchEntry.getAccount_holder_name());
|
||||
ecParams.put("B9", StrUtil.subSufByLength(shopMchEntry.getSales_info(), 22));
|
||||
ecParams.put("B9", StrUtil.sub(shopMchEntry.getSales_info(), 0, 22));
|
||||
ecParams.put("B10", isQy ? shopMchEntry.getBiz_license_company() : shopMchEntry.getAccount_holder_name());
|
||||
ecParams.put("B14", isQy ? shopMchEntry.getBiz_license_number() : "");
|
||||
ecParams.put("B16", isQy ? "是" : "否");
|
||||
ecParams.put("B19", shopMchEntry.getOpenning_bank_code());
|
||||
ecParams.put("B20", shopMchEntry.getAccount_number());
|
||||
|
||||
ecParams.put("B24", isQy ? shopMchEntry.getLegal_person_name() : shopMchEntry.getIndividual_id_name());
|
||||
ecParams.put("B25", isQy ? shopMchEntry.getLegal_person_id_number() : shopMchEntry.getIndividual_id_number());
|
||||
ecParams.put("B26", isQy ? shopMchEntry.getLegal_person_mobile() : shopMchEntry.getLogin_mobile());
|
||||
ecParams.put("B27", shopMchEntry.getContact_name());
|
||||
ecParams.put("B28", shopMchEntry.getEmail());
|
||||
|
||||
ecParams.put("B31", shopMchEntry.getStore_name());
|
||||
ecParams.put("B32", shopMchEntry.getContact_name());
|
||||
ecParams.put("B33", shopMchEntry.getStore_address());
|
||||
@ -590,9 +600,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
reqBody.put("version", "3.0");
|
||||
reqBody.put("req_data", reqData);
|
||||
|
||||
|
||||
String reqUrl = serverUrl + "/sit/api/v3/mms/open_api/ec/apply";
|
||||
if (isProd()) {
|
||||
String reqUrl = serverUrl + "/api/v3/mms/open_api/ec/apply";
|
||||
if (isLklProd) {
|
||||
reqUrl = serverUrl + "/api/v3/mms/open_api/ec/apply";
|
||||
}
|
||||
|
||||
@ -602,20 +611,26 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
JSONObject header = new JSONObject();
|
||||
header.put("Authorization", authorization);
|
||||
|
||||
String errMsg = "";
|
||||
ResponseEntity<JSONObject> response = RestTemplateHttpUtil.sendPostBodyBackEntity(reqUrl, header, reqBody, JSONObject.class);
|
||||
if (ObjectUtil.isEmpty(response) || response.getStatusCode() != HttpStatus.OK) {
|
||||
return Pair.of(false, "商家入网申请电子合同:请求失败");
|
||||
errMsg = "商家入网申请电子合同失败:请求失败";
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg);
|
||||
return Pair.of(false, errMsg);
|
||||
}
|
||||
|
||||
JSONObject respBody = response.getBody();
|
||||
if (ObjectUtil.isNotEmpty(respBody) && !lklSuccessCode.equals(respBody.getStr("code"))) {
|
||||
String errMsg = StrUtil.isBlank(respBody.getStr("msg")) ? "返回状态有误" : respBody.getStr("msg");
|
||||
return Pair.of(false, "商家入网申请电子合同失败:" + errMsg);
|
||||
errMsg = "商家入网申请电子合同失败:" + (StrUtil.isBlank(respBody.getStr("msg")) ? "返回状态有误" : respBody.getStr("msg"));
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg);
|
||||
return Pair.of(false, errMsg);
|
||||
}
|
||||
|
||||
JSONObject respData = respBody.getJSONObject("resp_data");
|
||||
if (respBody.getJSONObject("resp_data") == null) {
|
||||
return Pair.of(false, "商家入网申请电子合同失败:返回数据有误");
|
||||
errMsg = "商家入网申请电子合同失败:返回数据有误";
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg);
|
||||
return Pair.of(false, errMsg);
|
||||
}
|
||||
|
||||
// 商家入网申请电子合同处理数据
|
||||
@ -630,96 +645,15 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
record.setResp_body(respBody.toString());
|
||||
Boolean success = lklLedgerEcService.saveOrUpdateByMchId(record);
|
||||
if (!success) {
|
||||
return Pair.of(false, "商家入网申请电子合同失败:本地数据保存失败");
|
||||
errMsg = "商家入网申请电子合同失败:数据保存失败";
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg);
|
||||
return Pair.of(false, errMsg);
|
||||
}
|
||||
|
||||
return Pair.of(true, "商家入网申请电子合同成功");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 商户分账业务开通申请
|
||||
*
|
||||
* @param paramsJSON
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public CommonResult applyLedgerMer(JSONObject paramsJSON) {
|
||||
log.info("商户分账业务开通申请开始");
|
||||
|
||||
// TODO 判断是否已经申请过?
|
||||
// 1. 配置初始化
|
||||
initLKLSDK();
|
||||
|
||||
//2. 装配数据
|
||||
V2MmsOpenApiLedgerApplyLedgerMerRequest req = new V2MmsOpenApiLedgerApplyLedgerMerRequest();
|
||||
req.setVersion("2.0");
|
||||
req.setOrderNo(StringUtils.genLklOrderNo(8));// 14位年月日时(24小时制)分秒+8位的随机数
|
||||
req.setOrgCode(orgCode);
|
||||
req.setMerInnerNo(paramsJSON.getStr("merInnerNo"));// 从进件申请返回的商户号
|
||||
req.setMerCupNo(paramsJSON.getStr("merCupNo")); // 从进件申请返回的商户号
|
||||
req.setContactMobile(paramsJSON.getStr("contactMobile")); // 商户入驻注册的手机号
|
||||
// 分账比例为了考虑低价订单的运费占比高,分账比例暂时定70%分账给商户,30%分账给平台
|
||||
// new BigDecimal(paramsJSON.getStr("splitLowestRatio"))
|
||||
req.setSplitLowestRatio(new BigDecimal(ratio));
|
||||
String fileName = paramsJSON.getStr("splitEntrustFileName");
|
||||
req.setSplitEntrustFileName(fileName);
|
||||
|
||||
// 分账结算委托书文件上传到拉卡拉服务器
|
||||
JSONObject fileUploadResp = uploadFile(req.getOrderNo(), "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), UploadUtil.fileUrlToBase64(paramsJSON.getStr("splitEntrustFile")));
|
||||
if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) {
|
||||
throw new ApiException(I18nUtil._("分账结算委托书上传失败!"));
|
||||
}
|
||||
|
||||
String splitEntrustFilePath = fileUploadResp.getStr("attFileId");
|
||||
req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf;
|
||||
|
||||
String domain = projectDomain;
|
||||
if (isProd()) {
|
||||
domain += "/api";
|
||||
}
|
||||
// 给拉卡拉通知的回调地址
|
||||
String retUrl = domain + "/mobile/shop/lakala/ledger/applyLedgerMerNotify";
|
||||
req.setRetUrl(retUrl);
|
||||
|
||||
paramsJSON.set("orderNo", req.getOrderNo());
|
||||
paramsJSON.set("version", "2.0");
|
||||
paramsJSON.set("ret_url", retUrl);
|
||||
paramsJSON.set("org_code", orgCode);
|
||||
paramsJSON.set("split_entrust_file_path", splitEntrustFilePath);
|
||||
|
||||
try {
|
||||
//3. 发送请求
|
||||
String responseStr = LKLSDK.httpPost(req);
|
||||
|
||||
// 成功返回示例:{'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}
|
||||
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
|
||||
if (StrUtil.isBlank(responseStr) || lakalaRespJSON == null) {
|
||||
return CommonResult.failed(I18nUtil._("申请开通分账失败!"));
|
||||
}
|
||||
|
||||
if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) {
|
||||
return CommonResult.failed(lakalaRespJSON.getStr("retMsg"));
|
||||
}
|
||||
|
||||
paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId"));
|
||||
paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg"));
|
||||
paramsJSON.set("audit_status_text", paramsJSON.get("remark"));
|
||||
|
||||
paramsJSON.set("mch_id", paramsJSON.get("mchId"));
|
||||
|
||||
// 新增数据
|
||||
// 将 JSON 对象的键名转换为下划线命名
|
||||
LklLedgerMember lklLedgerMember = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class);
|
||||
lklLedgerMemberService.saveOrUpdateByMerCupNo(lklLedgerMember);
|
||||
|
||||
return CommonResult.success(null, "提交成功,待审核中!");
|
||||
} catch (SDKException e) {
|
||||
log.error("申请开通分账出错:", e);
|
||||
throw new ApiException(I18nUtil._("商家申请开通分账出错!"), e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Boolean, String> innerApplyLedgerMer(String merCupNo) {
|
||||
log.debug("商户分账业务开通申请开始");
|
||||
@ -758,7 +692,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String fileName = "小发同城分账授权委托书.pdf";//paramsJSON.getStr("splitEntrustFileName");
|
||||
req.setSplitEntrustFileName(fileName);
|
||||
|
||||
// 分账结算委托书文件上传到拉卡拉服务器
|
||||
// TODO 分账结算委托书文件上传到拉卡拉服务器
|
||||
JSONObject fileUploadResp = uploadFile(req.getOrderNo(), "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), UploadUtil.fileUrlToBase64(shopMchEntry.getContract_download_url()));
|
||||
if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) {
|
||||
throw new ApiException(I18nUtil._("小发同城分账授权委托书上传失败!"));
|
||||
@ -768,7 +702,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf;
|
||||
|
||||
String domain = projectDomain;
|
||||
if (isProd()) {
|
||||
if (isProdProject()) {
|
||||
domain += "/api";
|
||||
}
|
||||
// 给拉卡拉通知的回调地址
|
||||
@ -792,7 +726,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
paramsJSON.put("split_entrust_file_name", req.getSplitEntrustFileName());
|
||||
paramsJSON.put("split_entrust_file_path", splitEntrustFilePath);
|
||||
|
||||
|
||||
try {
|
||||
//3. 发送请求
|
||||
String responseStr = LKLSDK.httpPost(req);
|
||||
@ -834,16 +767,18 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
*/
|
||||
@Override
|
||||
public JSONObject applyLedgerMerEcNotify(HttpServletRequest request) {
|
||||
log.info("商户入网电子合同申请回调通知开始");
|
||||
log.debug("商户入网电子合同申请回调通知开始");
|
||||
|
||||
// 验签
|
||||
String authorization = request.getHeader("Authorization");
|
||||
String requestBody = LakalaUtil.getBody(request);
|
||||
log.info("商户入网电子合同申请回调返回参数:{}", requestBody);
|
||||
log.debug("商户入网电子合同申请回调返回request body参数:{}", requestBody);
|
||||
log.debug("商户入网电子合同申请回调返回authorization参数:{}", authorization);
|
||||
|
||||
String errMsg = "商户入网电子合同申请回调:";
|
||||
boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath);
|
||||
if (!checkSuccess) {
|
||||
log.info("商户入网电子合同申请回调:验签失败");
|
||||
log.error(errMsg + "验签失败");
|
||||
return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!");
|
||||
}
|
||||
|
||||
@ -858,21 +793,21 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String ecNo = paramsJSON.getStr("ecNo");
|
||||
String ecStatus = paramsJSON.getStr("ecStatus"); // COMPLETED
|
||||
if (ecStatus == null || !ecStatus.equals("COMPLETED")) {
|
||||
log.info("商户入网电子合同申请状态尚未签署完成!");
|
||||
respData.put("retMsg", "入网电子合同尚未签署完成!");
|
||||
log.debug("商户入网电子合同申请状态尚未签署完成!");
|
||||
respData.put("retMsg", "入网电子合同尚未签署,请稍候!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
if (ecApplyId == null || StrUtil.isBlank(ecNo)) {
|
||||
log.info("商户入网电子合同申请回调:ecApplyId 为空");
|
||||
log.error("商户入网电子合同申请回调:ecApplyId 为空");
|
||||
respData.put("retMsg", "ecApplyId 返回空值!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
LklLedgerEc lklLedgerEc = lklLedgerEcService.getByApplyId(ecApplyId, "", CommonConstant.Enable);
|
||||
if (lklLedgerEc == null) {
|
||||
log.info("商户入网电子合同申请回调:未找到对应的入网电子合同记录");
|
||||
respData.put("retMsg", "未找到对应的入网电子合同记录!");
|
||||
log.error("商户入网电子合同申请回调:找不到对应入网lklLedgerEc电子合同记录");
|
||||
respData.put("retMsg", "找不到对应入网电子合同记录!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
@ -896,20 +831,23 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
// 更新本地数据状态和合同编号、合同名字
|
||||
Boolean success = lklLedgerEcService.updateByApplyId(updRecord);
|
||||
if (success) {
|
||||
respData.put("retCode", lklSuccessCode);
|
||||
respData.put("retMsg", "操作成功!");
|
||||
log.info("商户入网电子合同申请回调:处理成功");
|
||||
|
||||
// 更新商家入驻表的合同编号,和签署地址
|
||||
// 更新商家入驻表的合同编号,和签署地址,更改状态
|
||||
shopMchEntryService.updateMerchEntryLklEcNo(lklLedgerEc.getMch_id(), ecNo, paramsJSON.getStr("ecName"), lklLedgerEc.getResult_url(), ecFileUrl);
|
||||
|
||||
// TODO 商家电子合同签署完毕后,收到异步通知,触发拉卡拉商家进件(重要环节)
|
||||
// 下一步,等待拉卡拉系统审核,和人工审核,收到异步通知之后,触发1、e签宝的电子合同签署,2、新增分账接收方
|
||||
Pair<Boolean, String> resultPair = lklTkService.registrationMerchant(lklLedgerEc.getMch_mobile(), "");
|
||||
if (!resultPair.getFirst()) {
|
||||
log.error("###商户入网电子合同签署通知回调:拉卡拉商家进件失败:", resultPair.getSecond());
|
||||
// return CommonResult.failed(resultPair.getSecond());
|
||||
errMsg += resultPair.getSecond();
|
||||
log.error(errMsg);
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg);
|
||||
respData.put("retMsg", errMsg);
|
||||
return respData;
|
||||
}
|
||||
|
||||
respData.put("retCode", lklSuccessCode);
|
||||
respData.put("retMsg", "操作成功!");
|
||||
log.info("商户入网电子合同申请回调:处理成功");
|
||||
}
|
||||
}
|
||||
|
||||
@ -939,8 +877,8 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
reqBody.put("version", "1.0");
|
||||
reqBody.put("req_data", reqData);
|
||||
|
||||
String reqUrl = serverUrl + "/sit/api/v3/mms/open_api/ec/download";
|
||||
if (isProd()) {
|
||||
String reqUrl = serverUrl + "/api/v3/mms/open_api/ec/download";
|
||||
if (isLklProd) {
|
||||
reqUrl = serverUrl + "/api/v3/mms/open_api/ec/download";
|
||||
}
|
||||
|
||||
@ -990,6 +928,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
.concat(lklLedgerEc.getMch_mobile()).concat("/")
|
||||
.concat("signed").concat("/")
|
||||
.concat(ecApplyId.toString()).concat(".pdf");
|
||||
log.debug("拉卡拉电子合同保存地址:{}", cosFileName);
|
||||
|
||||
// 上传到cos服务器
|
||||
String cosFileUrl = ossService.uploadObject4OSS(file, cosFileName);
|
||||
@ -1000,6 +939,94 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
return cosFileUrl;
|
||||
}
|
||||
|
||||
/**
|
||||
* 商户分账业务开通申请
|
||||
*
|
||||
* @param paramsJSON
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public CommonResult applyLedgerMer(JSONObject paramsJSON) {
|
||||
log.debug("商户分账业务开通申请1开始");
|
||||
|
||||
// TODO 判断是否已经申请过?
|
||||
// 1. 配置初始化
|
||||
initLKLSDK();
|
||||
|
||||
//2. 装配数据
|
||||
V2MmsOpenApiLedgerApplyLedgerMerRequest req = new V2MmsOpenApiLedgerApplyLedgerMerRequest();
|
||||
req.setVersion("2.0");
|
||||
req.setOrderNo(StringUtils.genLklOrderNo(8));// 14位年月日时(24小时制)分秒+8位的随机数
|
||||
req.setOrgCode(orgCode);
|
||||
req.setMerInnerNo(paramsJSON.getStr("merInnerNo"));// 从进件申请返回的商户号
|
||||
req.setMerCupNo(paramsJSON.getStr("merCupNo")); // 从进件申请返回的商户号
|
||||
req.setContactMobile(paramsJSON.getStr("contactMobile")); // 商户入驻注册的手机号
|
||||
// 分账比例为了考虑低价订单的运费占比高,分账比例暂时定70%分账给商户,30%分账给平台
|
||||
// new BigDecimal(paramsJSON.getStr("splitLowestRatio"))
|
||||
req.setSplitLowestRatio(new BigDecimal(ratio));
|
||||
String fileName = paramsJSON.getStr("splitEntrustFileName");
|
||||
req.setSplitEntrustFileName(fileName);
|
||||
|
||||
// 分账结算委托书文件上传到拉卡拉服务器
|
||||
JSONObject fileUploadResp = uploadFile(req.getOrderNo(), "SPLIT_ENTRUST_FILE", StringUtils.getFileExt(fileName), UploadUtil.fileUrlToBase64(paramsJSON.getStr("splitEntrustFile")));
|
||||
if (fileUploadResp == null || StrUtil.isBlank(fileUploadResp.getStr("attFileId"))) {
|
||||
throw new ApiException(I18nUtil._("分账结算委托书上传失败!"));
|
||||
}
|
||||
|
||||
String splitEntrustFilePath = fileUploadResp.getStr("attFileId");
|
||||
req.setSplitEntrustFilePath(splitEntrustFilePath); //比如:G1/M00/06/64/CrFdEmBQc-aAGc_XAAAiIbS3WIE960.pdf;
|
||||
|
||||
// 正式上线的时候,调整 api 地址
|
||||
String domain = projectDomain;
|
||||
if (isProdProject()) {
|
||||
domain += "/api";
|
||||
}
|
||||
// 给拉卡拉通知的回调地址
|
||||
String retUrl = domain + "/mobile/shop/lakala/ledger/applyLedgerMerNotify";
|
||||
req.setRetUrl(retUrl);
|
||||
|
||||
paramsJSON.set("orderNo", req.getOrderNo());
|
||||
paramsJSON.set("version", "2.0");
|
||||
paramsJSON.set("ret_url", retUrl);
|
||||
paramsJSON.set("org_code", orgCode);
|
||||
paramsJSON.set("split_entrust_file_path", splitEntrustFilePath);
|
||||
|
||||
String errMsg = "商户分账业务开通申请:";
|
||||
|
||||
try {
|
||||
//3. 发送请求
|
||||
String responseStr = LKLSDK.httpPost(req);
|
||||
|
||||
// 成功返回示例:{'retCode':'000000','retMsg':'申请已受理,请等待审核结果','respData':{'version':'1.0','orderNo':'KFPT20230223181025407788734','orgCode':'1','applyId':681201215598657536}}
|
||||
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
|
||||
if (StrUtil.isBlank(responseStr) || lakalaRespJSON == null) {
|
||||
return CommonResult.failed(I18nUtil._("申请开通分账失败!"));
|
||||
}
|
||||
|
||||
if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) {
|
||||
return CommonResult.failed(lakalaRespJSON.getStr("retMsg"));
|
||||
}
|
||||
|
||||
paramsJSON.set("apply_id", lakalaRespJSON.getByPath("respData.applyId"));
|
||||
paramsJSON.set("remark", lakalaRespJSON.getStr("retMsg"));
|
||||
paramsJSON.set("audit_status_text", paramsJSON.get("remark"));
|
||||
|
||||
paramsJSON.set("mch_id", paramsJSON.get("mchId"));
|
||||
|
||||
// 新增数据
|
||||
// 将 JSON 对象的键名转换为下划线命名
|
||||
LklLedgerMember lklLedgerMember = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMember.class);
|
||||
lklLedgerMemberService.saveOrUpdateByMerCupNo(lklLedgerMember);
|
||||
|
||||
return CommonResult.success(null, "提交成功,待审核中!");
|
||||
} catch (SDKException e) {
|
||||
errMsg += e.getMessage();
|
||||
log.error(errMsg);
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(paramsJSON.getLong("mchId"), paramsJSON.getStr("mchMobile"), CommonConstant.MCH_APPR_STA_NOPASS, errMsg);
|
||||
throw new ApiException(I18nUtil._("商家申请开通分账出错!"), e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 商户分账业务开通申请回调
|
||||
* 参考:https://o.lakala.com/#/home/document/detail?id=379
|
||||
@ -1009,37 +1036,50 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
*/
|
||||
@Override
|
||||
public JSONObject applyLedgerMerNotify(HttpServletRequest request) {
|
||||
log.info("商户分账申请业务异步通知开始");
|
||||
log.debug("商户分账申请业务异步回调通知开始");
|
||||
|
||||
// 验签
|
||||
String authorization = request.getHeader("Authorization");
|
||||
String requestBody = LakalaUtil.getBody(request);
|
||||
log.info("商户分账申请业务回调返回参数:{}", requestBody);
|
||||
log.debug("商户分账申请业务异步回调返回request body参数:{}", requestBody);
|
||||
log.debug("商户分账申请业务异步回调返回authorization参数:{}", authorization);
|
||||
|
||||
boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath);
|
||||
if (!checkSuccess) {
|
||||
log.info("商户分账申请业务回调:验签失败");
|
||||
return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!");
|
||||
log.error("商户分账申请业务回调:验签失败");
|
||||
return JSONUtil.createObj().put("retCode", "OP90002").put("retMsg", "验签失败!");
|
||||
}
|
||||
|
||||
JSONObject paramsJSON = JSONUtil.parseObj(requestBody);
|
||||
|
||||
String errMsg = "商户分账申请业务回调:";
|
||||
JSONObject respData = new JSONObject();
|
||||
respData.put("retCode", "OP90003");
|
||||
respData.put("retMsg", "响应处理失败!");
|
||||
|
||||
if (paramsJSON != null) {
|
||||
String applyId = paramsJSON.getStr("applyId");
|
||||
if (StrUtil.isBlank(applyId)) {
|
||||
log.info("商户分账申请业务回调:applyId为空");
|
||||
respData.put("retMsg", "applyId为空!");
|
||||
String auditStatus = paramsJSON.getStr("auditStatus");
|
||||
if (StrUtil.isBlank(applyId) || StrUtil.isBlank(auditStatus)) {
|
||||
errMsg += "缺少返回必要参数";
|
||||
log.error(errMsg + ":applyId={}, auditStatus={}", applyId, auditStatus);
|
||||
|
||||
respData.put("retMsg", errMsg);
|
||||
return respData;
|
||||
}
|
||||
|
||||
if (lklLedgerMemberService.getByApplyId(applyId, CommonConstant.Enable) != null) {
|
||||
//auditStatus:1:通过,2拒绝
|
||||
if (!auditStatus.equals("1")) {
|
||||
respData.put("retMsg", "商户分账申请被驳回!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByApplyId(applyId, CommonConstant.Enable);
|
||||
if (lklLedgerMember != null) {
|
||||
respData.put("retCode", lklSuccessCode);
|
||||
respData.put("retMsg", "操作成功!");
|
||||
log.info("商户分账申请业务回调:已处理成功,不需再重新处理");
|
||||
respData.put("retMsg", "商户分账申请已处理成功!");
|
||||
log.debug("商户分账申请业务回调:已处理成功,不需再重新处理");
|
||||
return respData;
|
||||
}
|
||||
|
||||
// 更改本地分账记录状态数据
|
||||
@ -1055,24 +1095,27 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
);
|
||||
|
||||
if (success) {
|
||||
respData.put("retCode", lklSuccessCode);
|
||||
respData.put("retMsg", "操作成功!");
|
||||
log.info("商户分账申请业务回调:处理成功");
|
||||
|
||||
// 重要注:商户分账申请业务成功后,同时也会新增接收方,这时系统绑定接收方(平台方和代理商),绑定之前,要判断是否已经绑定过了?
|
||||
JSONObject bindParamsJSON = new JSONObject();
|
||||
bindParamsJSON.put("merInnerNo", paramsJSON.getStr("merInnerNo"));
|
||||
bindParamsJSON.put("merCupNo", merCupNo);
|
||||
Pair<Boolean, String> bindResult = innerApplyLedgerMerReceiverBind(bindParamsJSON);
|
||||
if (bindResult.getFirst()) {
|
||||
log.info("商户分账申请业务回调:", bindResult.getSecond());
|
||||
} else {
|
||||
log.error("商户分账申请业务回调:", bindResult.getSecond());
|
||||
if (!bindResult.getFirst()) {
|
||||
errMsg += bindResult.getSecond();
|
||||
log.error("商户{}预绑定接收方出错:{}", merCupNo, bindResult.getSecond());
|
||||
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerMember.getMch_id(), "", CommonConstant.MCH_APPR_STA_NOPASS, errMsg);
|
||||
respData.put("retMsg", "操作成功!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
// 更新商家的hasApplySplit状态=1
|
||||
lklLedgerMemberService.updateMulStatus(merCupNo, "", 0, 1, 0, 0);
|
||||
// 更新商家的hasApplySplit状态=1;has_esigned=1
|
||||
lklLedgerMemberService.updateMulStatus(merCupNo, "", 1, 1, 0, 0);
|
||||
|
||||
respData.put("retCode", lklSuccessCode);
|
||||
respData.put("retMsg", "操作成功!");
|
||||
log.debug("商户分账申请业务回调:处理成功");
|
||||
return respData;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1231,8 +1274,9 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String splitEntrustFileBase64 = UploadUtil.fileUrlToBase64(paramsJSON.getStr("entrustFile")); // 这个是 url 地址,不是 base64 字节码
|
||||
req.setEntrustFileName(fileName);
|
||||
|
||||
// 正式上线的时候,调整 api 地址
|
||||
String domain = projectDomain;
|
||||
if (isProd()) {
|
||||
if (isProdProject()) {
|
||||
domain += "/api";
|
||||
}
|
||||
// 给拉卡拉通知的回调地址
|
||||
@ -1263,7 +1307,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String responseStr = LKLSDK.httpPost(req);
|
||||
|
||||
JSONObject lakalaRespJSON = JSONUtil.parseObj(responseStr);
|
||||
if (lakalaRespJSON == null || !lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) {
|
||||
if (lakalaRespJSON == null) {
|
||||
throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg")));
|
||||
}
|
||||
|
||||
if (!lakalaRespJSON.getStr("retCode").equals(lklSuccessCode)) {
|
||||
throw new ApiException(I18nUtil._(lakalaRespJSON.getStr("retMsg")));
|
||||
}
|
||||
|
||||
@ -1275,7 +1323,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
LklLedgerMerReceiverBind lklLedgerMerReceiverBind = JSONUtil.toBean(StringUtils.convertCamelToSnake(paramsJSON.toString()), LklLedgerMerReceiverBind.class);
|
||||
lklLedgerMerReceiverBindService.saveOrUpdateByMerCupNoReceiverNo(lklLedgerMerReceiverBind);
|
||||
|
||||
|
||||
return CommonResult.success(lklLedgerMerReceiverBind, "提交成功,待审核中!");
|
||||
} catch (SDKException e) {
|
||||
log.error("分账绑定关系申请失败:", e);
|
||||
@ -1342,7 +1389,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
req.setEntrustFileName(entrustFileName);
|
||||
|
||||
String domain = projectDomain;
|
||||
if (isProd()) {
|
||||
if (isProdProject()) {
|
||||
domain += "/api";
|
||||
}
|
||||
// 给拉卡拉通知的回调地址
|
||||
@ -1415,15 +1462,16 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
*/
|
||||
@Override
|
||||
public JSONObject applyLedgerMerReceiverBindNotify(HttpServletRequest request) {
|
||||
log.debug("分账绑定关系申请业务异步通知开始");
|
||||
log.debug("分账商家绑定接收方异步回调通知开始");
|
||||
// 验签
|
||||
String authorization = request.getHeader("Authorization");
|
||||
String requestBody = LakalaUtil.getBody(request);
|
||||
log.debug("分账绑定关系申请业务回调返回参数:{}", requestBody);
|
||||
log.debug("分账商家绑定接收方异步回调返回request body参数:{}", requestBody);
|
||||
log.debug("分账商家绑定接收方异步回调返回authorization参数:{}", authorization);
|
||||
|
||||
boolean checkSuccess = LakalaUtil.verify(authorization, requestBody, lklNotifyCerPath);
|
||||
if (!checkSuccess) {
|
||||
return JSONUtil.createObj().set("retCode", "OP90002").set("retMsg", "验签失败!");
|
||||
return JSONUtil.createObj().put("retCode", "OP90002").put("retMsg", "验签失败!");
|
||||
}
|
||||
|
||||
JSONObject paramsJSON = JSONUtil.parseObj(requestBody);
|
||||
@ -1433,7 +1481,23 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
|
||||
if (paramsJSON != null) {
|
||||
String merCupNo = paramsJSON.getStr("merCupNo");
|
||||
Boolean success = lklLedgerMerReceiverBindService.updateAuditResult(paramsJSON.getStr("applyId"),
|
||||
String applyId = paramsJSON.getStr("applyId");
|
||||
String auditStatus = paramsJSON.getStr("auditStatus");
|
||||
if (StrUtil.isBlank(merCupNo) || StrUtil.isBlank(applyId) || StrUtil.isBlank(auditStatus)) {
|
||||
String errMsg = "缺少返回必要参数";
|
||||
log.error(errMsg + ":applyId={}, applyId={}, auditStatus={}", merCupNo, applyId, auditStatus);
|
||||
|
||||
respData.put("retMsg", errMsg);
|
||||
return respData;
|
||||
}
|
||||
|
||||
//auditStatus:1:通过,2拒绝
|
||||
if (!auditStatus.equals("1")) {
|
||||
respData.put("retMsg", "绑定接收方被驳回!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
Boolean success = lklLedgerMerReceiverBindService.updateAuditResult(applyId,
|
||||
paramsJSON.getStr("merInnerNo"),
|
||||
merCupNo,
|
||||
paramsJSON.getStr("receiverNo"),
|
||||
@ -1443,8 +1507,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
paramsJSON.getStr("auditStatusText"),
|
||||
paramsJSON.getStr("remark"));
|
||||
if (success) {
|
||||
respData.put("retCode", lklSuccessCode);
|
||||
|
||||
// 更改商家的状态 has_bind_receiver 状态=1
|
||||
lklLedgerMemberService.updateMulStatus(merCupNo, "", 0, 0, 0, 1);
|
||||
|
||||
@ -1455,16 +1517,19 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String mchMobile = shopEntry.getLogin_mobile();
|
||||
Pair<Integer, String> retPair = shopStoreBaseService.merchEntryInfo2StoreInfo(mchMobile);
|
||||
if (retPair.getFirst() > 0) {
|
||||
// 2025-05-17暂停e签宝电子合同生成流程
|
||||
// 更改合同记录表的店铺id
|
||||
esignContractService.updateContractStoreId(mchMobile, retPair.getFirst());
|
||||
// esignContractService.updateContractStoreId(mchMobile, retPair.getFirst());
|
||||
// 填充合同模版表的店铺Id
|
||||
esignContractFillingFileService.updateContractFillingStoreId(mchMobile, retPair.getFirst());
|
||||
// esignContractFillingFileService.updateContractFillingStoreId(mchMobile, retPair.getFirst());
|
||||
// 店铺创建状态已完成
|
||||
shopMchEntryService.updateMerchEntryStoreStatus(mchMobile, CommonConstant.Enable);
|
||||
}
|
||||
}
|
||||
|
||||
respData.put("retCode", lklSuccessCode);
|
||||
respData.put("retMsg", "操作成功!");
|
||||
return respData;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -146,7 +146,7 @@ public class LklLedgerMemberServiceImpl extends BaseServiceImpl<LklLedgerMemberM
|
||||
int i = 0;
|
||||
UpdateWrapper<LklLedgerMember> updateWrapper = new UpdateWrapper<>();
|
||||
if (StrUtil.isNotBlank(mchMobile)) {
|
||||
updateWrapper.eq("mch_mobile", mchMobile);
|
||||
updateWrapper.eq("contact_mobile", mchMobile);
|
||||
}
|
||||
if (StrUtil.isNotBlank(merCupNo)) {
|
||||
updateWrapper.eq("mer_cup_no", merCupNo);
|
||||
|
||||
@ -194,6 +194,8 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
|
||||
if (CollectionUtil.isNotEmpty(attachList)) {
|
||||
reqParam.put("attachList", attachList);
|
||||
}
|
||||
|
||||
reqParams.add(reqParam);
|
||||
}
|
||||
|
||||
return reqParams;
|
||||
@ -208,7 +210,7 @@ public class LklLedgerReceiverServiceImpl extends BaseServiceImpl<LklLedgerRecei
|
||||
@Override
|
||||
public Boolean innerApplyLedgerReceiver(String merCupNo, Long platformId) {
|
||||
JSONArray buildApplyLedgerReceiverReqParams = buildApplyLedgerReceiverReqParams(platformId);
|
||||
if (CollectionUtil.isEmpty(buildApplyLedgerReceiverReqParams)) {
|
||||
if (buildApplyLedgerReceiverReqParams == null || buildApplyLedgerReceiverReqParams.isEmpty()) {
|
||||
log.error("没有平台信息或代理商信息");
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -23,8 +23,6 @@ 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.EsignContractFillingFileService;
|
||||
import com.suisung.mall.shop.esign.service.EsignContractService;
|
||||
import com.suisung.mall.shop.lakala.service.LklBanksService;
|
||||
import com.suisung.mall.shop.lakala.service.LklLedgerReceiverService;
|
||||
import com.suisung.mall.shop.lakala.utils.LakalaUtil;
|
||||
@ -71,6 +69,9 @@ public class LklTkServiceImpl {
|
||||
@Value("${spring.profiles.active}")
|
||||
private String profile;
|
||||
|
||||
@Value("${lakala.is_prod}")
|
||||
private Boolean isLklProd;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private ShopMchEntryService shopMchEntryService;
|
||||
@ -79,13 +80,17 @@ public class LklTkServiceImpl {
|
||||
@Resource
|
||||
private LklLedgerReceiverService lklLedgerReceiverService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private EsignContractService esignContractService;
|
||||
// @Lazy
|
||||
// @Resource
|
||||
// private EsignContractService esignContractService;
|
||||
//
|
||||
// @Lazy
|
||||
// @Resource
|
||||
// private EsignContractFillingFileService esignContractFillingFileService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
private EsignContractFillingFileService esignContractFillingFileService;
|
||||
private LakalaApiServiceImpl lakalaApiService;
|
||||
|
||||
@Lazy
|
||||
@Resource
|
||||
@ -103,10 +108,9 @@ public class LklTkServiceImpl {
|
||||
return tkServerUrl + urlPath;
|
||||
}
|
||||
|
||||
protected boolean isProd() {
|
||||
return false;
|
||||
protected boolean isProdProject() {
|
||||
// 生产环境的时候启动该配置
|
||||
// return "prod".equalsIgnoreCase(profile);
|
||||
return "prod".equalsIgnoreCase(profile);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -151,7 +155,6 @@ public class LklTkServiceImpl {
|
||||
header.put("Authorization", authorization);
|
||||
|
||||
|
||||
String updUrlPath = isProd() ? "/registration/file/base/upload" : "/sit/htkregistration/file/base/upload";
|
||||
String fileBase64 = UploadUtil.multipartFileToBase64(file);
|
||||
if (StrUtil.isBlank(fileBase64)) {
|
||||
return CommonResult.failed("解析文件转换失败");
|
||||
@ -164,8 +167,14 @@ public class LklTkServiceImpl {
|
||||
requestBody.put("sourcechnl", "0"); // 来源: 0:PC,1:安卓,2:IOS
|
||||
requestBody.put("isOcr", "true");
|
||||
|
||||
String urlPath = "/sit/htkregistration/file/base/upload";
|
||||
if (isLklProd) {
|
||||
// 生产环境启用
|
||||
urlPath = "/registration/file/base/upload";
|
||||
}
|
||||
|
||||
try {
|
||||
ResponseEntity<JSONObject> updResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(updUrlPath), header, requestBody, JSONObject.class);
|
||||
ResponseEntity<JSONObject> updResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(urlPath), header, requestBody, JSONObject.class);
|
||||
if (ObjectUtil.isEmpty(updResponse)
|
||||
|| updResponse.getStatusCode() != HttpStatus.OK
|
||||
|| ObjectUtil.isEmpty(updResponse.getBody())) {
|
||||
@ -221,13 +230,20 @@ public class LklTkServiceImpl {
|
||||
JSONObject header = new JSONObject();
|
||||
header.put("Authorization", authorization);
|
||||
|
||||
String ocrUrlPath = isProd() ? "/registration/ocr/result" : "/sit/htkregistration/ocr/result";
|
||||
|
||||
JSONObject ocrRequestBody = new JSONObject();
|
||||
ocrRequestBody.put("batchNo", batchNo);
|
||||
ocrRequestBody.put("imgType", imgType);
|
||||
logger.info("ocr请求参数:{}", ocrRequestBody);
|
||||
|
||||
String urlPath = "/sit/htkregistration/ocr/result";
|
||||
if (isLklProd) {
|
||||
// 生产环境启用
|
||||
urlPath = "/registration/ocr/result";
|
||||
}
|
||||
|
||||
try {
|
||||
ResponseEntity<JSONObject> ocrResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(ocrUrlPath), header, ocrRequestBody, JSONObject.class);
|
||||
ResponseEntity<JSONObject> ocrResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(urlPath), header, ocrRequestBody, JSONObject.class);
|
||||
if (ObjectUtil.isEmpty(ocrResponse)
|
||||
|| ocrResponse.getStatusCode() != HttpStatus.OK
|
||||
|| ObjectUtil.isEmpty(ocrResponse.getBody())) {
|
||||
@ -264,7 +280,14 @@ public class LklTkServiceImpl {
|
||||
formData.put("client_id", clientId);
|
||||
formData.put("client_secret", clientSecret);
|
||||
|
||||
String response = RestTemplateHttpUtil.sendPostFormData(buildLklTkUrl("/sit/htkauth/oauth/token"), null, formData, String.class);
|
||||
String urlPath = "/sit/htkauth/oauth/token";
|
||||
if (isLklProd) {
|
||||
// 生产环境启用
|
||||
urlPath = "/auth/oauth/token";
|
||||
}
|
||||
|
||||
|
||||
String response = RestTemplateHttpUtil.sendPostFormData(buildLklTkUrl(urlPath), null, formData, String.class);
|
||||
if (ObjectUtil.isEmpty(response)) {
|
||||
return "";
|
||||
}
|
||||
@ -298,7 +321,7 @@ public class LklTkServiceImpl {
|
||||
header.put("Authorization", getLklTkAuthorization());
|
||||
|
||||
// 获取商家入驻信息,组成请求参数
|
||||
ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, bizLicenseNumber, CommonConstant.MCH_APPR_STA_PASS, CommonConstant.MCH_APPR_STA_LKL_PADDING);
|
||||
ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, bizLicenseNumber);
|
||||
if (ObjectUtil.isEmpty(shopMchEntry)) {
|
||||
return Pair.of(false, "商家入驻信息不存在");
|
||||
}
|
||||
@ -401,7 +424,6 @@ public class LklTkServiceImpl {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 费率和设备、活动
|
||||
JSONObject bizContent = new JSONObject();
|
||||
bizContent.put("activityId", 687);
|
||||
@ -465,7 +487,14 @@ public class LklTkServiceImpl {
|
||||
formData.put("attchments", attachments);
|
||||
// 附件文件相关结束
|
||||
|
||||
String urlPath = isProd() ? "/registration/merchant" : "/sit/htkregistration/merchant";
|
||||
String urlPath = "/sit/htkregistration/merchant";
|
||||
if (isLklProd) {
|
||||
// 生产环境启用
|
||||
urlPath = "/registration/merchant";
|
||||
}
|
||||
|
||||
|
||||
// String urlPath = isProd() ? "/registration/merchant" : "/sit/htkregistration/merchant";
|
||||
try {
|
||||
logger.info("进件请求参数:{}", JSONUtil.toJsonStr(formData));
|
||||
|
||||
@ -497,7 +526,7 @@ public class LklTkServiceImpl {
|
||||
}
|
||||
|
||||
/**
|
||||
* 拉卡拉进件异步通知
|
||||
* (重要)拉卡拉进件异步通知
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
@ -533,10 +562,15 @@ public class LklTkServiceImpl {
|
||||
|
||||
// 逻辑处理
|
||||
JSONObject dataJSON = JSONUtil.parseObj(data);
|
||||
if (dataJSON.isEmpty() || StrUtil.isBlank(dataJSON.getStr("externalCustomerNo"))) {
|
||||
if (dataJSON.isEmpty() || StrUtil.isBlank(dataJSON.getStr("externalCustomerNo")) || StrUtil.isBlank(dataJSON.getStr("status"))) {
|
||||
return new JSONObject().set("code", "500").set("message", "参数解析出错");
|
||||
}
|
||||
|
||||
String auditStatus = dataJSON.getStr("status");
|
||||
if (!"SUCCESS".equals(auditStatus) && !"REVIEW_PASS".equals(auditStatus)) {
|
||||
return new JSONObject().set("code", "500").set("message", "返回审核状态有误");
|
||||
}
|
||||
|
||||
// 给商家入驻表增加拉卡拉的商户号和拉卡拉返回的数据
|
||||
String merCupNo = dataJSON.getStr("externalCustomerNo"); //拉卡拉外部商户号
|
||||
String merInnerNo = dataJSON.getStr("customerNo"); //拉卡拉内部商户号
|
||||
@ -551,24 +585,40 @@ public class LklTkServiceImpl {
|
||||
return new JSONObject().set("code", "500").set("message", "更新商户号失败");
|
||||
}
|
||||
|
||||
logger.debug("###开始异步执行生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件###");
|
||||
// 生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件
|
||||
Boolean genSuccess = esignContractFillingFileService.fillDocTemplate(shopMchEntry.getLogin_mobile(), "");
|
||||
if (!genSuccess) {
|
||||
logger.error("###商家入驻电子合同生成失败###");
|
||||
// 备注:RMK 采用拉卡拉的入网电子合同签署流程,暂停e签宝的电子合同生成流程
|
||||
// logger.debug("###开始异步执行生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件###");
|
||||
// // 生成电子合同模版和填充模版数据,并生该商家和平台方签署的未盖章合同文件
|
||||
// Boolean genSuccess = esignContractFillingFileService.fillDocTemplate(shopMchEntry.getLogin_mobile(), "");
|
||||
// if (!genSuccess) {
|
||||
// logger.error("###商家入驻电子合同生成失败###");
|
||||
// }
|
||||
//
|
||||
// // 1、发起E签宝合同签署;签署完成之后,生成分账盖章协议书,下一步才能申请分账功能权限;
|
||||
// Pair<Boolean, String> resPair = esignContractService.innerSignFlowCreateByFile(shopMchEntry.getLogin_mobile());
|
||||
// if (!resPair.getFirst()) {
|
||||
// logger.error("###商家发起电子签名失败:{}###", resPair.getSecond());
|
||||
// }
|
||||
|
||||
// 给商家申请分账功能使用;务必检查是否申请过?申请过忽略
|
||||
if (success && StrUtil.isNotBlank(shopMchEntry.getContract_download_url())) {
|
||||
|
||||
// 1、(电子合同)给商家申请分账功能使用;务必检查是否申请过?申请过忽略
|
||||
// 下一步等待拉卡拉审核通过,再绑定接收方和商家的关系
|
||||
Pair<Boolean, String> retPair = lakalaApiService.innerApplyLedgerMer(shopMchEntry.getLkl_mer_cup_no());
|
||||
if (!retPair.getFirst()) {
|
||||
logger.error("商家申请分账功能失败:{}", retPair.getSecond());
|
||||
}
|
||||
|
||||
// 1、发起E签宝合同签署;签署完成之后,生成分账盖章协议书,下一步才能申请分账功能权限;
|
||||
Pair<Boolean, String> resPair = esignContractService.innerSignFlowCreateByFile(shopMchEntry.getLogin_mobile());
|
||||
if (!resPair.getFirst()) {
|
||||
logger.error("###商家发起电子签名失败:{}###", resPair.getSecond());
|
||||
}
|
||||
// 更新商家的hasEsigned状态=1
|
||||
// lklLedgerMemberService.updateMulStatus("", shopMchEntry.getLogin_mobile(), 1, 0, 0, 0);
|
||||
|
||||
// 2:新增一个接收方记录,起码要一个平台方,代理商根据入驻信息新增
|
||||
genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(merCupNo, shopMchEntry.getDistributor_id());
|
||||
Boolean genSuccess = lklLedgerReceiverService.innerApplyLedgerReceiver(merCupNo, shopMchEntry.getDistributor_id());
|
||||
if (!genSuccess) {
|
||||
logger.error("###申请分账接收方失败###");
|
||||
logger.error("申请分账接收方失败");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return new JSONObject().set("code", "200").set("message", "成功");
|
||||
}
|
||||
@ -603,9 +653,6 @@ public class LklTkServiceImpl {
|
||||
countryName = areaNames[2];
|
||||
}
|
||||
|
||||
String urlPath = isProd() ? "/registration/organization" : "/sit/htkregistration/organization";
|
||||
urlPath = isBankArea ? urlPath + "/bank" : urlPath; // 银行地区
|
||||
|
||||
String authorization = getLklTkAuthorization();
|
||||
if (StrUtil.isBlank(authorization)) {
|
||||
logger.error("获取拉卡拉token失败");
|
||||
@ -615,6 +662,13 @@ public class LklTkServiceImpl {
|
||||
JSONObject header = new JSONObject();
|
||||
header.put("Authorization", getLklTkAuthorization());
|
||||
|
||||
String urlPath = "/sit/htkregistration/organization";
|
||||
if (isLklProd) {
|
||||
// 生产环境启用
|
||||
urlPath = "/registration/organization";
|
||||
}
|
||||
urlPath = isBankArea ? urlPath + "/bank" : urlPath; // 银行地区
|
||||
|
||||
|
||||
// 省份列表
|
||||
ResponseEntity<JSONArray> response = RestTemplateHttpUtil.sendGetWithHeader(buildLklTkUrl(urlPath + "/1"), header, JSONArray.class);
|
||||
@ -702,7 +756,6 @@ public class LklTkServiceImpl {
|
||||
JSONObject header = new JSONObject();
|
||||
header.put("Authorization", getLklTkAuthorization());
|
||||
|
||||
String updUrlPath = isProd() ? "/registration/file/base/upload" : "/sit/htkregistration/file/base/upload";
|
||||
String fileBase64 = UploadUtil.fileUrlToBase64(fileUrl);
|
||||
if (StrUtil.isBlank(fileBase64)) {
|
||||
logger.error("文件转换失败");
|
||||
@ -716,8 +769,14 @@ public class LklTkServiceImpl {
|
||||
requestBody.put("sourcechnl", "0"); // 来源: 0:PC,1:安卓,2:IOS
|
||||
requestBody.put("isOcr", "true");
|
||||
|
||||
String urlPath = "/sit/htkregistration/file/base/upload";
|
||||
if (isLklProd) {
|
||||
// 生产环境启用
|
||||
urlPath = "/registration/file/base/upload";
|
||||
}
|
||||
|
||||
try {
|
||||
ResponseEntity<JSONObject> updResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(updUrlPath), header, requestBody, JSONObject.class);
|
||||
ResponseEntity<JSONObject> updResponse = RestTemplateHttpUtil.sendPostBodyBackEntity(buildLklTkUrl(urlPath), header, requestBody, JSONObject.class);
|
||||
if (ObjectUtil.isEmpty(updResponse)
|
||||
|| updResponse.getStatusCode() != HttpStatus.OK) {
|
||||
logger.error("上传文件返回值有误");
|
||||
|
||||
@ -190,5 +190,15 @@ public interface ShopMchEntryService {
|
||||
*/
|
||||
Boolean updateMerchEntryLklEcNo(Long id, String lklEcNo, String lklEcName, String lklEcResultUrl, String ecDownloadUrl);
|
||||
|
||||
/**
|
||||
* 更新商家入驻申请的审批状态和审批备注
|
||||
*
|
||||
* @param mchId 商家入驻申请 ID,mchId和mchMobile至少必填一个
|
||||
* @param mchMobile 商家注册的手机号 mchId和mchMobile至少必填一个
|
||||
* @param approvalStatus 入驻商家的审批状态:1-已通过;2-未通过;3-待审核;4-未申请过;5-已提交拉卡拉审核;
|
||||
* @param approvalRemark 审批备注
|
||||
* @return
|
||||
*/
|
||||
Boolean updateMerchEntryApprovalByMchId(Long mchId, String mchMobile, Integer approvalStatus, String approvalRemark);
|
||||
|
||||
}
|
||||
@ -828,6 +828,7 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
|
||||
updateWrapper.set("lkl_tk_reg_notify_req", lklTkRegNotifyReq);
|
||||
}
|
||||
|
||||
|
||||
return update(updateWrapper);
|
||||
}
|
||||
|
||||
@ -879,8 +880,43 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
|
||||
|
||||
if (StrUtil.isNotBlank(ecDownloadUrl)) {
|
||||
updateWrapper.set("contract_download_url", ecDownloadUrl);
|
||||
updateWrapper.set("signed_status", CommonConstant.CONTRACT_SIGN_STA_FINISH);
|
||||
}
|
||||
|
||||
return update(updateWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新商家入驻申请的审批状态和审批备注
|
||||
*
|
||||
* @param mchId 商家入驻申请 ID,mchId和mchMobile至少必填一个
|
||||
* @param mchMobile 商家注册的手机号 mchId和mchMobile至少必填一个
|
||||
* @param approvalStatus 入驻商家的审批状态:1-已通过;2-未通过;3-待审核;4-未申请过;5-已提交拉卡拉审核;
|
||||
* @param approvalRemark 审批备注
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateMerchEntryApprovalByMchId(Long mchId, String mchMobile, Integer approvalStatus, String approvalRemark) {
|
||||
if (ObjectUtil.isEmpty(mchId) && StrUtil.isBlank(mchMobile)) {
|
||||
log.error("更新商家入驻申请审批状态和备注失败,缺少必要参数");
|
||||
return false;
|
||||
}
|
||||
|
||||
UpdateWrapper<ShopMchEntry> updateWrapper = new UpdateWrapper<>();
|
||||
if (ObjectUtil.isNotEmpty(mchId)) {
|
||||
updateWrapper.eq("id", mchId);
|
||||
}
|
||||
if (StrUtil.isNotBlank(mchMobile)) {
|
||||
updateWrapper.eq("login_mobile", mchMobile);
|
||||
}
|
||||
|
||||
if (ObjectUtil.isNotEmpty(approvalStatus)) {
|
||||
updateWrapper.set("approval_status", approvalStatus);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(approvalRemark)) {
|
||||
updateWrapper.set("approval_remark", approvalRemark);
|
||||
}
|
||||
|
||||
return update(updateWrapper);
|
||||
}
|
||||
|
||||
@ -3008,7 +3008,7 @@ public class ShopStoreBaseServiceImpl extends BaseServiceImpl<ShopStoreBaseMappe
|
||||
return Pair.of(0, "商家账号异常!");
|
||||
}
|
||||
|
||||
ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, "", CommonConstant.MCH_APPR_STA_PASS);
|
||||
ShopMchEntry shopMchEntry = shopMchEntryService.getShopMerchEntryByCondition(mchMobile, "");
|
||||
if (ObjectUtil.isEmpty(shopMchEntry)) {
|
||||
logger.error("生成店铺:入驻信息不能为空");
|
||||
return Pair.of(0, "入驻信息不能为空");
|
||||
|
||||
@ -144,7 +144,7 @@ sf-express:
|
||||
#拉卡拉进件配置
|
||||
lakala:
|
||||
#服务地址
|
||||
server_url: https://test.wsmsd.cn
|
||||
server_url: https://test.wsmsd.cn/sit
|
||||
#应用Id
|
||||
app_id: OP00000003
|
||||
#商户证书序列号
|
||||
@ -161,10 +161,11 @@ lakala:
|
||||
merchant_no: 82229007392000A
|
||||
#终端号
|
||||
term_no: D9296400
|
||||
is_prod: false
|
||||
# 拉卡拉拓客进件配置
|
||||
tk:
|
||||
#服务地址
|
||||
server_url: https://test.wsmsd.cn/sit
|
||||
server_url: https://test.wsmsd.cn
|
||||
client_id: lsycs
|
||||
client_secret: XPa1HB5d55Ig0qV8
|
||||
user_no: 29153396
|
||||
|
||||
@ -171,7 +171,7 @@ lakala:
|
||||
# #终端号码,M0780629(B2B收银台) M0780798(专业化扫码)
|
||||
# term_no: M0780798
|
||||
#服务地址
|
||||
server_url: https://test.wsmsd.cn
|
||||
server_url: https://test.wsmsd.cn/sit
|
||||
#应用Id
|
||||
app_id: OP00000003
|
||||
#商户证书序列号
|
||||
@ -188,6 +188,7 @@ lakala:
|
||||
merchant_no: 82229007392000A
|
||||
#终端号
|
||||
term_no: D9296400
|
||||
is_prod: false
|
||||
#拉卡拉拓客进件配置
|
||||
tk:
|
||||
#服务地址
|
||||
|
||||
Loading…
Reference in New Issue
Block a user