|
|
@@ -0,0 +1,171 @@
|
|
|
+package com.jzg.quotation.zijin.api.component;
|
|
|
+
|
|
|
+
|
|
|
+import com.jzg.commons.exception.SystemException;
|
|
|
+import com.jzg.quotation.zijin.api.constant.enums.CalculateFlagEnum;
|
|
|
+import com.jzg.quotation.zijin.api.entity.constants.enums.ResultEnum;
|
|
|
+import com.jzg.quotation.zijin.api.entity.request.CalculatePremiumRequest;
|
|
|
+import com.jzg.quotation.zijin.api.entity.request.ModelQueryRequest;
|
|
|
+import com.jzg.quotation.zijin.api.entity.request.QueryActualValueRequest;
|
|
|
+import com.jzg.quotation.zijin.api.entity.response.CalculatePremiumResponse;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.context.annotation.Lazy;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+
|
|
|
+
|
|
|
+/**
|
|
|
+ * @description: 紫金财险重复投保处理
|
|
|
+ * @author: wenks
|
|
|
+ * @date: 2023/9/20 9:05
|
|
|
+ **/
|
|
|
+@Slf4j
|
|
|
+@Component(value = ResponseMessageAbstractHandler.CALCULATE_PREMIUM_COMPONENTS + ResultEnum.C_4001)
|
|
|
+public class ZijinDuplicateInsuranceComponents extends ResponseMessageAbstractHandler {
|
|
|
+
|
|
|
+ public static final String JQ_REGEX = "交强险.+?终保日期[::\\s]?([0-9\\-]+)";
|
|
|
+
|
|
|
+ public static final String DAN_JQ_REGEX = "终保日期[::\\s]?([0-9\\-]+)";
|
|
|
+
|
|
|
+ public static final String JQ = "交强险";
|
|
|
+
|
|
|
+ public static final String SY_REGEX = "商业险.+?终保日期[::\\s]?([0-9\\-]+)";
|
|
|
+
|
|
|
+ public static final String SY = "商业险";
|
|
|
+
|
|
|
+ public static final String TIMELY_JQ_REGEX = "(终保日期[::\\\\s]?[0-9\\\\-]+).*?(终保日期[::\\\\s]?([0-9\\\\-]+))";
|
|
|
+
|
|
|
+ private final ZiJinApiRequestComponent ziJinApiRequestComponent;
|
|
|
+
|
|
|
+
|
|
|
+ protected static final Map<Integer, String> dateFormatMap = Map.of();
|
|
|
+
|
|
|
+ public ZijinDuplicateInsuranceComponents(@Lazy ZiJinApiRequestComponent ziJinApiRequestComponent, Map<Integer, String> dateFormatMap) {
|
|
|
+ this.ziJinApiRequestComponent = ziJinApiRequestComponent;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public CalculatePremiumResponse messageHandler(CalculatePremiumRequest calculatePremiumRequest,
|
|
|
+ CalculatePremiumResponse calculatePremiumResponse,
|
|
|
+ HttpHeaders httpHeaders,
|
|
|
+ ModelQueryRequest modelQueryRequest,
|
|
|
+ QueryActualValueRequest queryActualValueRequest,
|
|
|
+ int repeatNumber,
|
|
|
+ int retryNumber) {
|
|
|
+
|
|
|
+
|
|
|
+ System.out.println("\n\t---------> {紫金财险重复投保处理}\n\t---------> {"+calculatePremiumResponse.getRtnMsg()+"}");
|
|
|
+ String rtnMsg = calculatePremiumResponse.getRtnMsg();
|
|
|
+ CalculatePremiumRequest.BaseInfoDTO baseInfo = calculatePremiumRequest.getBaseInfo();
|
|
|
+// message = rtnMsg;
|
|
|
+ if(repeatNumber < 0){
|
|
|
+ throw new SystemException(rtnMsg);
|
|
|
+ }
|
|
|
+
|
|
|
+ String jqEndDate = "";
|
|
|
+ String syEndDate = "";
|
|
|
+
|
|
|
+ // 关联单标识
|
|
|
+ String calculateFlag = calculatePremiumRequest.getBaseInfo().getCalculateFlag();
|
|
|
+
|
|
|
+ //及时起保的
|
|
|
+ if(CalculateFlagEnum.CF_2.getCode().equals(calculateFlag)){
|
|
|
+// jqEndDate = GuorenDuplicateInsuranceComponent.getTimelyEndDate(rtnMsg, TIMELY_JQ_REGEX);
|
|
|
+ jqEndDate = getEndDate(rtnMsg, DAN_JQ_REGEX); // 获取日期修改
|
|
|
+ if(jqEndDate.equals("")){
|
|
|
+ //正常的日期
|
|
|
+ jqEndDate = getEndDate(rtnMsg, DAN_JQ_REGEX);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 交强险
|
|
|
+ else if (rtnMsg.contains(JQ)) {
|
|
|
+ jqEndDate = getEndDate(rtnMsg, JQ_REGEX);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 商业险
|
|
|
+ if (rtnMsg.contains(SY)) {
|
|
|
+ syEndDate = getEndDate(rtnMsg, SY_REGEX);
|
|
|
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ try {
|
|
|
+ Date parse = simpleDateFormat.parse(syEndDate);
|
|
|
+ Date date = new Date();
|
|
|
+ if (date.after(parse)) {
|
|
|
+ syEndDate = "";
|
|
|
+ if (jqEndDate.isEmpty()) {
|
|
|
+ return calculatePremiumResponse;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception ignored) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (jqEndDate.isEmpty() && syEndDate.isEmpty()) {
|
|
|
+ // 修改 需要在外部获取异常信息
|
|
|
+ return calculatePremiumResponse;
|
|
|
+// throw new SystemException(rtnMsg);
|
|
|
+ }
|
|
|
+ repeatNumber -= 1;
|
|
|
+ baseInfo.setTrafficTime(jqEndDate);
|
|
|
+ baseInfo.setBusinessTime(syEndDate);
|
|
|
+ calculatePremiumResponse = ziJinApiRequestComponent.calculatePremium(calculatePremiumRequest, httpHeaders, modelQueryRequest,
|
|
|
+ queryActualValueRequest, repeatNumber, retryNumber);
|
|
|
+ return calculatePremiumResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取终保日期
|
|
|
+ *
|
|
|
+ * @param rtnMsg 返回信息
|
|
|
+ * @param regex 正则
|
|
|
+ * @return 终保日期
|
|
|
+ */
|
|
|
+ public static String getEndDate(String rtnMsg, String regex) {
|
|
|
+ String endDate = getTheExpiryDate(rtnMsg, regex);
|
|
|
+ if (!endDate.isEmpty()) {
|
|
|
+ return endDate;
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取终保日期
|
|
|
+ *
|
|
|
+ * @param message 重复投保返回信息
|
|
|
+ * @param regex 正则内容
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static String getTheExpiryDate(String message, String regex) {
|
|
|
+ Pattern pattern = Pattern.compile(regex);
|
|
|
+ String replace = message.replace("\r", ";").replace("\n", ";").replace(" ", "");
|
|
|
+ Matcher m = pattern.matcher(replace);
|
|
|
+
|
|
|
+ boolean b = m.find();
|
|
|
+ if (b) {
|
|
|
+ try {
|
|
|
+ String group = m.group(1);
|
|
|
+ String startDate = group.replace(":", "").replace(":", "").replace("-", "").replace(" ", "");
|
|
|
+ String string = dateFormatMap.get(startDate.length());
|
|
|
+ SimpleDateFormat dateFormat = new SimpleDateFormat(string);
|
|
|
+ SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ Date parse = dateFormat.parse(startDate);
|
|
|
+
|
|
|
+ return simpleDateFormat.format(parse);
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new SystemException(message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+}
|