商家入驻,方法优化, fix bug
This commit is contained in:
parent
11d8c4e934
commit
fc07545790
@ -24,11 +24,14 @@ import com.suisung.mall.shop.base.service.ShopBaseExpressService;
|
||||
import com.suisung.mall.shop.order.service.ShopOrderDeliveryAddressService;
|
||||
import com.suisung.mall.shop.order.service.ShopOrderLogisticsService;
|
||||
import com.suisung.mall.shop.order.service.ShopOrderReturnService;
|
||||
import com.suisung.mall.shop.wechat.service.WxOrderShippingService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.security.MessageDigest;
|
||||
@ -73,6 +76,9 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService
|
||||
}
|
||||
|
||||
private final String request_url = "https://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx";
|
||||
@Lazy
|
||||
@Resource
|
||||
private WxOrderShippingService wxOrderShippingService;
|
||||
@Autowired
|
||||
private ShopOrderLogisticsService shopOrderLogisticsService;
|
||||
@Autowired
|
||||
@ -84,6 +90,16 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService
|
||||
@Autowired
|
||||
private ShopOrderReturnService shopOrderReturnService;
|
||||
|
||||
/**
|
||||
* 向快递鸟发出查询快递物流信息请求
|
||||
* <p>
|
||||
* 参考返回的数据:https://www.yuque.com/kdnjishuzhichi/dfcrg1/yv7zgv
|
||||
*
|
||||
* @param order_tracking_number
|
||||
* @param shipperCode
|
||||
* @param CustomerName
|
||||
* @return
|
||||
*/
|
||||
public String orderOnlineByJson(String order_tracking_number, String shipperCode, String CustomerName) {
|
||||
//组装应用级参数
|
||||
String RequestData = "{" +
|
||||
@ -104,6 +120,7 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService
|
||||
String dataSign = encrypt(RequestData, appKey, "UTF-8");
|
||||
params.put("DataSign", urlEncoder(dataSign, "UTF-8"));
|
||||
params.put("DataType", "2");
|
||||
// 重要:发送请求获取物流轨迹
|
||||
String result = HttpUtil.post(request_url, params);
|
||||
|
||||
return result;
|
||||
@ -270,11 +287,24 @@ public class KdApiExpressSearchServiceImpl implements KdApiExpressSearchService
|
||||
|
||||
resultMap.put("shipperCode", logistics_info.get("ShipperCode"));
|
||||
resultMap.put("logisticCode", logistics_info.get("LogisticCode"));
|
||||
resultMap.put("state", logistics_info.get("State"));
|
||||
// state 状态:
|
||||
// 暂无轨迹信息 0 货物暂无轨迹信息
|
||||
// 已揽收 1 快递员已上门揽收快递
|
||||
// 在途中 2 货物在途中运输
|
||||
// 已签收 3 快件被签收
|
||||
// 问题件 4 货物运输途中存在异常(若中途存在问题件,则后续轨迹将一直保持问题件状态)
|
||||
// 转寄 5 快递被转寄到新地址
|
||||
|
||||
resultMap.put("state", state);
|
||||
resultMap.put("stateEx", StateEx);
|
||||
resultMap.put("express_state", stateMap.get(StateEx));
|
||||
resultMap.put("traces", logistics_info.get("Traces"));
|
||||
|
||||
if (state.equals(3)) {
|
||||
// 发送数据给微信提醒用户,尽快确认收货
|
||||
wxOrderShippingService.notifyConfirmReceive(orderId);
|
||||
}
|
||||
|
||||
return resultMap;
|
||||
|
||||
}
|
||||
|
||||
@ -694,87 +694,90 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
if (!checkResult.getFirst()) {
|
||||
return JSONUtil.createObj().set("code", "FAIL").set("retMsg", checkResult.getSecond());
|
||||
}
|
||||
JSONObject paramsJSON = JSONUtil.parseObj(checkResult.getSecond());
|
||||
|
||||
|
||||
String errMsg = "入网电子合同申请回调:";
|
||||
|
||||
JSONObject respData = new JSONObject();
|
||||
respData.put("code", "FAIL");
|
||||
respData.put("message", "处理失败!");
|
||||
respData.set("code", "FAIL").set("message", "处理失败!");
|
||||
|
||||
if (paramsJSON != null) {
|
||||
Long ecApplyId = paramsJSON.getLong("ecApplyId");
|
||||
String ecNo = paramsJSON.getStr("ecNo");
|
||||
String ecStatus = paramsJSON.getStr("ecStatus"); // COMPLETED
|
||||
if (ecStatus == null || !ecStatus.equals("COMPLETED")) {
|
||||
log.debug("入网电子合同申请未签署完成!");
|
||||
respData.put("message", "商户入网电子合同尚未签署,请稍候!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
if (ecApplyId == null || StrUtil.isBlank(ecNo)) {
|
||||
log.error("入网电子合同申请回调:ecApplyId 为空");
|
||||
respData.put("message", "ecApplyId 返回空值!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
LklLedgerEc lklLedgerEc = lklLedgerEcService.getByApplyId(ecApplyId, "", CommonConstant.Enable);
|
||||
if (lklLedgerEc == null) {
|
||||
log.error("入网电子合同申请回调:找不到对应入网lklLedgerEc电子合同记录");
|
||||
respData.put("message", "找不到对应入网电子合同记录!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
if ("COMPLETED".equals(lklLedgerEc.getEc_status())) {
|
||||
respData.put("code", "SUCCESS");
|
||||
respData.put("message", "操作成功!");
|
||||
log.info("商户入网电子合同申请回调:已处理成功,不需再重新处理");
|
||||
return respData;
|
||||
}
|
||||
|
||||
// 把 base64 合同文件,上传到 cos 服务器,返回 url 地址
|
||||
Pair<String, String> ecFilePair = ledgerMerEcDownload(ecApplyId);
|
||||
String ecCosFileUrl = "";
|
||||
String eclklFilePath = "";
|
||||
if (ecFilePair != null) {
|
||||
ecCosFileUrl = ecFilePair.getFirst();
|
||||
eclklFilePath = ecFilePair.getSecond();
|
||||
}
|
||||
|
||||
// 更改本地记录状态数据
|
||||
LklLedgerEc updRecord = new LklLedgerEc();
|
||||
updRecord.setEc_apply_id(ecApplyId);
|
||||
updRecord.setEc_no(ecNo);
|
||||
updRecord.setEc_name(paramsJSON.getStr("ecName"));
|
||||
updRecord.setEc_file(ecCosFileUrl); // 合同本地文件COS URL链接
|
||||
updRecord.setLkl_file_path(eclklFilePath);
|
||||
updRecord.setEc_status(paramsJSON.getStr("ecStatus"));
|
||||
// 更新本地数据状态和合同编号、合同名字
|
||||
Boolean success = lklLedgerEcService.updateByApplyId(updRecord);
|
||||
if (success) {
|
||||
// 更新商家入驻表的合同编号,和签署地址,更改状态
|
||||
shopMchEntryService.updateMerchantLklElectronicContractInfo(lklLedgerEc.getMch_id(), ecNo, paramsJSON.getStr("ecName"), lklLedgerEc.getResult_url(), ecCosFileUrl, eclklFilePath);
|
||||
|
||||
// TODO 商家电子合同签署完毕后,收到异步通知,触发拉卡拉商家进件(重要环节)
|
||||
// 下一步,等待拉卡拉系统审核,和人工审核,收到异步通知之后,触发1、e签宝的电子合同签署,2、新增分账接收方
|
||||
Pair<Boolean, String> resultPair = lklTkService.registrationMerchant(lklLedgerEc.getMch_mobile(), "");
|
||||
if (!resultPair.getFirst()) {
|
||||
errMsg += resultPair.getSecond();
|
||||
log.error(errMsg);
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_LKL_NOPASS, errMsg);
|
||||
throw new ApiException(errMsg);
|
||||
}
|
||||
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_LKL_PADDING, "已提交进件申请,请等待机构审核!");
|
||||
|
||||
respData.put("code", "SUCCESS");
|
||||
respData.put("message", "操作成功!");
|
||||
log.info("商户入网电子合同申请回调:处理成功");
|
||||
return respData;
|
||||
}
|
||||
JSONObject paramsJSON = JSONUtil.parseObj(checkResult.getSecond());
|
||||
if (paramsJSON == null) {
|
||||
return respData;
|
||||
}
|
||||
|
||||
throw new ApiException("商户入网电子合同申请回调:处理失败!");
|
||||
Long ecApplyId = paramsJSON.getLong("ecApplyId");
|
||||
String ecNo = paramsJSON.getStr("ecNo");
|
||||
String ecStatus = paramsJSON.getStr("ecStatus"); // COMPLETED
|
||||
if (ecStatus == null || !ecStatus.equals("COMPLETED")) {
|
||||
log.debug("入网电子合同申请未签署完成!");
|
||||
respData.put("message", "商户入网电子合同尚未签署,请稍候!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
if (ecApplyId == null || StrUtil.isBlank(ecNo)) {
|
||||
log.error("入网电子合同申请回调:ecApplyId 为空");
|
||||
respData.put("message", "ecApplyId 返回空值!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
LklLedgerEc lklLedgerEc = lklLedgerEcService.getByApplyId(ecApplyId, "", CommonConstant.Enable);
|
||||
if (lklLedgerEc == null) {
|
||||
log.error("入网电子合同申请回调:找不到对应入网lklLedgerEc电子合同记录");
|
||||
respData.put("message", "找不到对应入网电子合同记录!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
if ("COMPLETED".equals(lklLedgerEc.getEc_status())) {
|
||||
respData.put("code", "SUCCESS");
|
||||
respData.put("message", "操作成功!");
|
||||
log.info("商户入网电子合同申请回调:已处理成功,不需再重新处理");
|
||||
return respData;
|
||||
}
|
||||
|
||||
// 把 base64 合同文件,上传到 cos 服务器,返回 url 地址
|
||||
Pair<String, String> ecFilePair = ledgerMerEcDownload(ecApplyId);
|
||||
String ecCosFileUrl = "";
|
||||
String eclklFilePath = "";
|
||||
if (ecFilePair != null) {
|
||||
ecCosFileUrl = ecFilePair.getFirst();
|
||||
eclklFilePath = ecFilePair.getSecond();
|
||||
}
|
||||
|
||||
// 更改本地记录状态数据
|
||||
LklLedgerEc updRecord = new LklLedgerEc();
|
||||
updRecord.setEc_apply_id(ecApplyId);
|
||||
updRecord.setEc_no(ecNo);
|
||||
updRecord.setEc_name(paramsJSON.getStr("ecName"));
|
||||
updRecord.setEc_file(ecCosFileUrl); // 合同本地文件COS URL链接
|
||||
updRecord.setLkl_file_path(eclklFilePath);
|
||||
updRecord.setEc_status(paramsJSON.getStr("ecStatus"));
|
||||
// 更新本地数据状态和合同编号、合同名字
|
||||
Boolean success = lklLedgerEcService.updateByApplyId(updRecord);
|
||||
if (!success) {
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_LKL_NOPASS, "更新电子合同失败!");
|
||||
respData.set("code", "FAIL").set("message", "更新电子合同失败!");
|
||||
return respData;
|
||||
}
|
||||
|
||||
// 更新商家入驻表的合同编号,和签署地址,更改状态
|
||||
shopMchEntryService.updateMerchantLklElectronicContractInfo(lklLedgerEc.getMch_id(), ecNo, paramsJSON.getStr("ecName"), lklLedgerEc.getResult_url(), ecCosFileUrl, eclklFilePath);
|
||||
|
||||
// TODO 商家电子合同签署完毕后,收到异步通知,触发拉卡拉商家进件(重要环节)
|
||||
// 下一步,等待拉卡拉系统审核,和人工审核,收到异步通知之后,触发1、e签宝的电子合同签署,2、新增分账接收方
|
||||
Pair<Boolean, String> resultPair = lklTkService.registrationMerchant(lklLedgerEc.getMch_mobile(), "");
|
||||
if (!resultPair.getFirst()) {
|
||||
errMsg += resultPair.getSecond();
|
||||
log.error(errMsg);
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_LKL_NOPASS, errMsg);
|
||||
throw new ApiException(errMsg);
|
||||
}
|
||||
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(lklLedgerEc.getMch_id(), "", CommonConstant.MCH_APPR_STA_LKL_PADDING, "已提交进件申请,请等待机构审核!");
|
||||
|
||||
respData.put("code", "SUCCESS");
|
||||
respData.put("message", "操作成功!");
|
||||
log.info("商户入网电子合同申请回调:处理成功");
|
||||
return respData;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -933,8 +936,10 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
if (!checkResult.getFirst()) {
|
||||
return JSONUtil.createObj().set("code", "FAIL").set("retMsg", checkResult.getSecond());
|
||||
}
|
||||
|
||||
// 异步通知返回的数据
|
||||
JSONObject paramsJSON = JSONUtil.parseObj(checkResult.getSecond());
|
||||
// JSONObject paramsJSON = JSONUtil.parseObj(LakalaUtil.getBody(request));
|
||||
log.info("商户分账业务申请回调:paramsJSON={}", paramsJSON);
|
||||
|
||||
if (paramsJSON == null) {
|
||||
log.error("商户分账业务申请回调:请求参数为空");
|
||||
@ -944,6 +949,7 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String applyId = paramsJSON.getStr("applyId");
|
||||
String auditStatus = paramsJSON.getStr("auditStatus");
|
||||
String merCupNo = paramsJSON.getStr("merCupNo");
|
||||
String auditStatusText = paramsJSON.getStr("auditStatusText");
|
||||
|
||||
if (StrUtil.isBlank(applyId) || StrUtil.isBlank(auditStatus) || StrUtil.isBlank(merCupNo)) {
|
||||
String errMsg = "商户分账业务申请回调:缺少必要参数(applyId/auditStatus/merCupNo)";
|
||||
@ -951,12 +957,19 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", errMsg);
|
||||
}
|
||||
|
||||
LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByApplyId(applyId, CommonConstant.Enable);
|
||||
|
||||
// 1:通过,2拒绝
|
||||
if (!auditStatus.equals("1")) {
|
||||
log.warn("商户分账业务申请回调:审核未通过,状态={}", auditStatus);
|
||||
if (lklLedgerMember != null) {
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(
|
||||
lklLedgerMember.getMch_id(), "", CommonConstant.MCH_APPR_STA_NOPASS, "分账业务申请被驳回:" + auditStatusText
|
||||
);
|
||||
}
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "商户分账申请被驳回!");
|
||||
}
|
||||
|
||||
LklLedgerMember lklLedgerMember = lklLedgerMemberService.getByApplyId(applyId, CommonConstant.Enable);
|
||||
if (lklLedgerMember != null && lklLedgerMerReceiverBindService.hasBindReceiver(merCupNo)) {
|
||||
log.debug("商户分账业务申请回调:已处理成功,applyId={}", applyId);
|
||||
return JSONUtil.createObj().put("code", "SUCCESS").put("message", "商户分账申请已处理成功!");
|
||||
@ -965,7 +978,6 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
String merInnerNo = paramsJSON.getStr("merInnerNo");
|
||||
String entrustFileName = paramsJSON.getStr("entrustFileName");
|
||||
String entrustFilePath = paramsJSON.getStr("entrustFilePath");
|
||||
String auditStatusText = paramsJSON.getStr("auditStatusText");
|
||||
String remark = paramsJSON.getStr("remark");
|
||||
|
||||
try {
|
||||
@ -998,6 +1010,11 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("商户分账业务申请回调:", e);
|
||||
if (lklLedgerMember != null) { // 防御性判断(理论上此时应为null,但保留安全检查)
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(
|
||||
lklLedgerMember.getMch_id(), "", CommonConstant.MCH_APPR_STA_NOPASS, "商户分账业务绑定或状态更新失败"
|
||||
);
|
||||
}
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "商户分账业务绑定或状态更新失败");
|
||||
}
|
||||
|
||||
@ -1343,6 +1360,9 @@ public class LakalaApiServiceImpl implements LakalaApiService {
|
||||
// 5. 审核状态判断,仅处理通过的情况
|
||||
if (!"1".equals(auditStatus)) {
|
||||
log.warn("商家绑定分账接收方异步通知,申请被驳回不做任何操作,返回状态:{}", auditStatus);
|
||||
// shopMchEntryService.updateMerchEntryApprovalByMchId(
|
||||
// 1L, "", CommonConstant.MCH_APPR_STA_NOPASS, "商家绑定分账接收被驳回"
|
||||
// );
|
||||
return JSONUtil.createObj().put("code", "FAIL").put("message", "申请被驳回不做任何操作");
|
||||
}
|
||||
|
||||
|
||||
@ -528,15 +528,15 @@ public class LklTkServiceImpl {
|
||||
if (!success) {
|
||||
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件成功,但更新商户号失败!");
|
||||
|
||||
return Pair.of(false, "请求进件成功,但更新商户号失败!");
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
logger.error("拉卡拉进件异常:{}", e.getMessage());
|
||||
shopMchEntryService.updateMerchEntryApprovalByMchId(shopMchEntry.getId(), "", CommonConstant.MCH_APPR_STA_LKL_NOPASS, "进件失败:" + e.getMessage());
|
||||
|
||||
return Pair.of(false, "进件失败:" + e.getMessage());
|
||||
|
||||
}
|
||||
|
||||
return Pair.of(true, "提交进件成功,请等待审核!");
|
||||
|
||||
@ -1118,36 +1118,47 @@ public class ShopMchEntryServiceImpl extends BaseServiceImpl<ShopMchEntryMapper,
|
||||
/**
|
||||
* 更新商家入驻申请的审批状态和审批备注
|
||||
*
|
||||
* @param mchId 商家入驻申请 ID,mchId和mchMobile至少必填一个
|
||||
* @param mchMobile 商家注册的手机号 mchId和mchMobile至少必填一个
|
||||
* @param approvalStatus 入驻商家的审批状态:1-已通过;2-未通过;3-待审核;4-未申请过;5-已提交拉卡拉审核;
|
||||
* @param merchantId 商家入驻申请 ID,和 merchantMobile 至少必填一个
|
||||
* @param merchantMobile 商家注册的手机号,和 merchantId 至少必填一个
|
||||
* @param approvalStatus 审批状态:1-已通过;2-未通过;3-待审核;4-未申请过;5-已提交拉卡拉审核;
|
||||
* @param approvalRemark 审批备注
|
||||
* @return
|
||||
* @return 更新成功返回 true,否则返回 false
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateMerchEntryApprovalByMchId(Long mchId, String mchMobile, Integer approvalStatus, String approvalRemark) {
|
||||
if (ObjectUtil.isEmpty(mchId) && StrUtil.isBlank(mchMobile)) {
|
||||
log.error("更新入驻审批状态和备注失败,缺少必要参数");
|
||||
public Boolean updateMerchEntryApprovalByMchId(Long merchantId, String merchantMobile, Integer approvalStatus, String approvalRemark) {
|
||||
// 1. 参数校验:merchantId 和 merchantMobile 必须至少有一个不为空
|
||||
if (ObjectUtil.isEmpty(merchantId) && StrUtil.isBlank(merchantMobile)) {
|
||||
log.error("更新入驻审批状态和备注失败:merchantId 和 merchantMobile 至少需要一个");
|
||||
return false;
|
||||
}
|
||||
|
||||
UpdateWrapper<ShopMchEntry> updateWrapper = new UpdateWrapper<>();
|
||||
if (ObjectUtil.isNotEmpty(mchId)) {
|
||||
updateWrapper.eq("id", mchId);
|
||||
}
|
||||
if (StrUtil.isNotBlank(mchMobile)) {
|
||||
updateWrapper.eq("login_mobile", mchMobile);
|
||||
}
|
||||
try {
|
||||
// 2. 创建 UpdateWrapper 对象,用于构建更新条件
|
||||
UpdateWrapper<ShopMchEntry> updateWrapper = new UpdateWrapper<>();
|
||||
|
||||
if (ObjectUtil.isNotEmpty(approvalStatus)) {
|
||||
updateWrapper.set("approval_status", approvalStatus);
|
||||
}
|
||||
// 3. 设置更新条件:优先使用 merchantId,如果为空则使用 merchantMobile
|
||||
if (ObjectUtil.isNotEmpty(merchantId)) {
|
||||
updateWrapper.eq("id", merchantId);
|
||||
} else {
|
||||
updateWrapper.eq("login_mobile", merchantMobile);
|
||||
}
|
||||
|
||||
if (StrUtil.isNotBlank(approvalRemark)) {
|
||||
updateWrapper.set("approval_remark", approvalRemark);
|
||||
}
|
||||
// 4. 设置更新字段:审批状态和审批备注
|
||||
if (ObjectUtil.isNotEmpty(approvalStatus)) {
|
||||
updateWrapper.set("approval_status", approvalStatus);
|
||||
}
|
||||
if (StrUtil.isNotBlank(approvalRemark)) {
|
||||
updateWrapper.set("approval_remark", approvalRemark);
|
||||
}
|
||||
|
||||
return update(updateWrapper);
|
||||
// 5. 执行更新操作并返回结果
|
||||
return update(updateWrapper);
|
||||
|
||||
} catch (Exception e) {
|
||||
// 6. 异常处理:记录异常信息,避免程序中断
|
||||
log.error("更新商家入驻审批状态和备注时发生异常", e);
|
||||
return false; // 发生异常时返回 false
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
Reference in New Issue
Block a user