@@ -20,7 +20,7 @@ import java.time.LocalDateTime; | |||
@Table(name = "ASS_DEVICE_RESUME") | |||
public class AssDeviceResume extends AbstractStringPropertyUUIDEntity { | |||
@NotNull | |||
@NotBlank | |||
@Column(name = "ORDER_NO") | |||
private String orderNo; // 订单id | |||
@Column(name = "CARD_EXPIRE_TIME") |
@@ -3,6 +3,7 @@ package cn.com.taiji.core.entity.issue; | |||
import cn.com.taiji.common.entity.StringPropertyUUIDEntity; | |||
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 lombok.Getter; | |||
import lombok.Setter; | |||
import javax.persistence.*; | |||
@@ -63,5 +64,8 @@ public class IssueOrderPay extends StringPropertyUUIDEntity { | |||
private Long refundAmount;//退款金额 | |||
@Column(name = "REFUND_TIME") | |||
private LocalDateTime refundTime;//退款时间 | |||
@Enumerated(EnumType.STRING) | |||
@Column(name = "ORDER_TYPE") | |||
private OrderType orderType = OrderType.ISSUE;//类型:发行、售后 | |||
} |
@@ -8,6 +8,7 @@ import cn.com.taiji.common.pub.json.JsonTools; | |||
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.pay.PayChannelType; | |||
import cn.com.taiji.core.entity.dict.pay.TradeState; | |||
import cn.com.taiji.core.entity.dict.pay.TradeType; | |||
@@ -52,23 +53,26 @@ public class PayTools extends AbstractManager { | |||
/** | |||
* 创建支付单 | |||
* @param orderNo 订单号 | |||
* @param orderType 订单类型 | |||
* @param fee 金额==单位分 | |||
* @param payConfig 支付配置id | |||
* @param payType 字符类型 | |||
* @param agencyId 渠道编号 | |||
*/ | |||
public void createPayOrder(String orderNo, Long fee, String payConfig, OrderPayType payType,String agencyId) { | |||
public IssueOrderPay createPayOrder(String orderNo, OrderType orderType, Long fee, String payConfig, OrderPayType payType, String agencyId) { | |||
if (fee <= 0){ | |||
return; | |||
return null; | |||
} | |||
IssueOrderPay orderPay = new IssueOrderPay(); | |||
orderPay.setOrderNo(orderNo); | |||
orderPay.setOrderType(orderType); | |||
orderPay.setPayType(payType); | |||
orderPay.setPayOrderNo(getPayOrderId(orderPay.getPayType(), agencyId)); | |||
orderPay.setPayStatus(OrderPayStatus.UNPAY); | |||
orderPay.setFee(fee); | |||
orderPay.setPayConfigId(payConfig); | |||
orderPayRepo.persist(orderPay); | |||
return orderPay; | |||
} | |||
/** | |||
@@ -246,7 +250,11 @@ public class PayTools extends AbstractManager { | |||
v2Request.setNotifyUrl("https://skx.mynatapp.cc/qtucpaymgt/wxv3/notify/"); | |||
v2Request.setTradeType(TradeType.valueOf(payConfig.getPayProductType())); | |||
// v2Request.setOpenid(req.getSubOpenId()); | |||
v2Request.setSubOpenid(wxOpenId); | |||
if (payConfig.getWxServiceType() == 1) { | |||
v2Request.setOpenid(wxOpenId); | |||
}else { | |||
v2Request.setSubOpenid(wxOpenId);//昱路子商户号appid是九州 | |||
} | |||
// v2Request.setSceneInfo(); | |||
v2Request.setAppId(payConfig.getWxAppId()); | |||
v2Request.setMchId(payConfig.getWxMchId()); |
@@ -24,6 +24,7 @@ public class VehicleChangeApllyRequest extends AbstractSignTypeRequest<VehicleCh | |||
super(AssServiceCmd.VEHICLECHANGE); | |||
} | |||
private Boolean isSend;//是否邮寄 | |||
private String staffNum; | |||
private String openId; | |||
@NotBlank |
@@ -8,7 +8,7 @@ import cn.com.taiji.core.model.comm.protocol.SignServiceSystem; | |||
import cn.com.taiji.core.model.comm.protocol.SignServiceType; | |||
public enum MsgwServiceSystem implements SignServiceSystem { | |||
SEND("send", "消息发送接口", "/send/api/json", "/send/common/binapi/") { | |||
MSGW("msgw", "消息发送接口", "/msgw/api/json", "/msgw/common/binapi/") { | |||
public List<SignServiceType> listAllServices() { | |||
return Arrays.asList(MsgwServiceType.values()); | |||
} |
@@ -14,7 +14,7 @@ import lombok.Getter; | |||
public enum MsgwServiceType implements SignServiceType { | |||
NOTICE("消息发送", "^NOTICE\\S+\\.json$", MsgwSendCmd.values()), | |||
SEND("消息发送", "^SEND\\S+\\.json$", MsgwSendCmd.values()), | |||
; | |||
@Getter | |||
@@ -32,7 +32,7 @@ public enum MsgwServiceType implements SignServiceType { | |||
@Override | |||
public SignServiceSystem getServiceSystem() { | |||
return MsgwServiceSystem.SEND; | |||
return MsgwServiceSystem.MSGW; | |||
} | |||
@Override |
@@ -8,8 +8,8 @@ import cn.com.taiji.core.model.comm.protocol.msgw.MsgwServiceType; | |||
public enum MsgwSendCmd implements SignServiceCommand { | |||
SMS("短信消息发送", MsgwSmsSendRequest.class), | |||
WXMINI("微信小程序消息发送", BillReversalRequest.class), | |||
WXMP("微信公众号消息发送", BillReversalRequest.class), | |||
WXMINI("微信小程序消息发送", MsgwWxMiniSendRequest.class), | |||
WXMP("微信公众号消息发送", MsgwWxMpSendRequest.class), | |||
; | |||
private final String value; | |||
@@ -22,7 +22,7 @@ public enum MsgwSendCmd implements SignServiceCommand { | |||
@Override | |||
public SignServiceType getServiceType() { | |||
return MsgwServiceType.NOTICE; | |||
return MsgwServiceType.SEND; | |||
} | |||
public static MsgwSendCmd fromIfCode(String ifCode) { |
@@ -34,6 +34,9 @@ public class DeviceResumeAddRequestDTO extends AbstractBizRequestDTO { | |||
@NotBlank | |||
@ApiModelProperty(value = "用户姓名") | |||
private String customerName;// 用户姓名 | |||
@NotNull | |||
@ApiModelProperty(value = "客户证件类型") | |||
private IdType customerIdType;//客户证件类型 | |||
@NotBlank | |||
@ApiModelProperty(value = "身份证号") | |||
private String customerIdNum;// 身份证号 |
@@ -138,6 +138,7 @@ public class DeviceResumeManagerImpl extends AbstractCommManager implements Devi | |||
QtkCustomerInfo customerInfo = customerInfoRepo.findByCustomerId(cardInfo.getCustomerId()); | |||
AssOrderinfo orderinfo = new AssOrderinfo(); | |||
BeanTools.copyProperties(reqDto, orderinfo); | |||
orderinfo.setOrderNo(createOrderNo(cardInfo.getAgencyId())); | |||
orderinfo.setOrderType(AssOrderType.DEVICE_RESUME); | |||
orderinfo.setOrderSource(reqDto.getOrderSource()); | |||
orderinfo.setAgencyId(cardInfo.getAgencyId()); | |||
@@ -147,23 +148,22 @@ public class DeviceResumeManagerImpl extends AbstractCommManager implements Devi | |||
orderinfo.setApplyTime(LocalDateTime.now()); | |||
orderinfo.setOpenId(findOpenIdByToken(reqDto.getAccessToken())); | |||
orderinfo.setCustomerId(cardInfo.getCustomerId()); | |||
orderinfo.setCustomerName(reqDto.getCustomerName()); | |||
orderinfo.setCustomerTel(reqDto.getCustomerTel()); | |||
orderinfo.setUserType(customerInfo.getUserType()); | |||
orderinfo.setArtificialStatus(0); | |||
orderinfo.setVehicleId(cardInfo.getVehicleId()); | |||
orderinfo.setVehiclePlate(reqDto.getVehiclePlate()); | |||
orderinfo.setVehiclePlateColor(reqDto.getVehiclePlateColor()); | |||
orderinfo.setCardId(cardInfo.getCardId()); | |||
orderinfo.setCardType(CardType.fromCode(cardInfo.getCardType())); | |||
orderinfo.setObuId(reqDto.getObuId()); | |||
return orderinfoRepo.save(orderinfo); | |||
} | |||
public AssDeviceResume saveDeviceResume(DeviceResumeAddRequestDTO reqDto, AssOrderinfo orderinfo){ | |||
AssDeviceResume deviceResume = new AssDeviceResume(); | |||
QtkCardInfo cardInfo = cardInfoRepo.findByCardId(reqDto.getCardId()); | |||
QtkObuInfo obuInfo = obuInfoRepo.findByObuId(reqDto.getObuId()); | |||
BeanTools.copyProperties(reqDto, deviceResume); | |||
deviceResume.setOrderNo(orderinfo.getOrderNo()); | |||
deviceResume.setCardStatus(cardInfo.getCardStatus()); | |||
deviceResume.setObuStatus(obuInfo.getObuStatus()); | |||
deviceResume.setInsertTime(LocalDateTime.now()); | |||
return deviceResumeRepo.save(deviceResume); | |||
} |
@@ -182,6 +182,8 @@ public class PromotionManagerImpl extends AbstractManagewManager implements Prom | |||
UseFeeModel useFeeModel = new UseFeeModel(); | |||
useFeeModel.setFeeType(t.getUseFeeType()); | |||
useFeeModel.setFee(t.getFee()); | |||
useFeeModel.setBillingMode(t.getBillingMode()); | |||
useFeeModel.setPercentage(t.getPercentage()); | |||
//如果支付方式表有信息,则赋值 | |||
payUseMap.map(m -> m.get(t.getUseFeeType().name())).ifPresent(m -> copyProperties(m, useFeeModel)); | |||
useFeeModelList.add(useFeeModel); |
@@ -4,11 +4,6 @@ import cn.com.taiji.core.entity.dict.issue.UseFeeJfType; | |||
import cn.com.taiji.core.entity.dict.issue.UseFeeType; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import javax.persistence.Column; | |||
import javax.persistence.EnumType; | |||
import javax.persistence.Enumerated; | |||
import javax.validation.constraints.NotBlank; | |||
import javax.validation.constraints.NotNull; | |||
@@ -21,7 +16,7 @@ import javax.validation.constraints.NotNull; | |||
@Data | |||
public class UseFeeModel extends CommonFee{ | |||
@NotBlank | |||
@NotNull | |||
@ApiModelProperty(value = "费用类型") | |||
private UseFeeType feeType;//费用类型 | |||
@@ -2,6 +2,10 @@ package cn.com.taiji.msgw.api; | |||
import javax.validation.Valid; | |||
import cn.com.taiji.core.entity.dict.ass.AssOrderType; | |||
import cn.com.taiji.core.entity.dict.issue.OrderType; | |||
import cn.com.taiji.core.model.comm.protocol.msgw.send.MsgwWxMpSendRequest; | |||
import cn.com.taiji.msgw.manager.universalSend.UniversalSendManager; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.web.bind.annotation.PostMapping; | |||
import org.springframework.web.bind.annotation.RequestBody; | |||
@@ -18,6 +22,8 @@ import cn.com.taiji.msgw.manager.weixin.WxManager; | |||
import io.swagger.annotations.Api; | |||
import io.swagger.annotations.ApiOperation; | |||
import java.time.LocalDateTime; | |||
/** | |||
* @Author ChenChao | |||
* @Date 2024/10/7 0:15 | |||
@@ -31,6 +37,8 @@ public class WxMpPushController { | |||
@Autowired | |||
private WxManager wxManager; | |||
@Autowired | |||
private UniversalSendManager universalSendManager; | |||
@ApiOperation(value = "微信公众号-消息模板列表") | |||
@PostMapping(value = "/wxMpMessageList") | |||
@@ -45,5 +53,13 @@ public class WxMpPushController { | |||
MessageWxMpAddResponseDto response = wxManager.mpAdd(request); | |||
return ApiResponse.of(response); | |||
} | |||
@ApiOperation(value = "微信公众号-1") | |||
@PostMapping(value = "/test") | |||
public ApiResponse test() throws ManagerException { | |||
wxManager.test(); | |||
return ApiResponse.of("success"); | |||
} | |||
} |
@@ -24,7 +24,7 @@ public class MyCommHandleManager extends AbstractCommHandleManager { | |||
private SendServiceHandler sendServiceHandler; | |||
public MyCommHandleManager() { | |||
super(MsgwServiceSystem.SEND); | |||
super(MsgwServiceSystem.MSGW); | |||
} | |||
@@ -29,7 +29,7 @@ import cn.com.taiji.msgw.manager.universalSend.UniversalSendManager; | |||
public class SendServiceHandler extends AbstractMsgwServiceHandler<MsgwSendCmd> { | |||
public SendServiceHandler() { | |||
super(MsgwServiceType.NOTICE); | |||
super(MsgwServiceType.SEND); | |||
} | |||
@Autowired |
@@ -27,4 +27,5 @@ public interface WxManager { | |||
MessageWxMiniAddResponseDto miniAdd(MessageWxMiniAddRequestDto request) throws ManagerException; | |||
void test(); | |||
} |
@@ -1,5 +1,8 @@ | |||
package cn.com.taiji.msgw.manager.weixin; | |||
import cn.com.taiji.core.entity.dict.ass.AssOrderType; | |||
import cn.com.taiji.core.entity.dict.issue.OrderType; | |||
import cn.com.taiji.core.model.comm.protocol.msgw.send.MsgwWxMpSendRequest; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -14,6 +17,8 @@ import cn.com.taiji.msgw.manager.AbstractCommManager; | |||
import cn.com.taiji.msgw.manager.importReview.MessageImportManager; | |||
import cn.com.taiji.msgw.manager.messageWaitSend.MessageWaitSendManager; | |||
import java.time.LocalDateTime; | |||
/** | |||
* 微信开发工具(小程序、公众号) | |||
* | |||
@@ -60,4 +65,31 @@ public class WxManagerImpl extends AbstractCommManager implements WxManager { | |||
return response; | |||
} | |||
@Override | |||
public void test(){ | |||
String orderNo = "202509101018440001"; | |||
MsgwWxMpSendRequest mpSendRequest = new MsgwWxMpSendRequest(); | |||
mpSendRequest.setData("{" + | |||
"\"first\":{\"value\":\"订单状态变更\"}," + | |||
"\"keyword1\":{\"value\":\"" + orderNo + "\"}," + | |||
"\"keyword2\":{\"value\":\"" + AssOrderType.CANCEL.getDesc() + "\"}," + | |||
"\"keyword3\":{\"value\":\"" + LocalDateTime.now() + "\"}," + | |||
"\"remark\":{\"value\":\"设备注销成功\"}" + | |||
"}"); | |||
mpSendRequest.setClientId("bfc4040bda90473d8ceab246555361a3"); | |||
mpSendRequest.setTitle("订单状态变更"); | |||
mpSendRequest.setMpOpenId("ogb3at8cCVh9iy0cchtk5Yr3AR68"); | |||
mpSendRequest.setTemplateId("Wn_--Fg98Okqydw8YWLVSp2gxESXZ5DhJF60hKae-FM"); | |||
mpSendRequest.setSendOrderType(AssOrderType.CANCEL); | |||
mpSendRequest.setOrderType(OrderType.AFTERSALE); | |||
mpSendRequest.setOrderNo(orderNo); | |||
try { | |||
jsonPostRepeat(mpSendRequest); | |||
} catch (Exception e) { | |||
} | |||
} | |||
} |
@@ -0,0 +1,41 @@ | |||
package cn.com.taiji.ias.config; | |||
import com.fasterxml.jackson.core.JsonParser; | |||
import com.fasterxml.jackson.databind.DeserializationContext; | |||
import com.fasterxml.jackson.databind.JsonDeserializer; | |||
import java.io.IOException; | |||
import java.time.LocalDateTime; | |||
import java.time.format.DateTimeFormatter; | |||
import java.time.format.DateTimeParseException; | |||
public class FlexibleLocalDateTimeDeserializer extends JsonDeserializer<LocalDateTime> { | |||
private static final DateTimeFormatter[] FORMATS = { | |||
// DateTimeFormatter.ISO_LOCAL_DATE_TIME, // yyyy-MM-dd'T'HH:mm:ss | |||
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"), // yyyy-MM-dd HH:mm:ss | |||
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"), // 可选:支持不带秒的 ISO | |||
// DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") // 可选:支持不带秒的空格格式 | |||
}; | |||
@Override | |||
public LocalDateTime deserialize(JsonParser p, DeserializationContext context) throws IOException { | |||
String text = p.getValueAsString().trim(); | |||
if (text == null || text.isEmpty()) { | |||
return null; | |||
} | |||
for (DateTimeFormatter formatter : FORMATS) { | |||
try { | |||
return LocalDateTime.parse(text, formatter); | |||
} catch (DateTimeParseException e) { | |||
// 尝试下一个格式 | |||
} | |||
} | |||
// 如果所有格式都失败,抛出异常 | |||
throw context.weirdStringException(text, LocalDateTime.class, | |||
"无法解析为任何支持的 LocalDateTime 格式。支持格式: " + | |||
"yyyy-MM-dd'T'HH:mm:ss, yyyy-MM-dd HH:mm:ss"); | |||
} | |||
} |
@@ -2,6 +2,7 @@ package cn.com.taiji.ias.config; | |||
import cn.com.taiji.common.pub.TimeTools; | |||
import cn.com.taiji.common.pub.json.JsonTools; | |||
import com.fasterxml.jackson.databind.module.SimpleModule; | |||
import org.springframework.context.annotation.Bean; | |||
import org.springframework.context.annotation.Configuration; | |||
@@ -9,12 +10,17 @@ import com.fasterxml.jackson.databind.ObjectMapper; | |||
import cn.com.taiji.common.pub.json.ObjectMapperBuilder; | |||
import java.time.LocalDateTime; | |||
@Configuration | |||
public class JsonConfig { | |||
@Bean | |||
public ObjectMapper objectMapper() { | |||
ObjectMapper objectMapper = | |||
ObjectMapperBuilder.create().setLocalDateTimeFormatter(TimeTools.DATE_TIME_FORMATTER).build(); | |||
SimpleModule simpleModule = new SimpleModule(); | |||
simpleModule.addDeserializer(LocalDateTime.class,new FlexibleLocalDateTimeDeserializer()); | |||
objectMapper.registerModule(simpleModule); | |||
JsonTools.customerMapper(objectMapper); | |||
return objectMapper; | |||
} |
@@ -3,6 +3,7 @@ package cn.com.taiji.ias.manager; | |||
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.basic.QtkCardInfo; | |||
import cn.com.taiji.core.entity.dict.issue.*; | |||
import cn.com.taiji.core.entity.issue.IssueOrderPay; | |||
import cn.com.taiji.core.entity.issue.IssueOrderRefund; | |||
@@ -15,6 +16,10 @@ import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | |||
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.model.comm.protocol.ods.oqs.issue.OqsCardQueryRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.oqs.issue.OqsCardQueryResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ods.oqs.issue.OqsIssueOrderQueryRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ods.oqs.issue.OqsIssueOrderQueryResponse; | |||
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; | |||
@@ -31,6 +36,7 @@ import org.redisson.api.RedissonClient; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import java.time.LocalDateTime; | |||
import java.util.List; | |||
import java.util.Random; | |||
public abstract class AbstractIasManager<T extends AbstractSignTypeRequest<?>> extends AbstractHandleManager<T> { | |||
@@ -170,4 +176,20 @@ public abstract class AbstractIasManager<T extends AbstractSignTypeRequest<?>> e | |||
} | |||
//发行:校验车牌是否已开卡 | |||
protected void validVehiclePlate(String vehiclePlate, Integer vehiclePlateColor) throws ServiceHandleException { | |||
OqsCardQueryRequest req = new OqsCardQueryRequest(); | |||
req.setVehicleId(vehiclePlate + "_" + vehiclePlateColor); | |||
OqsCardQueryResponse res = jsonPostRepeat(req); | |||
List<QtkCardInfo> qtkCardInfos = res.getQtkCardInfos(); | |||
throwBisExceptionOn(qtkCardInfos != null && !qtkCardInfos.isEmpty(), "此车牌号已开卡!"); | |||
} | |||
//发行:检验老库订单 | |||
protected void checkOldOrder(String vehiclePlate, Integer vehiclePlateColor) throws ServiceHandleException { | |||
OqsIssueOrderQueryRequest req = new OqsIssueOrderQueryRequest(); | |||
req.setVehicleId(vehiclePlate + "_" + vehiclePlateColor); | |||
OqsIssueOrderQueryResponse res = jsonPostRepeat(req); | |||
throwBisExceptionOn(res.getIsExist(), "当前车辆存在未完成订单"); | |||
} | |||
} |
@@ -14,7 +14,8 @@ import cn.com.taiji.core.entity.dict.ass.AssOrderStatus; | |||
import cn.com.taiji.core.entity.dict.ass.AssOrderStep; | |||
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.dict.issue.*; | |||
import cn.com.taiji.core.entity.issue.*; | |||
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; | |||
@@ -26,6 +27,10 @@ import cn.com.taiji.core.repo.jpa.ass.AssAgencyConfigRepo; | |||
import cn.com.taiji.core.repo.jpa.ass.AssVehicleInfoChangeRepo; | |||
import cn.com.taiji.core.repo.jpa.basic.QtkCardInfoRepo; | |||
import cn.com.taiji.core.repo.jpa.basic.QtkObuInfoRepo; | |||
import cn.com.taiji.core.repo.jpa.issue.IssueOrderinfoRepo; | |||
import cn.com.taiji.core.repo.jpa.issue.IssueProductPayRepo; | |||
import cn.com.taiji.core.repo.jpa.issue.IssueProductPromotionRepo; | |||
import cn.com.taiji.core.repo.jpa.issue.IssueProductRepo; | |||
import cn.com.taiji.ias.dict.DataType; | |||
import cn.com.taiji.ias.manager.ass.AbstractAssManager; | |||
import cn.com.taiji.ias.model.ServiceLogEvent; | |||
@@ -49,6 +54,14 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
@Autowired | |||
private AssVehicleInfoChangeRepo assVehicleInfoChangeRepo; | |||
@Autowired | |||
private IssueProductPayRepo issueProductPayRepo; | |||
@Autowired | |||
private IssueOrderinfoRepo issueorderInfoRepo; | |||
@Autowired | |||
private IssueProductRepo issueProductRepo; | |||
@Autowired | |||
private IssueProductPromotionRepo promotionRepo; | |||
public VehicleChangeApplyManager() { | |||
super(DataType.VEHICLE_CHANGE_APPLY); | |||
@@ -62,6 +75,7 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
private static final String ZC_CARD = "zcCard"; | |||
private static final String ZC_OBU = "zcOBU"; | |||
private static final String CHANGE_INFO = "zcCardInfo"; | |||
private static final String PRODUCT = "product"; | |||
@Autowired | |||
private AssAgencyConfigRepo agencyConfigRepo; | |||
@@ -127,25 +141,9 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
if (cardInfo.getCardId().startsWith("9901")) { | |||
throw newBusinessException("在中国ETC小程序操作过户/取消订单后再在九州小程序进行新办"); | |||
} | |||
//更换车牌,校验新车牌 | |||
//更换车牌,新车牌相关校验 | |||
if (req.getOldVehicleId().equals(req.getVehiclePlate()+"_"+req.getVehiclePlateColor())){ | |||
VehiclePlateCheckResponse res = checkVehiclePlate(req.getVehiclePlate(), req.getVehiclePlateColor()); | |||
throwBisExceptionOn(res.getResult() != 4, res.getInfo()); | |||
// 工建行储值卡引导用户到银行线下网点办理。 todo | |||
AssAgencyConfig agencyConfig = agencyConfigRepo.findByAgencyId(cardInfo.getAgencyId()); | |||
if (agencyConfig == null) { | |||
throw newBusinessException("渠道配置信息不存在"); | |||
} | |||
if (!agencyConfig.getVehicleChange()) { | |||
if (SourceType.CHANNEL.equals(req.getOrderSource())){ | |||
throw newBusinessException("渠道不支持车辆信息变更"); | |||
}else{ | |||
if (!hasText(req.getProductId())){ | |||
throw newBusinessException("需要选择产品办理"); | |||
} | |||
} | |||
// throw newBusinessException(agencyConfig.getDealType() == 1?"渠道不支持车辆信息变更,请注销新办":agencyConfig.getDeviceChangeNotice()); | |||
} | |||
validNewCar(req, cardInfo,dataStream); | |||
dataStream.put(PLATE_CHANGEFLAG, true); | |||
}else { | |||
dataStream.put(PLATE_CHANGEFLAG, false); | |||
@@ -153,14 +151,44 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
} | |||
private void validNewCar(VehicleChangeApllyRequest req, QtkCardInfo cardInfo,Map<String, Object> dataStream) throws ServiceHandleException { | |||
// 工建行储值卡引导用户到银行线下网点办理。 todo | |||
AssAgencyConfig agencyConfig = agencyConfigRepo.findByAgencyId(cardInfo.getAgencyId()); | |||
if (agencyConfig == null) { | |||
throw newBusinessException("渠道配置信息不存在"); | |||
} | |||
if (!agencyConfig.getVehicleChange() && !hasText(req.getProductId())) { | |||
throw newBusinessException("需要选择产品办理"); | |||
} | |||
//校验产品 | |||
if (hasText(req.getProductId())) { | |||
IssueProduct product = issueProductRepo.findByReleaseId(req.getProductId()); | |||
IssueProductPromotion promotion = promotionRepo.findByReleaseId(req.getProductId()); | |||
if (product == null || promotion == null) { | |||
throw newBusinessException("当前选择的产品不存在"); | |||
} | |||
dataStream.put(PRODUCT, product); | |||
} | |||
VehiclePlateCheckResponse res = checkVehiclePlate(req.getVehiclePlate(), req.getVehiclePlateColor()); | |||
throwBisExceptionOn(res.getResult() != 4, res.getInfo()); | |||
//校验新车是否开过卡 | |||
validVehiclePlate(req.getVehiclePlate(), req.getVehiclePlateColor()); | |||
// 校验车牌是否有老订单 | |||
checkOldOrder(req.getVehiclePlate(), req.getVehiclePlateColor()); | |||
//校验本地发行订单 | |||
IssueOrderinfo order = issueorderInfoRepo.findNormalByVehicleId(req.getVehiclePlate() + "_" + req.getVehiclePlateColor()); | |||
if (order != null) throw newBusinessException("新车辆存在发行订单,不可办理"); | |||
} | |||
@Override | |||
protected void persistInternal(VehicleChangeApllyRequest req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException { | |||
QtkVehicleInfo vehicleInfo = (QtkVehicleInfo) dataStream.get(VEHICLE_INFO); | |||
QtkCustomerInfo customerInfo = customerInfoRepo.findByCustomerId(vehicleInfo.getCustomerId()); | |||
QtkObuInfo qtkObuInfo = (QtkObuInfo) dataStream.get(ZC_OBU); | |||
QtkCardInfo qtkCardInfo = (QtkCardInfo) dataStream.get(ZC_CARD); | |||
IssueProduct product = (IssueProduct) dataStream.get(PRODUCT); | |||
//售后表 | |||
//=====================================================售后表======================================== | |||
AssOrderinfo order = new AssOrderinfo(); | |||
LocalDateTime now = LocalDateTime.now(); | |||
order.setCardId(qtkCardInfo.getCardId()); | |||
@@ -198,7 +226,7 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
order.setOpenId(req.getOpenId()); | |||
} | |||
//车辆信息 | |||
//=========================================车辆信息====================================================== | |||
AssVehicleInfoChange changeInfo = new AssVehicleInfoChange(); | |||
changeInfo.setOrderNo(order.getOrderNo()); | |||
changeInfo.setChangeType((Boolean) dataStream.get(PLATE_CHANGEFLAG)); | |||
@@ -255,7 +283,15 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
//===========申请人结束================= | |||
changeInfo.setProductId(req.getProductId()); | |||
changeInfo.setOldType(vehicleInfo.getType()); | |||
if (product != null) { | |||
changeInfo.setAccountId(product.getAgencyId()); | |||
changeInfo.setShippingStatus(req.getIsSend()?ShippingStatus.WAIT_SHIPPING:ShippingStatus.NONE); | |||
changeInfo.setProductId(product.getReleaseId()); | |||
changeInfo.setProductName(product.getProductName()); | |||
changeInfo.setAmount(product.getAmount()); | |||
//创建支付单 | |||
createPayOrder(order, product); | |||
} | |||
//ocr信息比对 | |||
String failReson = checkOcr(req, dataStream); | |||
order.setAuditReason(failReson); | |||
@@ -266,6 +302,38 @@ public class VehicleChangeApplyManager extends AbstractAssManager<VehicleChangeA | |||
} | |||
private void createPayOrder(AssOrderinfo order, IssueProduct product) { | |||
List<IssueProductPay> productPays = issueProductPayRepo.findByFeeCategoryAndReleaseId(FeeCategory.HANDLE, product.getReleaseId()); | |||
// for (IssueProductPay productPay : productPays) { | |||
// 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); | |||
// Long fee = 0l; | |||
// switch (orderPay.getPayType()) { | |||
// case HANDLE: | |||
// fee = product.getHandleFee(); | |||
// break; | |||
// case MARGIN: | |||
// fee = product.getMarginFee(); | |||
// break; | |||
// case PRESTORE: | |||
// fee = product.getPrestoreFee(); | |||
// break; | |||
// case PROCESS: | |||
// fee = product.getProcessFee(); | |||
// break; | |||
// default: | |||
// break; | |||
// } | |||
// payTools.createPayOrder(order.getOrderNo(),OrderType.ISSUE, fee, productPay.getPayConfigId(), req.getH5Type(), order); | |||
// orderPay.setPayConfigId(productPay.getPayConfigId()); | |||
//// if (orderPay.getFee() > 0) | |||
//// orderPays.add(orderPay); | |||
// } | |||
} | |||
@Override | |||
protected void onSuccessInternal(VehicleChangeApllyRequest req, ServiceLogEvent event, Map<String, Object> dataStream) throws ServiceHandleException { | |||
AssOrderinfo assOrderinfo = (AssOrderinfo) dataStream.get(ORDER); |
@@ -197,20 +197,7 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> { | |||
return res; | |||
} | |||
private void checkOldOrder(String vehiclePlate, Integer vehiclePlateColor) throws ServiceHandleException { | |||
OqsIssueOrderQueryRequest req = new OqsIssueOrderQueryRequest(); | |||
req.setVehicleId(vehiclePlate + "_" + vehiclePlateColor); | |||
OqsIssueOrderQueryResponse res = jsonPostRepeat(req); | |||
throwBisExceptionOn(res.getIsExist(), "当前车辆存在未完成订单"); | |||
} | |||
private void validVehiclePlate(String vehiclePlate, Integer vehiclePlateColor) throws ServiceHandleException { | |||
OqsCardQueryRequest req = new OqsCardQueryRequest(); | |||
req.setVehicleId(vehiclePlate + "_" + vehiclePlateColor); | |||
OqsCardQueryResponse res = jsonPostRepeat(req); | |||
List<QtkCardInfo> qtkCardInfos = res.getQtkCardInfos(); | |||
throwBisExceptionOn(qtkCardInfos != null && !qtkCardInfos.isEmpty(), "此车牌号已开卡!"); | |||
} | |||
private void checkLocalOrder(OrderInitRequest request) throws ServiceHandleException { | |||
IssueOrderinfo order = orderInfoRepo.findNormalByVehicleId(request.getVehiclePlate() + "_" + request.getVehiclePlateColor()); | |||
@@ -285,6 +272,7 @@ public class OrderInitManager extends AbstractOrderManager<OrderInitRequest> { | |||
for (IssueProductPay productPay : productPays) { | |||
IssueOrderPay orderPay = new IssueOrderPay(); | |||
orderPay.setOrderNo(order.getOrderNo()); | |||
orderPay.setOrderType(OrderType.ISSUE); | |||
orderPay.setPayType(OrderPayType.valueOf(productPay.getFeeType())); | |||
orderPay.setPayOrderNo(getPayOrderId(orderPay.getPayType(), order.getAccountId())); | |||
orderPay.setPayStatus(OrderPayStatus.UNPAY); |