Przeglądaj źródła

ias 微信车主签约接口,暂时支持蓝、绿车牌

master
chenchaod 3 miesięcy temu
rodzic
commit
2bc800cd1b

+ 1
- 1
gly-base-core/src/main/java/cn/com/taiji/core/entity/issue/IssueOrderinfo.java Wyświetl plik

@@ -89,7 +89,7 @@ public class IssueOrderinfo extends AbstractStringPropertyUUIDEntity {
@Column(name = "AGREEMENT_ENABLE_TIME")
private LocalDateTime agreementEnableTime;//签约启用时间
@Column(name = "AGREEMENT_ID")
private String agreementId;//签约协议编号,暂时和车签约,字段值其实是微信openId或支付宝openId
private String agreementId;//签约协议编号,暂时和车签约,字段值其实是微信openId或支付宝openId,渠道签约结果通知,不知传的啥玩意
@Column(name = "CARD_TYPE")
@Enumerated(EnumType.STRING)
private CardType cardType;//卡类型

+ 53
- 24
gly-base-core/src/main/java/cn/com/taiji/core/model/comm/protocol/ias/order/SignQueryResponse.java Wyświetl plik

@@ -9,28 +9,57 @@ import lombok.experimental.Accessors;
@Setter
@Accessors(chain = true)
public class SignQueryResponse extends AbstractSignTypeResponse {
private String userState;
private String appid;
private String mchId;
private String subAppid;
private String subMchId;
private String nonceStr;
private String signType;
private String sign;
private String subOpenId;
private String channelType;
private String tradeScene;
private String plateNumber;
private String path;
private String bizAgreementNo;
private String signStatus;
private String outOrderId;
private String alipayOrderId;
private String sellerId;
private String sellerAppId;

/**
* 签约状态
*/
// private String signState; FIXME 没用到
// private String userState;
// private String appid;
// private String mchId;
// private String subAppid;
// private String subMchId;
// private String nonceStr;
// private String signType;
// private String sign;
// private String subOpenId;
// private String channelType;
// private String tradeScene;
// private String plateNumber;
// private String path;
// private String bizAgreementNo;
// private String signStatus;
// private String outOrderId;
// private String alipayOrderId;
// private String sellerId;
// private String sellerAppId;


private String userState;//用户签约状态 是

private String deductMode;//发起扣费方式PROACTIVE:表示用户主动发起的免密支付 AUTOPAY:表示用户无感的支付 否

private String plateNumberInfo;//车牌信息 否

//=====================前端请求微信签约参数==============参与签名字段 +
private String appId;//请求appid 是 +

private String mchId;//商户号 是 +

private String subMchId;//子商户号 是 +

private String subAppId;//子商户公众账号id 是 +

private String nonceStr;//随机字符串 是 +

private String signType;//签名类型 是 +

private String sign;//签名 是

private String tradeScene = "HIGHWAY";//交易场景 写死 是 +

private String openId;//用户标识 否

private String subOpenId;//用户子标识 是 +

private String plateNumber;//车牌号 是 +

private String channelType = "ETC";//通道类型 写死 ETC +

private String path;//跳转路径 是
}

+ 4
- 5
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/AbstractHandleManager.java Wyświetl plik

@@ -164,11 +164,10 @@ public abstract class AbstractHandleManager<T extends AbstractSignTypeRequest<?>
} catch (DataIntegrityViolationException e) {
logger.error("------持久化失败:", e);
throw new PersistException("持久化时发现脏数据");
} catch (Exception e) {
} catch (ServiceHandleException e){
throw new PersistException("持久化时异常:" + e.getMessage());
}catch (Exception e) {
logger.error("------持久化时出现异常:", e);
if (e.getMessage().equals("域名映射表未配置")) {//针对渠道回调通知异常特定的报错
throw new PersistException("持久化时异常:" + e.getMessage());
}
throw new PersistException("持久化时异常:" + e.getClass().toString());
}
}
@@ -199,7 +198,7 @@ public abstract class AbstractHandleManager<T extends AbstractSignTypeRequest<?>
}
}

protected void onSuccessInternal(T req, ServiceLogEvent event, Map<String, Object> dataStream) {
protected void onSuccessInternal(T req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException {

}


+ 1
- 1
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/AbstractOrderManager.java Wyświetl plik

@@ -134,7 +134,7 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>>
jsonPostRepeat(req);
}

protected void callBackQd(IssueOrderinfo order, String msg) throws ServiceHandleException {
protected void callBackQd(IssueOrderinfo order, String msg) {
//通知内容
CallbackModel callbackModel = new CallbackModel();
callbackModel.setOrderNo(order.getOrderNo())

+ 47
- 246
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/SignQueryManager.java Wyświetl plik

@@ -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);
}

}

Ładowanie…
Anuluj
Zapisz