ソースを参照

发行订单调整

master
chenchaod 1ヶ月前
コミット
2bfd7c6dfd

+ 5
- 7
zhywpt-app-iaw/src/main/java/cn/com/taiji/iaw/dto/issue/UploadVehicleReqDTO.java ファイルの表示

@@ -1,10 +1,7 @@
package cn.com.taiji.iaw.dto.issue;

import cn.com.taiji.core.dto.AbstractBizRequestDTO;
import cn.com.taiji.core.entity.dict.basic.IdType;
import cn.com.taiji.core.entity.dict.basic.PlateColorType;
import cn.com.taiji.core.entity.dict.basic.UseUserType;
import cn.com.taiji.core.entity.dict.basic.VehicleUseCharacter;
import cn.com.taiji.core.entity.dict.basic.*;
import cn.com.taiji.core.model.comm.protocol.constraint.EnumInteger;
import cn.com.taiji.core.model.comm.protocol.constraint.IntegerConstant;
import io.swagger.annotations.ApiModel;
@@ -114,9 +111,10 @@ public class UploadVehicleReqDTO extends AbstractBizRequestDTO {
@IntegerConstant(values = "0,1")
@ApiModelProperty(value = "应急车辆标识0-非应急车辆 1-应急车辆")
private Integer emergencyFlag;// 应急车辆标识 0-非应急车辆 1-应急车辆
@NotNull
@ApiModelProperty(value = "收费车型")
private Integer feeVehicleType;//收费车型
// @NotNull 后端自己计算
// @ApiModelProperty(value = "收费车型")
// @EnumInteger(enumClazz = VehicleType.class)
// private Integer feeVehicleType;//收费车型


@ApiModelProperty(value = "车主手机号")

+ 9
- 7
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/audit/VerificationRuleManager.java ファイルの表示

@@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.time.LocalDateTime;

@Service
public class VerificationRuleManager extends AbstractCommManager {
@@ -36,12 +37,12 @@ public class VerificationRuleManager extends AbstractCommManager {

public String autoVerify(OrderVerificationModel model) throws ManagerException {
StringBuilder builder = new StringBuilder();
// 1-校验车型-接口传的和系统算的比对
Integer vehicleClass = IssueTools.getVehicleClass(model.getVanType(), model.getVehicleDimensions(),
model.getApprovedCount(), model.getAxleCount(), model.getTotalMass());
if (vehicleClass.intValue() != model.getFeeVehicleType().intValue()) {
builder.append("收费车型【" + model.getFeeVehicleType() + "】与系统计算结果【" + vehicleClass + "】不一致;");
}
// // 1-校验车型-接口传的和系统算的比对(注释掉,车型直接由后端系统自己计算,不需要校验)
// Integer vehicleClass = IssueTools.getVehicleClass(model.getVanType(), model.getVehicleDimensions(),
// model.getApprovedCount(), model.getAxleCount(), model.getTotalMass());
// if (vehicleClass.intValue() != model.getFeeVehicleType().intValue()) {
// builder.append("收费车型【" + model.getFeeVehicleType() + "】与系统计算结果【" + vehicleClass + "】不一致;");
// }
// 2-OCR结果比对
varifyCustomer(model, builder);// 人
varifyVehicle(model, builder);// 车
@@ -52,6 +53,7 @@ public class VerificationRuleManager extends AbstractCommManager {
BeanTools.copyProperties(model, verification);
verification.setFailReason(builder.toString());
verification.setVerifyResult(hasText(verification.getFailReason()) ? 0 : 1);
verification.setVerifyTime(LocalDateTime.now());
verificationRepo.save(verification);
return builder.toString();
}
@@ -157,7 +159,7 @@ public class VerificationRuleManager extends AbstractCommManager {
* @param msg 错误信息个性化前缀
*/
public void ocrVarifyIdCard(String name, String idNum, String imagUrl,StringBuilder builder, String msg){
ocrVarifyIdCard(name, idNum, imagUrl,null, builder, msg);
ocrVarifyIdCard(name, idNum, imagUrl,"", builder, msg);
}
/**
* 身份证OCR校验(正面)

+ 22
- 5
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/AbstractOrderManager.java ファイルの表示

@@ -9,6 +9,7 @@ import cn.com.taiji.core.entity.basic.QtkServicehallLocation;
import cn.com.taiji.core.entity.basic.QtkVehicleInfo;
import cn.com.taiji.core.entity.comm.CommonPayConfig;
import cn.com.taiji.core.entity.dict.issue.OrderPayStatus;
import cn.com.taiji.core.entity.dict.issue.OrderPayType;
import cn.com.taiji.core.entity.dict.issue.OrderType;
import cn.com.taiji.core.entity.dict.issue.TransactionBizType;
import cn.com.taiji.core.entity.dict.pay.PayChannelType;
@@ -47,6 +48,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.awt.geom.Point2D;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;

public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>>
@@ -249,9 +251,7 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>>
* 完成支付查询,并更新支付状态
*/
private void paymentDetection(IssueOrderPay pay) throws ServiceHandleException {
if (!hasText(pay.getExternalOrderNo())) {
return;
}

CommonPayConfig payConfig = payConfigRepo.findById(pay.getPayConfigId()).orElse(null);
if (payConfig == null)
throw newBusinessException("支付配置信息不存在" + pay.getPayConfigId());
@@ -274,7 +274,7 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>>
private void queryV3(IssueOrderPay pay, CommonPayConfig payConfig) throws ServiceHandleException {
AtsQueryPayResultV3Request v3Request = new AtsQueryPayResultV3Request();
v3Request.setCreateType(payConfig.getWxServiceType());
v3Request.setExternalOrderNo(pay.getExternalOrderNo());
v3Request.setOutTradeNo(pay.getPayOrderNo());
v3Request.setTradeType(TradeType.valueOf(payConfig.getPayProductType()));
v3Request.setMchid(payConfig.getWxMchId());
v3Request.setApiV3Key(payConfig.getWxApiv3key());
@@ -297,7 +297,7 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>>
private void queryV2(IssueOrderPay pay, CommonPayConfig payConfig) throws ServiceHandleException {
AtsQueryPayResultV2Request v2Request = new AtsQueryPayResultV2Request();
v2Request.setCreateType(payConfig.getWxServiceType());
v2Request.setOutTradeNo(pay.getExternalOrderNo());
v2Request.setOutTradeNo(pay.getPayOrderNo());
v2Request.setAppId(payConfig.getWxAppId());
v2Request.setMchId(payConfig.getWxMchId());
// v2Request.setSubAppId(payConfig.gets);
@@ -312,4 +312,21 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>>
}
}

/**
* 支付订单号需要满足固定规则
*/
public String getPayOrderId(OrderPayType payType, String accountId ) {
// 统一传给微信及支付宝的商户订单号out_trade_no参数的传值格式,参数长度为32位,由11位渠道编码+2位业务类型编码+14位日期(yyyyMMddHHmmss)+2位系统编码+3位随机码组成,示例:52010102006001202402191336260778
// 11位渠道编码
// 2位业务类型编码
String busCode = payType.getBusCode();
// 14位日期(yyyyMMddHHmmss)
String yyyyMMddHHmmss = LocalDateTime.now().format(TimeTools.yyyyMMddHHmmss);
// 2位系统编码/综合业务支撑平台固定06
String systemCode = "06";
// 3位随机码组成
String i = String.format("%03d", new Random().nextInt(999));
return accountId + busCode + yyyyMMddHHmmss + systemCode + i;
}

}

+ 5
- 1
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/OrderInitManager.java ファイルの表示

@@ -1,6 +1,7 @@
package cn.com.taiji.ias.manager.order;

import cn.com.taiji.common.manager.net.http.ServiceHandleException;
import cn.com.taiji.common.pub.CollectionTools;
import cn.com.taiji.common.pub.TimeTools;
import cn.com.taiji.core.entity.basic.QtkAgency;
import cn.com.taiji.core.entity.basic.QtkCardInfo;
@@ -34,6 +35,7 @@ import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import javax.validation.Valid;
import java.time.LocalDateTime;
@@ -289,6 +291,8 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> {
IssueOrderPay orderPay = new IssueOrderPay();
orderPay.setOrderNo(order.getOrderNo());
orderPay.setPayType(OrderPayType.valueOf(productPay.getFeeType()));
orderPay.setPayOrderNo(getPayOrderId(orderPay.getPayType(), order.getAccountId()));
orderPay.setPayStatus(OrderPayStatus.UNPAY);
switch (orderPay.getPayType()) {
case HANDLE:
orderPay.setFee(product.getHandleFee());
@@ -306,7 +310,7 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> {
if (orderPay.getFee() > 0)
orderPays.add(orderPay);
}
if (isEmpty(orderPays))
if (!CollectionUtils.isEmpty(orderPays))
orderPayRepo.persistAll(orderPays);
}


+ 1
- 22
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/OrderPayApplyManager.java ファイルの表示

@@ -88,12 +88,7 @@ public class OrderPayApplyManager extends AbstractOrderManager<OrderPayApplyRequ
@Override
protected void persistInternal(OrderPayApplyRequest request, ServiceLogEvent event,
Map<String, Object> dataStream) throws ServiceHandleException {
IssueOrderinfo order = (IssueOrderinfo)dataStream.get(ORDER);
IssueOrderPay orderPay = (IssueOrderPay)dataStream.get(ORDER_PAY);
// 补充参数
if (orderPay.getPayOrderNo() == null) {
orderPay.setPayOrderNo(getPayOrderId(orderPay, order.getAccountId()));
}
// 获取支付参数,连调3次接口报错时整个事务回滚
// 会发生的极端情况:1、接口实际成功的,但响应报错 2、接口成功,但本方法回滚。
OrderPayApplyResponse res = new OrderPayApplyResponse();
@@ -186,21 +181,5 @@ public class OrderPayApplyManager extends AbstractOrderManager<OrderPayApplyRequ
return res;
}

/**
* 支付订单号需要满足固定规则
*/
private String getPayOrderId(IssueOrderPay orderPay, String accountId ) {
// 统一传给微信及支付宝的商户订单号out_trade_no参数的传值格式,参数长度为32位,由11位渠道编码+2位业务类型编码+14位日期(yyyyMMddHHmmss)+2位系统编码+3位随机码组成,示例:52010102006001202402191336260778
// 11位渠道编码
// 2位业务类型编码
OrderPayType payType = orderPay.getPayType();
String busCode = payType.getBusCode();
// 14位日期(yyyyMMddHHmmss)
String yyyyMMddHHmmss = LocalDateTime.now().format(TimeTools.yyyyMMddHHmmss);
// 2位系统编码/综合业务支撑平台固定06
String systemCode = "06";
// 3位随机码组成
String i = String.format("%03d", new Random().nextInt(999));
return accountId + busCode + yyyyMMddHHmmss + systemCode + i;
}

}

+ 1
- 0
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/UserUploadManager.java ファイルの表示

@@ -134,6 +134,7 @@ public class UserUploadManager extends AbstractOrderManager<UserUploadRequest> {
dataStream.put(CUSTOMER_INFO, customerInfo);
}

////同步老库及YGZ上传,后面优化移到激活后
@Override
protected void onSuccessInternal(UserUploadRequest req, ServiceLogEvent event, Map<String, Object> dataStream) {
IssueOrderinfo order = (IssueOrderinfo)dataStream.get(ORDER);

+ 17
- 9
zhywpt-service-ias/src/main/java/cn/com/taiji/ias/manager/order/VehicleUploadManager.java ファイルの表示

@@ -12,6 +12,7 @@ import cn.com.taiji.core.entity.issue.IssueOrderinfo;
import cn.com.taiji.core.entity.issue.IssueOrderinfoExt;
import cn.com.taiji.core.entity.issue.IssueProduct;
import cn.com.taiji.core.entity.issue.TransactionStatus;
import cn.com.taiji.core.manager.tools.issue.IssueTools;
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse;
import cn.com.taiji.core.model.comm.protocol.ias.order.VehicleUploadRequest;
import cn.com.taiji.core.model.comm.protocol.ias.order.VehicleUploadResponse;
@@ -37,6 +38,7 @@ public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequ

public static final String VEHICLE_INFO = "vehicleInfo";
public static final String ORDER_EXT = "orderExt";
public static final String VEHICLE_CLASS= "vehicleClass";

@Autowired
private VerificationRuleManager verificationRuleManager;
@@ -78,13 +80,17 @@ public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequ
if (!order.getVehicleId().equals(request.getVehiclePlate()+"_"+request.getVehiclePlateColor())) {
throw newBusinessException("当前车牌与订单车牌不一致");
}
// 校验产品是否支持当前车型
// Integer vehicleClass = getVehicleClass(request);
// 校验车型
// throwBisExceptionOn(vehicleClass.intValue() != request.getFeeVehicleType().intValue(),"车型与行驶证不符");
//计算收费车型
Integer vehicleClass = null;
try {
vehicleClass = IssueTools.getVehicleClass(request.getVanType(), request.getVehicleDimensions(),
request.getApprovedCount(), request.getAxleCount(), request.getTotalMass());
} catch (ManagerException e) {
throw newBusinessException(e.getMessage());
}
IssueProduct product = issueProductRepo.findByReleaseId(order.getProductId());
if (!product.getVehicleType().contains(request.getFeeVehicleType() + "")) {
throw newBusinessException(String.format("当前产品不支持%s发行", VehicleType.fromCode(request.getFeeVehicleType()).getValue()));
if (!product.getVehicleType().contains(vehicleClass + "")) {
throw newBusinessException(String.format("当前产品不支持%s发行", VehicleType.fromCode(vehicleClass).getValue()));
}
// 车辆所有人不是持卡人
if (!order.getCustomerName().equals(request.getOwnerName())) {
@@ -96,6 +102,7 @@ public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequ
// 车辆数量校验
validCount(order.getCustomerId(), order.getUserType().getCode());
dataStream.put(ORDER, order);
dataStream.put(VEHICLE_CLASS, vehicleClass);
}

@Override
@@ -103,7 +110,7 @@ public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequ
Map<String, Object> dataStream) throws ServiceHandleException {
IssueOrderinfo order = (IssueOrderinfo)dataStream.get(ORDER);
// 保存车辆
QtkVehicleInfo vehicleInfo = saveVehicle(order, request);
QtkVehicleInfo vehicleInfo = saveVehicle(order, request,dataStream);
// 保存订单
IssueOrderinfoExt ext = saveOrder(order, vehicleInfo, request);
// 自动审核 货车类型走 人工审核
@@ -132,6 +139,7 @@ public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequ
return res;
}

//同步老库及YGZ上传,后面优化移到激活后
@Override
protected void onSuccessInternal(VehicleUploadRequest req, ServiceLogEvent event,
Map<String, Object> dataStream) {
@@ -210,7 +218,7 @@ public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequ
return ext;
}

private QtkVehicleInfo saveVehicle(IssueOrderinfo order, VehicleUploadRequest request) throws ServiceHandleException {
private QtkVehicleInfo saveVehicle(IssueOrderinfo order, VehicleUploadRequest request,Map<String, Object> dataStream) throws ServiceHandleException {
QtkVehicleInfo vehicle = getVehicle(request);
QtkCustomerInfo customer = customerInfoRepo.findByCustomerId(order.getCustomerId());
boolean hasOldVehicle = vehicle != null;
@@ -226,7 +234,7 @@ public class VehicleUploadManager extends AbstractOrderManager<VehicleUploadRequ
vehicle.setCustomerId(order.getCustomerId());
// vehicle.setCustomerInfo(customer);
vehicle.setVehicleType(request.getVehicleType());
vehicle.setType(request.getFeeVehicleType());
vehicle.setType((Integer) dataStream.get(VEHICLE_CLASS));
// 办理人不是车主
if (!order.getCustomerName().equals(request.getOwnerName())) {
vehicle.setOwnerName(request.getOwnerName());

読み込み中…
キャンセル
保存