Преглед на файлове

大订单导出数据接口提交

hxl13994548489 преди 1 година
родител
ревизия
346d046237

+ 2 - 0
src/main/java/com/ydtech/components/TokenInterceptor.java

@@ -92,6 +92,8 @@ public class TokenInterceptor {
         notMatchList.add("/order/pingAnApi/recoverApplyVerifyCode");
         notMatchList.add("/order/pingAnApi/payReturn");
 
+        notMatchList.add("/upload/bigOrderCountUpload");
+
         notMatchList.add("/sysSys/sysList");//登录2  去除验证
         notMatchList.add("/pcWebsocket/*");//pcwebsocket
         notMatchList.add("/websocket/*");//APPwebsocket

+ 7 - 4
src/main/java/com/ydtech/config/SwaggerConfig.java

@@ -1,6 +1,5 @@
 package com.ydtech.config;
 
-import com.ydtech.utils.StringUtils;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.core.annotation.Order;
@@ -9,9 +8,9 @@ import springfox.documentation.builders.ParameterBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
 import springfox.documentation.schema.ModelRef;
-import springfox.documentation.service.*;
+import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Parameter;
 import springfox.documentation.spi.DocumentationType;
-import springfox.documentation.spi.service.contexts.SecurityContext;
 import springfox.documentation.spring.web.plugins.Docket;
 import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
 
@@ -120,7 +119,11 @@ public class SwaggerConfig {
         return buildDocket("scheme", "方案");
     }
 
-
+    @Bean(value = "consoleApi")
+    @Order(value = 14)
+    public Docket consoleDemoApi() {
+        return buildDocket("console", "控制台");
+    }
     private ApiInfo apiInfo() {
         return new ApiInfoBuilder()
                 .title("晋掌柜 API 文档")

+ 84 - 0
src/main/java/com/ydtech/modules/console/controller/UploadOrderController.java

@@ -0,0 +1,84 @@
+package com.ydtech.modules.console.controller;
+
+
+import com.alibaba.excel.EasyExcel;
+import com.ydtech.constants.enums.dict.InsOrderStatusAllEnum;
+import com.ydtech.core.page.HttpResult;
+import com.ydtech.modules.console.dto.BigOrderUploadDto;
+import com.ydtech.modules.console.service.UpLoadOrderService;
+import com.ydtech.modules.console.vo.BigOrderUploadVo;
+import com.ydtech.modules.inv.utils.excel.CustomMultiFieldMergeStrategy;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/1/9 11:27
+ *  @Description: 大订单的导出功能
+ */
+@Api(tags = "控制台导出功能")
+@RestController
+@RequestMapping("/upload")
+public class UploadOrderController {
+
+      @Autowired
+      private UpLoadOrderService upLoadOrderService;
+
+      @Value("${upload.file.path}")
+      private String uploadPath;
+
+      @Value("${upload.file.url}")
+      private String uploadUrl;
+
+      @PostMapping("/bigOrderCountUpload")
+      @ApiOperation(value = "大订单导出导出功能")
+      public HttpResult bigOrderCountUpload(@RequestBody BigOrderUploadVo bigOrderUploadVo) {
+          List<BigOrderUploadDto> list = upLoadOrderService.uploadExcelData(bigOrderUploadVo);
+          if(list!=null && !list.isEmpty()){
+              for (BigOrderUploadDto bigOrderUploadDto : list) {
+                  String orderStatus="";
+                  if(InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getOrderStatus())!=null){
+                      orderStatus=InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getOrderStatus()).getDesc();
+                  }
+                  String subOrderStatus="";
+                  if(InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getSubOrderStatus())!=null){
+                      subOrderStatus=InsOrderStatusAllEnum.matchKey(bigOrderUploadDto.getSubOrderStatus()).getDesc();
+                  }
+                  bigOrderUploadDto.setOrderStatus(orderStatus);
+                  bigOrderUploadDto.setSubOrderStatus(subOrderStatus);
+              }
+          }
+          String uploadPath = this.uploadPath + "/excel/";
+          Path path = Paths.get(uploadPath);
+          if (!Files.exists(path)) {
+              try {
+                  Files.createDirectories(path);
+              } catch (IOException e) {
+                  e.printStackTrace();
+              }
+          }
+          String file = "大订单导出数据" + System.currentTimeMillis() + ".xlsx";
+          String filePath = uploadPath + file;
+          List<Integer> mergeAllColIndexList = Stream.of(0, 1, 2, 3, 4, 5, 6).collect(Collectors.toList());
+          EasyExcel.write(filePath, BigOrderUploadDto.class)
+                  .sheet("1")
+                  .registerWriteHandler(new CustomMultiFieldMergeStrategy(mergeAllColIndexList))
+                  .doWrite(list);
+          return HttpResult.ok("", uploadUrl + "excel/" + file);
+      }
+}

+ 20 - 0
src/main/java/com/ydtech/modules/console/dao/UpLoadOrderMapper.java

@@ -0,0 +1,20 @@
+package com.ydtech.modules.console.dao;
+
+
+import com.ydtech.modules.console.dto.BigOrderUploadDto;
+import com.ydtech.modules.console.vo.BigOrderUploadVo;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface UpLoadOrderMapper {
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/1/9 9:35
+     *  @Description:  查询大订单关联小订单数据
+     */
+    List<BigOrderUploadDto> uploadExcelData(@Param("vo") BigOrderUploadVo bigOrderUploadVo);
+}

+ 64 - 0
src/main/java/com/ydtech/modules/console/dto/BigOrderUploadDto.java

@@ -0,0 +1,64 @@
+package com.ydtech.modules.console.dto;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.alibaba.excel.annotation.write.style.HeadStyle;
+import com.alibaba.excel.enums.poi.VerticalAlignmentEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/1/9 8:50
+ *  @Description: 大订单的导出
+ */
+@Data
+@ApiModel("查询Vo")
+@ColumnWidth(25)
+@HeadStyle(verticalAlignment = VerticalAlignmentEnum.CENTER)
+public class BigOrderUploadDto implements Serializable {
+
+    @ApiModelProperty(value = "大订单号")
+    @ExcelProperty(value = "大订单号",index = 0)
+    private  String  orderNo;
+
+    @ApiModelProperty(value = "大订单创建时间")
+    @ExcelProperty(value = "大订单创建时间",index = 1)
+    private  String   createTime;
+
+    @ApiModelProperty(value = "大订单状态")
+    @ExcelProperty(value = "大订单状态",index = 2)
+    private  String  orderStatus;
+
+    @ApiModelProperty(value = "车牌号")
+    @ExcelProperty(value = "车牌号",index = 3)
+    private  String  licenseNo;
+
+    @ApiModelProperty(value = "车型")
+    @ExcelProperty(value = "车型",index = 4)
+    private  String  modelName;
+
+    @ApiModelProperty(value = "发动机号")
+    @ExcelProperty(value = "发动机号",index = 5)
+    private  String  engineNo;
+
+    @ApiModelProperty(value = "车架号")
+    @ExcelProperty(value = "车架号",index = 6)
+    private  String  frameNo;
+
+    @ApiModelProperty(value = "小订单号")
+    @ExcelProperty(value = "小订单号",index = 7)
+    private  String  subOrderNo;
+
+    @ApiModelProperty(value = "小订单号状态")
+    @ExcelProperty(value = "小订单号状态",index = 8)
+    private  String  subOrderStatus;
+
+    @ApiModelProperty(value = "承保公司")
+    @ExcelProperty(value = "承保公司",index = 9)
+    private  String  companyName;
+}

+ 25 - 0
src/main/java/com/ydtech/modules/console/service/UpLoadOrderService.java

@@ -0,0 +1,25 @@
+package com.ydtech.modules.console.service;
+
+
+import com.ydtech.modules.console.dto.BigOrderUploadDto;
+import com.ydtech.modules.console.vo.BigOrderUploadVo;
+
+import java.util.List;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/1/6 10:35
+ *  @Description:
+ */
+public interface UpLoadOrderService {
+
+    /**
+     *  @version
+     *  @author: hxl
+     *  @Date: 2025/1/9 9:28
+     *  @Description:  大订单的导出功能
+     */
+    List<BigOrderUploadDto> uploadExcelData(BigOrderUploadVo bigOrderUploadVo);
+
+}

+ 30 - 0
src/main/java/com/ydtech/modules/console/service/impl/UpLoadOrderServiceImpl.java

@@ -0,0 +1,30 @@
+package com.ydtech.modules.console.service.impl;
+
+import com.ydtech.modules.console.dao.UpLoadOrderMapper;
+import com.ydtech.modules.console.dto.BigOrderUploadDto;
+import com.ydtech.modules.console.service.UpLoadOrderService;
+import com.ydtech.modules.console.vo.BigOrderUploadVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class UpLoadOrderServiceImpl implements UpLoadOrderService {
+
+
+    @Autowired
+    private UpLoadOrderMapper upLoadOrderMapper;
+
+
+     /**
+      *  @version
+      *  @author: hxl
+      *  @Date: 2025/1/9 9:29
+      *  @Description: 大订单的导出功能
+      */
+    @Override
+    public List<BigOrderUploadDto> uploadExcelData(BigOrderUploadVo bigOrderUploadVo) {
+        return upLoadOrderMapper.uploadExcelData(bigOrderUploadVo);
+    }
+}

+ 26 - 0
src/main/java/com/ydtech/modules/console/vo/BigOrderUploadVo.java

@@ -0,0 +1,26 @@
+package com.ydtech.modules.console.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ *  @version
+ *  @author: hxl
+ *  @Date: 2025/1/9 8:50
+ *  @Description: 大订单的导出
+ */
+@Data
+@ApiModel("查询Vo")
+public class BigOrderUploadVo implements Serializable {
+
+    @ApiModelProperty(value = "大订单创建开始时间")
+    private  String  beginDate;
+
+    @ApiModelProperty(value = "大订单创建结束时间")
+    private  String   endDate;
+
+
+}

+ 112 - 0
src/main/java/com/ydtech/modules/inv/utils/excel/CustomMultiFieldMergeStrategy.java

@@ -0,0 +1,112 @@
+package com.ydtech.modules.inv.utils.excel;
+
+import com.alibaba.excel.metadata.Head;
+import com.alibaba.excel.write.merge.AbstractMergeStrategy;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.util.CellRangeAddress;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CustomMultiFieldMergeStrategy extends AbstractMergeStrategy {
+
+    // 存储需要合并的列索引列表
+    private List<Integer> mergeColIndexList;
+    // 用于存储合并区域的列表
+    private List<CellRangeAddress> mergeRegions = new ArrayList<>();
+
+    public CustomMultiFieldMergeStrategy(List<Integer> mergeColIndexList) {
+        this.mergeColIndexList = mergeColIndexList;
+    }
+
+    @Override
+    protected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {
+        // 跳过第一行(标题行)和第一行数据
+        if (relativeRowIndex == 0 ) {
+            return;
+        }
+
+        int rowIndex = cell.getRowIndex();
+        if (rowIndex >= relativeRowIndex && mergeColIndexList.contains(cell.getColumnIndex())) {
+            // 获取当前行所有单元格的值(考虑多种数据类型)
+            String currentRowValues = getRowValues(sheet, rowIndex);
+            // 获取上一行所有单元格的值(考虑多种数据类型)
+            String previousRowValues = getRowValues(sheet, rowIndex - 1);
+
+            // 获取当前列当前行的值(字符串类型)
+            String currentCellValue = getCellValueAsString(cell);
+            // 获取当前列上一行的值(字符串类型)
+            Cell preCell = sheet.getRow(rowIndex - 1).getCell(cell.getColumnIndex());
+            String previousCellValue = getCellValueAsString(preCell);
+
+            // 判断当前列的值以及整行的值是否都相等
+            if (currentCellValue.equals(previousCellValue) && currentRowValues.equals(previousRowValues)) {
+                int firstRow = rowIndex - 1;
+                int lastRow = rowIndex;
+                int firstCol = cell.getColumnIndex();
+                int lastCol = cell.getColumnIndex();
+                CellRangeAddress cellRangeAddress = new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
+
+                // 检查新的合并区域是否与已有的合并区域重叠,若不重叠则添加合并区域并执行合并操作
+                if (!isOverlappedWithExistingRegions(cellRangeAddress, mergeRegions)) {
+                    mergeRegions.add(cellRangeAddress);
+                    sheet.addMergedRegion(cellRangeAddress);
+                }
+            }
+        }
+    }
+
+    private boolean isOverlappedWithExistingRegions(CellRangeAddress newRegion, List<CellRangeAddress> existingRegions) {
+        for (CellRangeAddress existingRegion : existingRegions) {
+            // 判断行是否有重叠
+            boolean rowOverlap = (newRegion.getFirstRow() <= existingRegion.getLastRow() && newRegion.getLastRow() >= existingRegion.getFirstRow());
+            // 判断列是否有重叠
+            boolean colOverlap = (newRegion.getFirstColumn() <= existingRegion.getLastColumn() && newRegion.getLastColumn() >= existingRegion.getFirstColumn());
+            if (rowOverlap && colOverlap) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private String getRowValues(Sheet sheet, int rowIndex) {
+       String  rowValues = "";
+        Row row = sheet.getRow(rowIndex);
+        if (row!= null) {
+            for (Cell cell : row) {
+                if(cell.getColumnIndex() == 0){
+                    rowValues += getCellValueAsString(cell);
+                }
+            }
+        }
+        return rowValues;
+    }
+
+    private String getCellValueAsString(Cell cell) {
+        if (cell == null) {
+            return "";
+        }
+        switch (cell.getCellType()) {
+            case STRING:
+                return cell.getStringCellValue();
+            case NUMERIC:
+                return String.valueOf(cell.getNumericCellValue());
+            case BOOLEAN:
+                return String.valueOf(cell.getBooleanCellValue());
+            case FORMULA:
+                try {
+                    return cell.getStringCellValue();
+                } catch (Exception e) {
+                    return String.valueOf(cell.getNumericCellValue());
+                }
+            default:
+                return "";
+        }
+    }
+
+    public List<CellRangeAddress> getMergeRegions() {
+        return mergeRegions;
+    }
+}

+ 32 - 0
src/main/resources/mapper/modules/console/UpLoadOrderMapper.xml

@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydtech.modules.console.dao.UpLoadOrderMapper">
+
+
+    <select id="uploadExcelData" resultType="com.ydtech.modules.console.dto.BigOrderUploadDto">
+        SELECT
+        io.orderno AS orderNo,
+        DATE_FORMAT(io.createtime,'%Y-%m-%d %H:%i:%s') as createTime,
+        io.orderstatus AS orderStatus,
+        ifnull( io.licenseno, '' ) AS licenseNo,
+        io.frameno AS frameNo,
+        REPLACE ( JSON_EXTRACT( io.carinfo, '$.engineNo' ), '"', '' ) AS "engineNo",
+        REPLACE ( JSON_EXTRACT( io.carinfo, '$.modelcname' ), '"', '' ) AS "modelName",
+        ifnull( iac.id, '' ) AS subOrderNo,
+        ifnull( iac.orderstatus, '' ) AS subOrderStatus,
+        ifnull( eic.NAME, '' ) AS companyName
+        FROM
+        ins_orders io
+        LEFT JOIN ins_area_company iac ON io.orderno = iac.orderno
+        LEFT JOIN esm_ins_company eic ON iac.company_id = eic.id
+        <where>
+            ( iac.del_flag = '1' OR io.del_flag IS NULL OR io.del_flag = 1 )
+            <if test="vo.beginDate !=null  and  vo.beginDate !='' and vo.endDate !=null  and  vo.endDate !='' ">
+                AND io.createtime <![CDATA[ >= ]]> #{ vo.beginDate } AND
+                io.createtime  <![CDATA[ <= ]]> #{ vo.endDate }
+            </if>
+        </where>
+    </select>
+</mapper>