@@ -52,5 +52,7 @@ public class AssAgencyConfig extends StringPropertyUUIDEntity { | |||
private LocalDateTime createTime;//创建时间 | |||
@Column(name = "UPDATE_TIME") | |||
private LocalDateTime updateTime;//更新时间 | |||
@Column(name = "ASS_NOTICE_URL") | |||
private String assNoticeUrl;//售后渠道通知地址 | |||
} |
@@ -77,6 +77,9 @@ public class AssVehicleInfoChange extends StringPropertyUUIDEntity { | |||
@NotNull | |||
@Column(name = "TYPE") | |||
private Integer type;//收费车型;对应VehicleType枚举 | |||
@NotNull | |||
@Column(name = "OLD_TYPE") | |||
private Integer oldType;//旧收费车型;对应VehicleType枚举 | |||
@NotBlank | |||
@Column(name = "VEHICLE_TYPE") | |||
private String vehicleType;// 行驶证车辆类型(ocr识别的) |
@@ -136,7 +136,7 @@ public class QdCallUtil extends CommonAbstract { | |||
return response; | |||
} | |||
private void saveCallBackResult(String orderNo,OrderType type, String url, AbsQdCall callbackModel, String response, String exceMsg) { | |||
public void saveCallBackResult(String orderNo,OrderType type, String url, AbsQdCall callbackModel, String response, String exceMsg) { | |||
IssueOrderChannelNotice quDaoCallBackResult = new IssueOrderChannelNotice(); | |||
quDaoCallBackResult.setOrderNo(orderNo); | |||
quDaoCallBackResult.setReqUrl(url); |
@@ -5,12 +5,12 @@ import lombok.Data; | |||
@Data | |||
public class AssOrderChannelNoticeModel extends AbsQdCall { | |||
private String orderNo; //订单编号 String | |||
private String orderType; //订单类型 Integer | |||
private String orderStatus; //订单状态 Integer | |||
private Integer orderType; //订单类型 Integer | |||
private Integer orderStatus; //订单状态 Integer | |||
private String reason; //订单取消原因 String | |||
private String cancelTime; //取消时间 String | |||
private String applyTime; //申请时间 String | |||
private CancelInfo cancelInfo; //注销信息 Object | |||
private String deviceReplaceInfo; //设备更换信息 Object | |||
private String vehicleChangeInfo; //车辆变更信息 Object | |||
private VehicleChangeModel vehicleChangeInfo; //车辆变更信息 Object | |||
} |
@@ -0,0 +1,18 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.model; | |||
import lombok.Data; | |||
/** | |||
* @Author:ChenChao | |||
* @Date:2025/9/9 17:33 | |||
* @Filename:VehicleChangeModel | |||
* @description: | |||
*/ | |||
@Data | |||
public class VehicleChangeModel { | |||
private Integer orderStep;//订单阶段 | |||
private String vehicleId;//新车牌号+颜色 | |||
private String oldVehicleId;//旧车牌号+颜色 | |||
private Integer feeVehicleType;//新收费车型 | |||
private Integer oldFeeVehicleType;//新收费车型 | |||
} |
@@ -1,26 +1,21 @@ | |||
package cn.com.taiji.ias.manager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.pub.BeanTools; | |||
import cn.com.taiji.common.pub.TimeTools; | |||
import cn.com.taiji.core.entity.comm.CommonPayConfig; | |||
import cn.com.taiji.core.entity.ass.AssAgencyConfig; | |||
import cn.com.taiji.core.entity.dict.issue.*; | |||
import cn.com.taiji.core.entity.dict.pay.PayChannelType; | |||
import cn.com.taiji.core.entity.dict.pay.TradeState; | |||
import cn.com.taiji.core.entity.dict.pay.TradeType; | |||
import cn.com.taiji.core.entity.issue.IssueOrderPay; | |||
import cn.com.taiji.core.entity.issue.IssueOrderRefund; | |||
import cn.com.taiji.core.entity.issue.IssueOrderinfo; | |||
import cn.com.taiji.core.entity.user.AccountInfo; | |||
import cn.com.taiji.core.entity.user.Staff; | |||
import cn.com.taiji.core.manager.tools.MyTimeTools; | |||
import cn.com.taiji.core.manager.tools.issue.PayTools; | |||
import cn.com.taiji.core.manager.tools.issue.QdCallUtil; | |||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.*; | |||
import cn.com.taiji.core.model.comm.protocol.ias.order.OrderPayApplyRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.order.OrderPayApplyResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.model.AbsQdCall; | |||
import cn.com.taiji.core.model.comm.protocol.ias.vaild.VehiclePlateCheckRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.vaild.VehiclePlateCheckResponse; | |||
import cn.com.taiji.core.repo.jpa.ass.AssAgencyConfigRepo; | |||
import cn.com.taiji.core.repo.jpa.basic.QtkCustomerInfoRepo; | |||
import cn.com.taiji.core.repo.jpa.basic.QtkServicehallRepo; | |||
import cn.com.taiji.core.repo.jpa.basic.QtkVehicleInfoRepo; | |||
@@ -34,12 +29,9 @@ import cn.com.taiji.ias.manager.audit.VerificationRuleManager; | |||
import cn.com.taiji.ias.manager.valid.VehiclePlateCheckManager; | |||
import org.redisson.api.RedissonClient; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.transaction.annotation.Transactional; | |||
import java.time.LocalDateTime; | |||
import java.util.List; | |||
import java.util.Random; | |||
import java.util.concurrent.TimeUnit; | |||
public abstract class AbstractIasManager<T extends AbstractSignTypeRequest<?>> extends AbstractHandleManager<T> { | |||
@@ -68,7 +60,11 @@ public abstract class AbstractIasManager<T extends AbstractSignTypeRequest<?>> e | |||
@Autowired | |||
protected VerificationRuleManager verificationRuleManager; | |||
@Autowired | |||
protected QdCallUtil qdCallUtil; | |||
@Autowired | |||
protected PayTools payTools; | |||
@Autowired | |||
protected AssAgencyConfigRepo assAgencyConfigRepo; | |||
public AbstractIasManager(DataType dataType) { | |||
super(dataType); | |||
@@ -154,4 +150,24 @@ public abstract class AbstractIasManager<T extends AbstractSignTypeRequest<?>> e | |||
+ (int)((Math.random() * 9 + 1) * Math.pow(10, 5)); | |||
} | |||
//发行异步通知渠道 | |||
protected void asyCallBackQd(IssueOrderinfo order, String msg) { | |||
executor.execute(() -> { | |||
qdCallUtil.callBackQd(order, msg); | |||
}); | |||
} | |||
//售后异步通知渠道 | |||
protected void asyCallBackQd(String orderNo,String agencyId, AbsQdCall callbackModel) { | |||
executor.execute(() -> { | |||
AssAgencyConfig agencyConfig = assAgencyConfigRepo.findByAgencyId(agencyId); | |||
if (agencyConfig == null || !hasText(agencyConfig.getAssNoticeUrl())) { | |||
//记录日志 | |||
qdCallUtil.saveCallBackResult(orderNo, OrderType.AFTERSALE, "没有配通知地址", callbackModel, "", "无法通知"); | |||
}else { | |||
qdCallUtil.getAtsChannelNoticeResponse(orderNo, agencyId, OrderType.AFTERSALE, agencyConfig.getAssNoticeUrl(), callbackModel); | |||
} | |||
}); | |||
} | |||
} |
@@ -2,6 +2,7 @@ package cn.com.taiji.ias.manager.ass.vehicleChange; | |||
import cn.com.taiji.common.manager.ManagerException; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.pub.TimeTools; | |||
import cn.com.taiji.core.entity.ass.AssAgencyConfig; | |||
import cn.com.taiji.core.entity.ass.AssOrderinfo; | |||
import cn.com.taiji.core.entity.ass.AssVehicleInfoChange; | |||
@@ -15,6 +16,8 @@ import cn.com.taiji.core.entity.dict.ass.AssOrderType; | |||
import cn.com.taiji.core.entity.dict.basic.*; | |||
import cn.com.taiji.core.entity.dict.issue.OrderType; | |||
import cn.com.taiji.core.entity.user.Staff; | |||
import cn.com.taiji.core.model.comm.protocol.ats.model.AssOrderChannelNoticeModel; | |||
import cn.com.taiji.core.model.comm.protocol.ats.model.VehicleChangeModel; | |||
import cn.com.taiji.core.model.comm.protocol.ias.ass.VehicleChangeApllyRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ias.ass.VehicleChangeAplyResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ias.vaild.VehiclePlateCheckResponse; | |||
@@ -58,6 +61,7 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
private static final String PLATE_CHANGEFLAG = "plate_changeFlag";//车牌变更标识 | |||
private static final String ZC_CARD = "zcCard"; | |||
private static final String ZC_OBU = "zcOBU"; | |||
private static final String CHANGE_INFO = "zcCardInfo"; | |||
@Autowired | |||
private AssAgencyConfigRepo agencyConfigRepo; | |||
@@ -133,7 +137,14 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
throw newBusinessException("渠道配置信息不存在"); | |||
} | |||
if (!agencyConfig.getVehicleChange()) { | |||
throw newBusinessException(agencyConfig.getDealType() == 1?"渠道不支持车辆信息变更,请注销新办":agencyConfig.getDeviceChangeNotice()); | |||
if (SourceType.CHANNEL.equals(req.getOrderSource())){ | |||
throw newBusinessException("渠道不支持车辆信息变更"); | |||
}else{ | |||
if (!hasText(req.getProductId())){ | |||
throw newBusinessException("需要选择产品办理"); | |||
} | |||
} | |||
// throw newBusinessException(agencyConfig.getDealType() == 1?"渠道不支持车辆信息变更,请注销新办":agencyConfig.getDeviceChangeNotice()); | |||
} | |||
dataStream.put(PLATE_CHANGEFLAG, true); | |||
}else { | |||
@@ -242,14 +253,43 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
changeInfo.setUserNegImagesUrl(req.getUserNegImagesUrl()); | |||
changeInfo.setUserAdress(req.getUserAdress()); | |||
//===========申请人结束================= | |||
changeInfo.setProductId(req.getProductId()); | |||
changeInfo.setOldType(vehicleInfo.getType()); | |||
//ocr信息比对 | |||
String failReson = checkOcr(req, dataStream); | |||
order.setAuditReason(failReson); | |||
orderInfoRepo.persist(order); | |||
assVehicleInfoChangeRepo.persist(changeInfo); | |||
dataStream.put(ORDER, order); | |||
dataStream.put(CHANGE_INFO, changeInfo); | |||
} | |||
@Override | |||
protected void onSuccessInternal(VehicleChangeApllyRequest req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException { | |||
AssOrderinfo assOrderinfo = (AssOrderinfo) dataStream.get(ORDER); | |||
AssVehicleInfoChange vehicleInfoChange = (AssVehicleInfoChange) dataStream.get(CHANGE_INFO); | |||
//通知渠道 | |||
AssOrderChannelNoticeModel callModel = new AssOrderChannelNoticeModel(); | |||
callModel.setOrderNo(assOrderinfo.getOrderNo()); | |||
callModel.setOrderType(assOrderinfo.getOrderType().getCode()); | |||
callModel.setOrderStatus(assOrderinfo.getOrderStatus().getCode()); | |||
callModel.setReason(assOrderinfo.getCancelReason()); | |||
// callModel.setCancelTime(assOrderinfo.getCancelTime().format(TimeTools.ISO_LOCAL_DATE_TIME)); | |||
callModel.setApplyTime(assOrderinfo.getApplyTime().format(TimeTools.ISO_LOCAL_DATE_TIME)); | |||
VehicleChangeModel vehicleChangeModel = new VehicleChangeModel(); | |||
vehicleChangeModel.setOrderStep(assOrderinfo.getOrderStep().getCode()); | |||
vehicleChangeModel.setVehicleId(vehicleInfoChange.getVehiclePlate()+"_"+vehicleInfoChange.getVehiclePlateColor()); | |||
vehicleChangeModel.setOldVehicleId(assOrderinfo.getVehicleId()); | |||
vehicleChangeModel.setFeeVehicleType(vehicleInfoChange.getType()); | |||
vehicleChangeModel.setOldFeeVehicleType(vehicleInfoChange.getOldType()); | |||
callModel.setVehicleChangeInfo(vehicleChangeModel); | |||
//通知渠道 | |||
asyCallBackQd(assOrderinfo.getOrderNo(),assOrderinfo.getAgencyId(), callModel); | |||
} | |||
private String checkOcr(VehicleChangeApllyRequest req, Map<String, Object> dataStream) throws ServiceHandleException { | |||
AssOrderinfo orderinfo = (AssOrderinfo) dataStream.get(ORDER); | |||
OrderVerificationModel model = new OrderVerificationModel(); |
@@ -10,7 +10,6 @@ import cn.com.taiji.core.entity.dict.issue.TransactionBizType; | |||
import cn.com.taiji.core.entity.issue.IssueOrderinfo; | |||
import cn.com.taiji.core.entity.issue.IssueOrderinfoExt; | |||
import cn.com.taiji.core.entity.issue.TransactionStatus; | |||
import cn.com.taiji.core.manager.tools.issue.QdCallUtil; | |||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.ois.issue.OisOrderSaveRequest; | |||
import cn.com.taiji.core.repo.jpa.basic.QtkCustomerInfoRepo; | |||
@@ -73,8 +72,7 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>> | |||
@Autowired | |||
protected IssueOrderChannelNoticeRepo issueOrderChannelNoticeRepo; | |||
@Autowired | |||
protected QdCallUtil qdCallUtil; | |||
@Autowired | |||
protected IssueOrderRefundRepo refundRepo; | |||
@@ -123,13 +121,7 @@ public abstract class AbstractOrderManager<T extends AbstractSignTypeRequest<?>> | |||
jsonPostRepeat(req); | |||
} | |||
//异步通知渠道 | |||
protected void asyCallBackQd(IssueOrderinfo order, String msg) { | |||
executor.execute(() -> { | |||
qdCallUtil.callBackQd(order, msg); | |||
}); | |||
} | |||
protected void checkElecFence(Double latitude, Double longitude, QtkServiceHall serviceHall) throws ServiceHandleException { | |||
//渠道传的地点 |