|
|
@@ -2,14 +2,15 @@ package cn.com.taiji.ias.manager.order; |
|
|
|
|
|
|
|
import cn.com.taiji.common.manager.net.http.ServiceHandleException; |
|
|
|
import cn.com.taiji.core.entity.comm.CommonWxSignConfig; |
|
|
|
import cn.com.taiji.core.entity.dict.basic.Gender; |
|
|
|
import cn.com.taiji.core.entity.dict.basic.PlateColorType; |
|
|
|
import cn.com.taiji.core.entity.dict.basic.SourceType; |
|
|
|
import cn.com.taiji.core.entity.dict.issue.IssueOrderStep; |
|
|
|
import cn.com.taiji.core.entity.dict.issue.ShippingStatus; |
|
|
|
import cn.com.taiji.core.entity.issue.IssueOrderinfo; |
|
|
|
import cn.com.taiji.core.entity.issue.IssueOrderinfoExt; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsVehicleUserStateRequest; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.AtsVehicleUserStateResponse; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ias.order.SignQueryRequest; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.ias.order.SignQueryResponse; |
|
|
|
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; |
|
|
|
import cn.com.taiji.core.repo.jpa.comm.CommonWxSignConfigRepo; |
|
|
|
import cn.com.taiji.ias.dict.DataType; |
|
|
@@ -17,7 +18,7 @@ import cn.com.taiji.ias.model.MyFinals; |
|
|
|
import cn.com.taiji.ias.model.ServiceLogEvent; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
import java.time.LocalDateTime; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
/** |
|
|
@@ -33,6 +34,7 @@ public class SignQueryManager extends AbstractOrderManager<SignQueryRequest> { |
|
|
|
super(DataType.SIGN_QUERY); |
|
|
|
} |
|
|
|
|
|
|
|
public static final String RES = "res"; |
|
|
|
@Autowired |
|
|
|
private CommonWxSignConfigRepo commonWxSignConfigRepo; |
|
|
|
|
|
|
@@ -58,32 +60,24 @@ public class SignQueryManager extends AbstractOrderManager<SignQueryRequest> { |
|
|
|
|
|
|
|
@Override |
|
|
|
protected void persistInternal(SignQueryRequest request, ServiceLogEvent event, |
|
|
|
Map<String, Object> dataStream) throws ServiceHandleException { |
|
|
|
IssueOrderinfo order = (IssueOrderinfo)dataStream.get(ORDER); |
|
|
|
IssueOrderinfoExt orderInfoExt = orderInfoExtRepo.findByOrderNo(order.getOrderNo()); |
|
|
|
Map<String, Object> dataStream) throws ServiceHandleException { |
|
|
|
IssueOrderinfo order = (IssueOrderinfo) dataStream.get(ORDER); |
|
|
|
Integer vehiclePlateColor = order.getVehiclePlateColor(); |
|
|
|
switch (PlateColorType.valueOfCode(vehiclePlateColor)){ |
|
|
|
switch (PlateColorType.valueOfCode(vehiclePlateColor)) { |
|
|
|
case BLUE: |
|
|
|
case GREEN: |
|
|
|
carSignV2(request,order); |
|
|
|
break; |
|
|
|
case YELLOW: |
|
|
|
carSignV3(request,order); |
|
|
|
carSignV2(request, order, dataStream); |
|
|
|
break; |
|
|
|
default: throw newBusinessException("当前只支持,蓝、渐变绿、黄,三种车牌签约"); |
|
|
|
// case YELLOW: |
|
|
|
// carSignV3(request, order); |
|
|
|
// break; |
|
|
|
default: |
|
|
|
// throw newBusinessException("微信签约只支持,蓝、渐变绿、黄,三种车牌签约"); |
|
|
|
throw newBusinessException("微信签约只支持,蓝、渐变绿,两种车牌签约"); |
|
|
|
} |
|
|
|
|
|
|
|
// 查询签约结果 |
|
|
|
// WxChannelUserSignQueryPostResponse signQueryRes = queryUserSign(request, order, orderInfoExt); |
|
|
|
// 更新订单签约结果 |
|
|
|
// updateOrder(request, order, orderInfoExt, signQueryRes); |
|
|
|
// 保存日志 |
|
|
|
// bizServiceLog(request.getOpenId(), ServiceType.PAYCONTRACT, order, order.getOrderNo()); |
|
|
|
// persistOperateLog(OperateType.ISSUE_ORDER_SIGN_QUERY, order.getOrderNo(), request, request.getOpenId(), null); |
|
|
|
// dataStream.put(SIGN_QUERY_RESPONSE, signQueryRes); |
|
|
|
} |
|
|
|
|
|
|
|
private void carSignV2(SignQueryRequest req, IssueOrderinfo order) throws ServiceHandleException { |
|
|
|
private void carSignV2(SignQueryRequest req, IssueOrderinfo order, Map<String, Object> dataStream) throws ServiceHandleException { |
|
|
|
CommonWxSignConfig signConfig = commonWxSignConfigRepo.findByAgencyIdAndVersion(order.getAgencyId(), 2); |
|
|
|
AtsVehicleUserStateRequest request = new AtsVehicleUserStateRequest(); |
|
|
|
request.setAppId(signConfig.getAppId()); |
|
|
@@ -94,238 +88,45 @@ public class SignQueryManager extends AbstractOrderManager<SignQueryRequest> { |
|
|
|
request.setPlateNumber(order.getVehiclePlate()); |
|
|
|
request.setSubOpenId(req.getSubOpenId()); |
|
|
|
AtsVehicleUserStateResponse response = jsonPostRepeat(request); |
|
|
|
//签约过但是不是当前用户,重新签约 |
|
|
|
if (!"UNAUTHORIZED".equals(response.getUserState()) && !req.getSubOpenId().equals(response.getOpenId())) { |
|
|
|
response.setUserState("UNAUTHORIZED"); |
|
|
|
SignQueryResponse signRes = copyProperties(response, new SignQueryResponse()); |
|
|
|
dataStream.put(RES, signRes); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
if (response.getUserState()) |
|
|
|
|
|
|
|
|
|
|
|
if (!"UNAUTHORIZED".equals(response.getUserState())) { |
|
|
|
order.setAgreementId(response.getOpenId()); |
|
|
|
order.setAgreementEnableTime(LocalDateTime.now()); |
|
|
|
if (order.getOrderSource().equals(SourceType.CHANNEL)) { //渠道签约完成待激活 |
|
|
|
order.setOrderStep(IssueOrderStep.WAITING_ACTIVE); |
|
|
|
} else { |
|
|
|
order.setOrderStep(ShippingStatus.WAIT_SHIPPING.equals(order.getShippingStatus()) ? |
|
|
|
IssueOrderStep.WAITING_SEND : IssueOrderStep.WAITING_ACTIVE); |
|
|
|
} |
|
|
|
} |
|
|
|
orderInfoRepo.merge(order); |
|
|
|
} |
|
|
|
|
|
|
|
private void carSignV3(SignQueryRequest request, IssueOrderinfo order) { |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// @Override |
|
|
|
// protected void onSuccessInternal(IssueOrderSignQueryRequest req, ServiceLogEvent event, |
|
|
|
// Map<String, Object> dataStream) { |
|
|
|
// CsmsnOrderinfo order = (CsmsnOrderinfo)dataStream.get(ORDER); |
|
|
|
// // 向统一会员平台发送支付宝信息 |
|
|
|
// if (order.getOrderSource() == OrderSourceEnum.ALI) { |
|
|
|
// executor.execute(() -> { |
|
|
|
// try { |
|
|
|
// sendAliOrderStatus(order);// 暂时没管发送失败的情况 |
|
|
|
// } catch (ServiceHandleException e) { |
|
|
|
// logger.error("向统一会员平台发送支付宝信息异常", e); |
|
|
|
// } |
|
|
|
// }); |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
@Override |
|
|
|
protected AbstractSignTypeResponse getRes(SignQueryRequest req, ServiceLogEvent event, |
|
|
|
Map<String, Object> dataStream) throws ServiceHandleException { |
|
|
|
// WxChannelUserSignQueryPostResponse signQueryRes = |
|
|
|
// (WxChannelUserSignQueryPostResponse)dataStream.get(SIGN_QUERY_RESPONSE); |
|
|
|
// return copyProperties(signQueryRes, new SignQueryResponse()); |
|
|
|
return null; |
|
|
|
protected void onSuccessInternal(SignQueryRequest req, ServiceLogEvent event, Map<String, Object> dataStream) { |
|
|
|
//通知渠道 |
|
|
|
IssueOrderinfo order = (IssueOrderinfo) dataStream.get(ORDER); |
|
|
|
if (SourceType.CHANNEL.equals(order.getOrderSource())&& IssueOrderStep.WAITING_ACTIVE.equals(order.getOrderStep())){ |
|
|
|
order.setOrderStep(IssueOrderStep.ORDER_SIGNED);//这里设置5只是为了通知渠道完成签约,数据库保存的是待激活 |
|
|
|
callBackQd(order, ""); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// private WxChannelUserSignQueryPostResponse queryUserSign(IssueOrderSignQueryRequest request, CsmsnOrderinfo order, |
|
|
|
// CsmsnOrderinfoExt orderInfoExt) throws ServiceHandleException { |
|
|
|
// if (request.getSignChannelType() == 1) {// 微信 |
|
|
|
// return queryWechatSign(request, order, orderInfoExt); |
|
|
|
// } |
|
|
|
// if (request.getSignChannelType() == 2) {// 支付宝 |
|
|
|
// return queryAlipaySign(request, order, orderInfoExt); |
|
|
|
// } |
|
|
|
// throw newBusinessException("未知的签约类型:" + request.getSignChannelType()); |
|
|
|
// |
|
|
|
// } |
|
|
|
|
|
|
|
// private void updateOrder(IssueOrderSignQueryRequest req, CsmsnOrderinfo order, CsmsnOrderinfoExt orderInfoExt, |
|
|
|
// WxChannelUserSignQueryPostResponse res) { |
|
|
|
// if (!"NORMAL".equals(res.getUserState()) && !"SIGNED".equals(res.getSignStatus())) { |
|
|
|
// return; |
|
|
|
// } |
|
|
|
// // fixme 20250114 修改流程,审核在车辆上传进行 |
|
|
|
//// // 自动审核 货车类型走 人工审核 |
|
|
|
//// Boolean verifyResult = autoVerifyV2(order, orderInfoExt); |
|
|
|
//// logger.info("签约检测成功 orderNo:{},autoVerify:{}", order.getOrderNo(), verifyResult); |
|
|
|
//// // 是否被人工审核 1:人工 2:系统 0:未审核。人工审核时再变成1 |
|
|
|
//// order.setArtificialStatus(2); |
|
|
|
//// if (order.getVanType() == 2) { |
|
|
|
//// order.setOrderStep(IssueOrderStep.ORDER_STEP_6.getCode()); |
|
|
|
//// } else if (verifyResult) { |
|
|
|
//// Integer nextStep = order.getWhetherToMail() ? IssueOrderStep.ORDER_STEP_8.getCode() |
|
|
|
//// : IssueOrderStep.ORDER_STEP_10.getCode(); |
|
|
|
//// order.setOrderStep(nextStep); |
|
|
|
//// } else { |
|
|
|
//// order.setOrderStep(IssueOrderStep.ORDER_STEP_6.getCode()); |
|
|
|
//// } |
|
|
|
// order.setAgreementStatus(1); |
|
|
|
// order.setAgreementEnableTime(LocalDateTime.now()); |
|
|
|
// order.setAgreementId(req.getSubOpenId()); |
|
|
|
// orderInfoRepo.merge(order); |
|
|
|
// } |
|
|
|
// |
|
|
|
// private void sendAliOrderStatus(CsmsnOrderinfo order) throws ServiceHandleException { |
|
|
|
// SyncApplyOrderRequest syncModel = new SyncApplyOrderRequest(); |
|
|
|
// syncModel.setOutOrderId(order.getOrderNo()); |
|
|
|
// syncModel.setPlateNo(order.getVehiclePlate()); |
|
|
|
// syncModel.setPlateColor(order.getVehiclePlateColor() + ""); |
|
|
|
// syncModel.setOrderStatus("CENSOR_PASS"); |
|
|
|
// HashMap<String, Object> hashMap = jsonPostRepeat(syncModel, 5, null); |
|
|
|
// Boolean syncResult = (Boolean)hashMap.get("syncResult"); |
|
|
|
// } |
|
|
|
// |
|
|
|
// public Boolean autoVerifyV2(CsmsnOrderinfo orderInfo, CsmsnOrderinfoExt orderinfoExt) { |
|
|
|
// try { |
|
|
|
// VerificationRuleRequest vehicleCheck = new VerificationRuleRequest(); |
|
|
|
// vehicleCheck.setOrderId(orderInfo.getOrderNo()); |
|
|
|
// vehicleCheck.setVehicleId(orderInfo.getVehicleId()); |
|
|
|
// vehicleCheck.setIsOnline(1); |
|
|
|
// vehicleCheck.setBussinessType(1); |
|
|
|
// vehicleCheck.setType(orderInfo.getVehicleClass());// 车型,收费车型,对应vehicle.type |
|
|
|
// vehicleCheck.setVehicleCustomerType(orderinfoExt.getUseUserType()); |
|
|
|
// // fixme 车辆检测后面更换新接口,这里要更改成调新接口 |
|
|
|
// VerificationRuleResponse response = issueOrderVerificationRuleManager.assVerificationRule(vehicleCheck); |
|
|
|
// if (2 == response.getStatus()) { |
|
|
|
// logger.info("核验成功 {}", orderInfo.getOrderNo()); |
|
|
|
// return true; |
|
|
|
// } |
|
|
|
// orderinfoExt.setAuditReason(response.getMsg()); |
|
|
|
// orderInfoRepo.merge(orderInfo); |
|
|
|
// orderInfoExtRepo.merge(orderinfoExt); |
|
|
|
// return false; |
|
|
|
// } catch (Exception e) { |
|
|
|
// logger.error("车辆核验异常", e); |
|
|
|
// orderinfoExt.setAuditReason("车辆核验异常"); |
|
|
|
// orderInfoRepo.merge(orderInfo); |
|
|
|
// orderInfoExtRepo.merge(orderinfoExt); |
|
|
|
// return false; |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// private WxChannelUserSignQueryPostResponse queryWechatSign(IssueOrderSignQueryRequest request, CsmsnOrderinfo order, |
|
|
|
// CsmsnOrderinfoExt orderInfoExt) throws ServiceHandleException { |
|
|
|
// UserSignRequest userSignRequest = new UserSignRequest(); |
|
|
|
// userSignRequest.setAccountCapitalId(order.getAccountCapitalId()); |
|
|
|
// userSignRequest.setBusinessType("CONFIRM"); |
|
|
|
// userSignRequest |
|
|
|
// .setChannelId(hasText(orderInfoExt.getSignConfigId()) ? orderInfoExt.getSignConfigId() : "52010188925"); |
|
|
|
// Map<String, Object> wxHashMap = new HashMap<>(); |
|
|
|
// wxHashMap.put("tradeScene", "HIGHWAY"); |
|
|
|
// wxHashMap.put("subOpenid", request.getSubOpenId()); // 微信openId |
|
|
|
// wxHashMap.put("vehicleId", getVehicleId(order.getVehiclePlate(), order.getVehiclePlateColor())); |
|
|
|
// userSignRequest.setData(JsonTools.asJsonStr(wxHashMap)); |
|
|
|
// HashMap<String, Object> stringObjectMap = jsonPostRepeat(userSignRequest, 3, request.getAccessToken()); |
|
|
|
// String responseData = String.valueOf(stringObjectMap.get("data")); |
|
|
|
// return JsonTools.json2ObjectSilent(responseData, WxChannelUserSignQueryPostResponse.class); |
|
|
|
// } |
|
|
|
// |
|
|
|
// private WxChannelUserSignQueryPostResponse queryAlipaySign(IssueOrderSignQueryRequest request, CsmsnOrderinfo order, |
|
|
|
// CsmsnOrderinfoExt orderInfoExt) throws ServiceHandleException { |
|
|
|
// UserSignRequest userSignRequest = new UserSignRequest(); |
|
|
|
// userSignRequest.setAccountCapitalId(order.getAccountCapitalId()); |
|
|
|
// userSignRequest.setBusinessType("CONFIRM"); |
|
|
|
// userSignRequest |
|
|
|
// .setChannelId(hasText(orderInfoExt.getSignConfigId()) ? orderInfoExt.getSignConfigId() : "52010188924"); |
|
|
|
// Map<String, Object> aliHashMap = new HashMap<>(); |
|
|
|
// aliHashMap.put("subOpenid", request.getSubOpenId()); |
|
|
|
// aliHashMap.put("vehicleId", getVehicleId(order.getVehiclePlate(), order.getVehiclePlateColor())); |
|
|
|
// aliHashMap.put("cityCode", "520100"); |
|
|
|
// aliHashMap.put("mobileNo", order.getCustomerTel()); |
|
|
|
// aliHashMap.put("outOrderId", order.getOrderNo()); |
|
|
|
// aliHashMap.put("sellerId", "5201"); |
|
|
|
// userSignRequest.setData(JsonTools.asJsonStr(aliHashMap)); |
|
|
|
// HashMap<String, Object> stringObjectMap = jsonPostRepeat(userSignRequest, 3, request.getAccessToken()); |
|
|
|
// String responseData = String.valueOf(stringObjectMap.get("data")); |
|
|
|
// return JsonTools.json2ObjectSilent(responseData, WxChannelUserSignQueryPostResponse.class); |
|
|
|
// } |
|
|
|
// |
|
|
|
// private String getAccountCapitalId(IssueOrderSignQueryRequest request, CsmsnOrderinfo order, |
|
|
|
// CsmsnOrderinfoExt orderInfoExt) throws ServiceHandleException { |
|
|
|
// if (StringTools.hasText(order.getAccountCapitalId())) { |
|
|
|
// return order.getAccountCapitalId(); |
|
|
|
// } |
|
|
|
// AccountGainResponse accountGainResponse = |
|
|
|
// gainAccount(request.getOpenId(), order.getVehicleId(), request.getAccessToken()); |
|
|
|
// if (accountGainResponse == null) { |
|
|
|
// throw newBusinessException("查询返回无参数"); |
|
|
|
// } |
|
|
|
// if (!accountGainResponse.getNeedRealName()) { |
|
|
|
// return accountGainResponse.getAccountCapitalId(); |
|
|
|
// } |
|
|
|
// // 需要实名 |
|
|
|
// AccountAddResponse accountAddResponse = doRealNameRequest(request.getAccessToken(), order, orderInfoExt); |
|
|
|
// return accountAddResponse.getAccountCapitalId(); |
|
|
|
// } |
|
|
|
// |
|
|
|
// /** |
|
|
|
// * 获取签约账户 |
|
|
|
// */ |
|
|
|
// private AccountGainResponse gainAccount(String openId, String vehicleId, String accessToken) |
|
|
|
// throws ServiceHandleException { |
|
|
|
// AccountGainRequest accountGainRequest = new AccountGainRequest(); |
|
|
|
// accountGainRequest.setOpenId(openId); |
|
|
|
// accountGainRequest.setAccountBizIdentifier(vehicleId); |
|
|
|
// accountGainRequest.setBusinessType(BusinessType.ETC); |
|
|
|
// return jsonPostRepeat(accountGainRequest, 3, "83", accessToken); |
|
|
|
// } |
|
|
|
// |
|
|
|
// private AccountAddResponse doRealNameRequest(String accessToken, CsmsnOrderinfo order, |
|
|
|
// CsmsnOrderinfoExt orderInfoExt) throws ServiceHandleException { |
|
|
|
// AccountAddRequest accountAddRequest = new AccountAddRequest(); |
|
|
|
// accountAddRequest.setAccountBizIdentifier(order.getVehicleId()); |
|
|
|
// accountAddRequest.setBusinessType(BusinessType.ETC); |
|
|
|
// if (OrderUserTypeEnum.PERSONAL_USER.equals(order.getUserType())) { |
|
|
|
// accountAddRequest.setUserType(UserType.PERSONAL); |
|
|
|
// } else { |
|
|
|
// accountAddRequest.setUserType(UserType.ENTERPRISE); |
|
|
|
// accountAddRequest.setAgentIdNum(order.getAgentIdNum());// 经办人证件号 |
|
|
|
// accountAddRequest.setIdType(IdType.findByCode(order.getAgentIdType()));// 经办人证件类型 |
|
|
|
// accountAddRequest.setAgentName(order.getAgentName()); |
|
|
|
// } |
|
|
|
// accountAddRequest.setIdNum(order.getCustomerIdNum());// 用户证件号 |
|
|
|
// accountAddRequest.setIdType(IdType.findByCode(order.getCustomerIdType()));// 用户证件类型 |
|
|
|
// accountAddRequest.setName(order.getCustomerName()); |
|
|
|
// accountAddRequest.setAddress( |
|
|
|
// StringTools.hasText(orderInfoExt.getCustomerAddress()) ? orderInfoExt.getCustomerAddress() : "下单未未填写");// 地址 |
|
|
|
// accountAddRequest.setAppId(MyFinals.APP_ID); |
|
|
|
// accountAddRequest.setDepartment(orderInfoExt.getCustomerDepartment());// 部门 |
|
|
|
// accountAddRequest |
|
|
|
// .setGender(order.getCustomerIdType() == 101 ? getSexFromIdCard(order.getCustomerIdNum()) : Gender.UNKOWN); |
|
|
|
// accountAddRequest.setUserIdImgUrl(orderInfoExt.getCustomerPositiveImageUrl());// 证件照正面图片地址 |
|
|
|
// accountAddRequest.setCertifyChannel(CertifyChannelType.BAIDUOCR);// 实名渠道 |
|
|
|
// AccountAddResponse accountAddResponse = |
|
|
|
// jsonPostRepeat(accountAddRequest, 3, IfCodeFinals.USER_APIUSER_ACCOUNTADD, accessToken); |
|
|
|
// if (accountAddResponse == null) { |
|
|
|
// throw newBusinessException("查询返回无参数"); |
|
|
|
// } |
|
|
|
// return accountAddResponse; |
|
|
|
// } |
|
|
|
|
|
|
|
public static Gender getSexFromIdCard(String idCard) { |
|
|
|
// 15 位身份证 |
|
|
|
if (idCard.length() == 15) { |
|
|
|
String sex = idCard.substring(14, 15); |
|
|
|
// 偶数表示女性,奇数表示男性 |
|
|
|
if (Integer.parseInt(sex) % 2 == 0) { |
|
|
|
return Gender.FEMALE; |
|
|
|
} else { |
|
|
|
return Gender.MALE; |
|
|
|
} |
|
|
|
} |
|
|
|
// 18 位身份证 |
|
|
|
if (idCard.length() == 18) { |
|
|
|
String sex = idCard.substring(16, 17); |
|
|
|
// 偶数表示女性,奇数表示男性 |
|
|
|
if (Integer.parseInt(sex) % 2 == 0) { |
|
|
|
return Gender.FEMALE; |
|
|
|
} else { |
|
|
|
return Gender.MALE; |
|
|
|
} |
|
|
|
} |
|
|
|
return Gender.UNKOWN; |
|
|
|
@Override |
|
|
|
protected SignQueryResponse getRes(SignQueryRequest req, ServiceLogEvent event, |
|
|
|
Map<String, Object> dataStream) throws ServiceHandleException { |
|
|
|
return (SignQueryResponse)dataStream.get(RES); |
|
|
|
} |
|
|
|
|
|
|
|
} |