Explorar o código

Merge remote-tracking branch 'origin/test' into test

Qchen %!s(int64=2) %!d(string=hai) anos
pai
achega
d13a11c00b

+ 1 - 1
src/main/java/com/ydtech/modules/admin/controller/SysAmountAuditingController.java

@@ -114,7 +114,7 @@ public class SysAmountAuditingController extends BaseController {
                         entity.getBankCardNum(), entity.getBankName(), entity.getBankNum(), entity.getMobile(),
                         entity.getBankCardNum(), entity.getBankName(), entity.getBankNum(), entity.getMobile(),
                         entity.getAmount(), entity.getSurplusAmount(), entity.getRealUserName(),
                         entity.getAmount(), entity.getSurplusAmount(), entity.getRealUserName(),
                         entity.getBankAccount(), entity.getBankAddress(), entity.getBankNumber(),
                         entity.getBankAccount(), entity.getBankAddress(), entity.getBankNumber(),
-                        entity.getVoucherId(), entity.getCreateTime());
+                        entity.getVoucherId(), entity.getCreateTime(),entity.getAuditingTime());
                 newList.add(vo);
                 newList.add(vo);
             }
             }
         }
         }

+ 10 - 1
src/main/java/com/ydtech/modules/admin/model/dto/SysAmountAuditingEntityDto.java

@@ -127,10 +127,18 @@ public class SysAmountAuditingEntityDto {
     private Date createTime;
     private Date createTime;
 
 
 
 
+    /**
+     * 创建时间
+     */
+    @ExcelProperty(value="支付时间",index = 19)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date auditingTime;
+
+
     public SysAmountAuditingEntityDto() {
     public SysAmountAuditingEntityDto() {
     }
     }
 
 
-    public SysAmountAuditingEntityDto(int numbers, String id, String userId, String userName, String leaderId, String leaderName, String accountName, String bankCardNum, String bankName, String bankNum, String mobile, BigDecimal amount, BigDecimal surplusAmount, String realUserName, String bankAccount, String bankAddress, String bankNumber, String voucherId, Date createTime) {
+    public SysAmountAuditingEntityDto(int numbers, String id, String userId, String userName, String leaderId, String leaderName, String accountName, String bankCardNum, String bankName, String bankNum, String mobile, BigDecimal amount, BigDecimal surplusAmount, String realUserName, String bankAccount, String bankAddress, String bankNumber, String voucherId, Date createTime, Date auditingTime) {
         this.numbers = numbers;
         this.numbers = numbers;
         this.id = id;
         this.id = id;
         this.userId = userId;
         this.userId = userId;
@@ -150,5 +158,6 @@ public class SysAmountAuditingEntityDto {
         this.bankNumber = bankNumber;
         this.bankNumber = bankNumber;
         this.voucherId = voucherId;
         this.voucherId = voucherId;
         this.createTime = createTime;
         this.createTime = createTime;
+        this.auditingTime = auditingTime;
     }
     }
 }
 }

+ 85 - 40
src/main/java/com/ydtech/modules/order/service/impl/YongchengOrderApiServiceImpl.java

@@ -76,9 +76,14 @@ import com.ydtech.modules.order.utils.InsuranceLog;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import com.ydtech.modules.protocol.entity.constants.PtlApiType;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.modules.protocol.utils.AssertionUtils;
 import com.ydtech.utils.DateTimeUtil;
 import com.ydtech.utils.DateTimeUtil;
+import com.ydtech.utils.ObjectUtil;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.StringUtils;
 import com.ydtech.utils.baidu.FileUtil;
 import com.ydtech.utils.baidu.FileUtil;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.ObjectUtils;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.beans.factory.annotation.Value;
@@ -112,6 +117,8 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
 
 
     public static final String JQ_REGEX = "交强险.+?[^保险止期|^终保日期][是::\\s]?([0-9\\-:]+)";
     public static final String JQ_REGEX = "交强险.+?[^保险止期|^终保日期][是::\\s]?([0-9\\-:]+)";
 
 
+    public static final String REGEX_ALONE = "[^保险止期|^终保日期][是::\\s]?([0-9\\-:]+)";
+
     public static final String SY_REGEX = "商业险.+?[^保险止期|^终保日期][是::\\s]?([0-9\\-:]+)";
     public static final String SY_REGEX = "商业险.+?[^保险止期|^终保日期][是::\\s]?([0-9\\-:]+)";
 
 
     public static final String END_TIME = "23:59:59";
     public static final String END_TIME = "23:59:59";
@@ -449,13 +456,6 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
     }
     }
 
 
 
 
-    public static void main(String[] args) {
-        String a = "交易失败:当前日志所在服务器地址:[1]!交强险重复投保提示:车险平台返回信息 号牌号码“晋AB1S60”的保单发生重复投保,与其重复投保的其它公司的保单信息如下:投保确认码 02TKIC140023061886966474033736;保单号 06671070807142300000001181;起保日期 2023-07-16 19:00;终保日期 2024-07-16 19:00;号牌号码 晋AB1S60;号牌种类 02;车架号 LE4WG4AB9KL578588;发动机号 11440669;地区 山西。*产品名称:机动车交通事故强制险(2008款)";
-        String coverageEndDate = GuorenDuplicateInsuranceComponent.getEndDate(a, JQ_REGEX);
-        System.out.println(coverageEndDate);
-
-    }
-
     /**
     /**
      * 报价  交强险 重复 投保业务处理
      * 报价  交强险 重复 投保业务处理
      */
      */
@@ -466,32 +466,86 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
             requestInfoList.add(errorMsg);
             requestInfoList.add(errorMsg);
             log.info("永诚API方式 - xml请求 ------------报价 ->   交强重复投保----------------");
             log.info("永诚API方式 - xml请求 ------------报价 ->   交强重复投保----------------");
 
 
-            String coverageEndDate = GuorenDuplicateInsuranceComponent.getEndDate(errorMsg, JQ_REGEX);
-            if (coverageEndDate.isEmpty()) {
+            TimeEntity timeEntity = getRepeatStartEndTime(errorMsg, JQ_REGEX);
+
+            if(ObjectUtils.isEmpty(timeEntity)){
                 return "";
                 return "";
             }
             }
 
 
-            //判断是否是及时起保
-            LocalDateTime start;
-            if (coverageEndDate.contains(END_TIME)) {
-                start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN).plusSeconds(1);
-            } else {
-                start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN);
-            }
-            LocalDateTime end = start.plusYears(1L).minusDays(1L);
-            String newStartDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
-            String newEndDate = DateTimeUtil.getEndTimeOfDayStr(end, DateTimeUtil.DATETIME_PATTERN);
-            log.error("新起:{}", newStartDate);
-            log.error("新止:{}", newEndDate);
-            CarInsDateDto cidd = Base.buildInsDate(newStartDate, newEndDate);
+            log.error("新起:{}", timeEntity.getNewStartDate());
+            log.error("新止:{}", timeEntity.getNewEndDate());
+            CarInsDateDto cidd = Base.buildInsDate(timeEntity.getNewStartDate(), timeEntity.getNewEndDate());
             m.getRequestLabel().getCondition().getBase().setTInsrncBgnTmJQ(cidd.getStartDate());
             m.getRequestLabel().getCondition().getBase().setTInsrncBgnTmJQ(cidd.getStartDate());
             m.getRequestLabel().getCondition().getBase().setTInsrncEndTmJQ(cidd.getEndDate());
             m.getRequestLabel().getCondition().getBase().setTInsrncEndTmJQ(cidd.getEndDate());
             m.getRequestLabel().getCondition().getBase().setCImmeffMrk(cidd.isForthwith() ? "1" : "0");
             m.getRequestLabel().getCondition().getBase().setCImmeffMrk(cidd.isForthwith() ? "1" : "0");
-            return coverageEndDate;
+            return timeEntity.getCoverageEndDate();
         }
         }
         return "";
         return "";
     }
     }
 
 
+    /**
+     * 处理时间
+     * @param errorMsg 报错信息
+     * @param regex 正则表达是
+     * @return
+     */
+    private String processingTime(String errorMsg, String regex){
+        String coverageEndDate = GuorenDuplicateInsuranceComponent.getEndDate(errorMsg, regex);
+
+        if (coverageEndDate.isEmpty()) {
+            coverageEndDate = GuorenDuplicateInsuranceComponent.getEndDate(errorMsg, REGEX_ALONE);
+        }
+        return coverageEndDate;
+    }
+
+
+    /**
+     * 通过报错信息获取开始时间和结束时间
+     * @param errorMsg
+     * @param regex
+     * @return
+     */
+    private TimeEntity getRepeatStartEndTime(String errorMsg, String regex){
+        String coverageEndDate = processingTime(errorMsg, regex);
+        TimeEntity timeEntity = new TimeEntity();
+
+        if (coverageEndDate.isEmpty()) {
+            return timeEntity;
+        }
+
+        timeEntity.setCoverageEndDate(coverageEndDate);
+        LocalDateTime start;
+        if (coverageEndDate.contains(END_TIME)) {
+            start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN).plusSeconds(1);
+        } else {
+            start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN);
+        }
+        LocalDateTime end = start.plusYears(1L).minusDays(1L);
+        timeEntity.setNewStartDate(DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN));
+        timeEntity.setNewEndDate(DateTimeUtil.getEndTimeOfDayStr(end, DateTimeUtil.DATETIME_PATTERN));
+        return timeEntity;
+    }
+
+    @NoArgsConstructor
+    @AllArgsConstructor
+    @Data
+    public static class TimeEntity{
+
+        private String coverageEndDate;
+
+        /**
+         * 开始时间
+         */
+        private String newStartDate ;
+
+        /**
+         * 结束时间
+         */
+        private String newEndDate;
+
+    }
+
+
 
 
     /**
     /**
      * 报价  商业 重复 投保业务处理
      * 报价  商业 重复 投保业务处理
@@ -502,29 +556,20 @@ public class YongchengOrderApiServiceImpl implements YongchengOrderApiService {
         if (appSYFlag) {
         if (appSYFlag) {
             requestInfoList.add(errorMsg);
             requestInfoList.add(errorMsg);
             log.info("永诚API方式 - xml请求 ------------报价 ->   商业险重复投保----------------");
             log.info("永诚API方式 - xml请求 ------------报价 ->   商业险重复投保----------------");
-            String coverageEndDate = GuorenDuplicateInsuranceComponent.getEndDate(errorMsg, SY_REGEX);
-            if (coverageEndDate.isEmpty()) {
-                return "";
-            }
+            TimeEntity timeEntity = getRepeatStartEndTime(errorMsg, SY_REGEX);
 
 
-            LocalDateTime start;
-            if (coverageEndDate.contains(END_TIME)) {
-                start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN).plusSeconds(1);
-            } else {
-                start = DateTimeUtil.parseLocalDateTime(coverageEndDate, DateTimeUtil.DATETIME_PATTERN);
+            if(ObjectUtils.isEmpty(timeEntity)){
+                return "";
             }
             }
-            LocalDateTime end = start.plusYears(1L).minusDays(1L);
-            String newStartDate = DateTimeUtil.getStartTimeOfDayStr(start, DateTimeUtil.DATETIME_PATTERN);
-            String newEndDate = DateTimeUtil.getEndTimeOfDayStr(end, DateTimeUtil.DATETIME_PATTERN);
 
 
-            log.error("商业新起:{}", newStartDate);
-            log.error("商业新止:{}", newEndDate);
+            log.error("商业新起:{}", timeEntity.getNewStartDate());
+            log.error("商业新止:{}", timeEntity.getNewEndDate());
 
 
-            m.getRequestLabel().getCondition().getBase().setTInsrncBgnTmSY(newStartDate);
-            m.getRequestLabel().getCondition().getBase().setTInsrncEndTmSY(newEndDate);
+            m.getRequestLabel().getCondition().getBase().setTInsrncBgnTmSY(timeEntity.getNewStartDate());
+            m.getRequestLabel().getCondition().getBase().setTInsrncEndTmSY(timeEntity.getNewEndDate());
             //转保信息清空  重新报价
             //转保信息清空  重新报价
             m.getRequestLabel().getCondition().getVhl().setCBusType("0");
             m.getRequestLabel().getCondition().getVhl().setCBusType("0");
-            return coverageEndDate;
+            return timeEntity.getCoverageEndDate();
         }
         }
         return "";
         return "";
     }
     }

+ 94 - 0
src/main/java/com/ydtech/utils/AutoCellWriteWidthHandle.java

@@ -0,0 +1,94 @@
+package com.ydtech.utils;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.excel.write.handler.RowWriteHandler;
+import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
+import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.DataFormatter;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+/**
+ * EasyExcel自适应列宽专用
+ */
+public class AutoCellWriteWidthHandle implements RowWriteHandler {
+    private final Map<Integer, Map<Integer, Integer>> MAX_COLUMN_WIDTH_CACHE = new HashMap<>(8);
+    private final int MIN_WIDTH = 800;
+    private final DataFormatter dataFormatter = new DataFormatter();
+    private Integer startHeadRow;
+    private Integer endHeadRow;
+
+    @Override
+    public void afterRowDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Integer relativeRowIndex, Boolean isHead) {
+        if (isHead) {
+            return;
+        }
+        isHead = ObjectUtil.isEmpty(startHeadRow) || ObjectUtil.isEmpty(endHeadRow) || (row.getRowNum() >= startHeadRow && row.getRowNum() <= endHeadRow);
+        Integer sheetNo = writeSheetHolder.getSheetNo();
+        if (CollUtil.isEmpty(MAX_COLUMN_WIDTH_CACHE.get(sheetNo)) && isHead) {
+            //踩坑标注; 不能通过writeSheetHolder获取sheet对象, 这会拿不到已填充的数据 因为EasyExcel是最后才把sheet同步到writeSheetHolder
+            Sheet sheet = row.getSheet();
+            HashMap<Integer, Integer> headWidthMap = new HashMap<>();
+            MAX_COLUMN_WIDTH_CACHE.put(sheetNo, headWidthMap);
+            List<CellRangeAddress> mergedRegions = sheet.getMergedRegions();
+            //表头可能存在多行
+            for (int headRowIndex = startHeadRow = sheet.getFirstRowNum(); headRowIndex < (endHeadRow = row.getRowNum()); headRowIndex++) {
+                Row headRow = sheet.getRow(headRowIndex);
+                if (ObjectUtil.isEmpty(headRow)) {
+                    continue;
+                }
+                for (int cellIndex = headRow.getFirstCellNum();
+                     cellIndex < headRow.getLastCellNum(); cellIndex++) {
+                    Cell headCell = headRow.getCell(cellIndex);
+                    if (ObjectUtil.isEmpty(headCell) || this.isMeagerCell(mergedRegions, headCell)) {
+                        continue;
+                    }
+                    //获取字符长度
+                    int newHeadCellWidth = this.getDataLength(headCell);
+                    Integer oldHeadMaxWidth = headWidthMap.get(headCell.getColumnIndex());
+                    int currentMaxWidth = ObjectUtil.isEmpty(oldHeadMaxWidth) ? newHeadCellWidth : Math.max(oldHeadMaxWidth, newHeadCellWidth);
+                    headWidthMap.put(cellIndex, currentMaxWidth);
+                }
+            }
+        }
+        for (int cellIndex = row.getFirstCellNum(); cellIndex < row.getLastCellNum(); cellIndex++) {
+            //获取字符长度
+            Cell cell = row.getCell(cellIndex);
+            if (ObjectUtil.isEmpty(cell)) {
+                continue;
+            }
+            int newHeadCellWidth = this.getDataLength(cell);
+            //比较列宽度,取最大值
+            Map<Integer, Integer> cellMaxWidthMap = Optional.ofNullable(MAX_COLUMN_WIDTH_CACHE.get(writeSheetHolder.getSheetNo())).orElse(new HashMap<Integer, Integer>());
+            Integer mapMaxWidth = Optional.ofNullable(cellMaxWidthMap.get(cell.getColumnIndex())).orElse(MIN_WIDTH);
+            int currentMaxWidth = Math.max(mapMaxWidth, newHeadCellWidth);
+            //设置列宽
+            writeSheetHolder.getSheet().setColumnWidth(cell.getColumnIndex(), currentMaxWidth);
+            cellMaxWidthMap.put(cell.getColumnIndex(), currentMaxWidth);
+            MAX_COLUMN_WIDTH_CACHE.put(writeSheetHolder.getSheetNo(), cellMaxWidthMap);
+        }
+    }
+
+    private int getDataLength(Cell cell) {
+        String cellValue = dataFormatter.formatCellValue(cell);
+        return cellValue.getBytes(StandardCharsets.UTF_8).length * 256 + MIN_WIDTH;
+    }
+
+    /**
+     * 判断是否合并单元格
+     */
+    private boolean isMeagerCell(List<CellRangeAddress> mergedRegions, Cell cell) {
+        Optional<CellRangeAddress> mergedRegionOptional = mergedRegions.stream().filter(mergedRegion -> mergedRegion.isInRange(cell)).findFirst();
+        //纵向合并忽略, 横向合并才处理
+        return mergedRegionOptional.isPresent() && mergedRegionOptional.get().getLastColumn() - mergedRegionOptional.get().getFirstColumn() > 0;
+    }
+}

+ 8 - 8
src/main/java/com/ydtech/utils/CustomCellWriteHandler.java

@@ -85,17 +85,17 @@ public class CustomCellWriteHandler extends AbstractColumnWidthStyleStrategy {
           char[] chars = str.toCharArray();
           char[] chars = str.toCharArray();
           for(char c : chars){
           for(char c : chars){
               byte[] bytes = this.getUtf8Bytes(c);
               byte[] bytes = this.getUtf8Bytes(c);
-              if(bytes.length == 1){
-                  length += 1.05;
+              if (bytes.length == 1) {
+                  length += 1.6;
               }
               }
-              if(bytes.length == 2){
-                  length += 1.5;
+              if (bytes.length == 2) {
+                  length += 2.2;
               }
               }
-              if(bytes.length == 3){
-                  length += 1.85;
+              if (bytes.length == 3) {
+                  length += 3.85;
               }
               }
-              if(bytes.length == 4){
-                  length += 2.2;
+              if (bytes.length == 4) {
+                  length += 4.2;
               }
               }
           }
           }
           return length;
           return length;

+ 2 - 2
src/main/java/com/ydtech/utils/ExcelUtils.java

@@ -41,7 +41,7 @@ public class ExcelUtils<T> {
      */
      */
     public boolean writeExcel(String saveFileName, String sheetName,List<T> data) {
     public boolean writeExcel(String saveFileName, String sheetName,List<T> data) {
         try {
         try {
-            EasyExcel.write(saveFileName, clazz).sheet(sheetName).registerWriteHandler(new CustomCellWriteHandler(0)).doWrite(data);
+            EasyExcel.write(saveFileName, clazz).sheet(sheetName).registerWriteHandler(new AutoCellWriteWidthHandle()).doWrite(data);
             return true;
             return true;
         }catch(Exception e){
         }catch(Exception e){
             return false;
             return false;
@@ -57,7 +57,7 @@ public class ExcelUtils<T> {
      */
      */
     public void writeExcelNew(String saveFileName, String sheetName,List<T> data) {
     public void writeExcelNew(String saveFileName, String sheetName,List<T> data) {
         try {
         try {
-            EasyExcel.write(saveFileName, clazz).sheet(sheetName).registerWriteHandler(new CustomCellWriteHandler(0)).doWrite(data);
+            EasyExcel.write(saveFileName, clazz).sheet(sheetName).registerWriteHandler(new AutoCellWriteWidthHandle()).doWrite(data);
         }catch(Exception e){
         }catch(Exception e){
             throw new SystemException(e.getMessage());
             throw new SystemException(e.getMessage());
         }
         }

+ 15 - 2
src/main/resources/mapper/modules/ins/InsFeeOrderNewMapper.xml

@@ -1354,7 +1354,12 @@
             iac.id = ifa.ins_order_no
             iac.id = ifa.ins_order_no
           AND iac.orderstatus = 3
           AND iac.orderstatus = 3
           and ifa.auditstatus = 1
           and ifa.auditstatus = 1
+        <if test="param.companyId !=null and  param.companyId != ''">
+            AND iac.company_id = #{param.companyId}
+        </if>
+        <if test="param.startTime !=null and  param.startTime != '' and param.endTime !=null and  param.endTime != ''">
           and iac.signing_time between #{param.startTime} and #{param.endTime}
           and iac.signing_time between #{param.startTime} and #{param.endTime}
+        </if>
         group by ins_company
         group by ins_company
     </select>
     </select>
 
 
@@ -1385,9 +1390,17 @@
             iac.id = ifa.ins_order_no
             iac.id = ifa.ins_order_no
           AND iac.orderstatus = 3
           AND iac.orderstatus = 3
           AND ifa.auditstatus = 1
           AND ifa.auditstatus = 1
-          AND iac.signing_time BETWEEN #{param.startTime}
+        <if test="param.companyId !=null and  param.companyId != ''">
+            AND iac.company_id = #{param.companyId}
+        </if>
+
+        <if test="param.startTime !=null and  param.startTime != '' and param.endTime !=null and  param.endTime != ''">
+            AND iac.signing_time BETWEEN #{param.startTime}
             AND #{param.endTime}
             AND #{param.endTime}
+        </if>
+
         GROUP BY
         GROUP BY
             ins_company
             ins_company
+
     </select>
     </select>
-</mapper>
+</mapper>