futian.liu
2023-12-21 1a4f00e0b4d24ae72c7d95e31e685d9a2be0aa62
机构导入
1个文件已添加
1个文件已修改
121 ■■■■■ 已修改文件
consum-base/src/main/java/com/consum/base/controller/FinSysTenantController.java 101 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/pojo/excel/ImportTenantTemplate.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
consum-base/src/main/java/com/consum/base/controller/FinSysTenantController.java
@@ -32,11 +32,13 @@
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.exception.ExcelDataConvertException;
import com.alibaba.excel.read.metadata.holder.ReadSheetHolder;
import com.consum.base.BaseController;
import com.consum.base.core.utils.CommonUtil;
import com.consum.base.core.utils.FinSysTenantUtils;
import com.consum.base.pojo.FinSysTenantParam;
import com.consum.base.pojo.FinSysTenantSearchParam;
import com.consum.base.pojo.excel.ImportTenantTemplate;
import com.consum.base.service.FinSysTenantService;
import com.consum.base.service.FinSysTenantUserService;
import com.consum.model.po.FinSysTenant;
@@ -422,7 +424,7 @@
    @PostMapping("import")
    public ResponseValue upload(@RequestParam Long pid, MultipartFile file) throws IOException {
        String originalFilename = file.getOriginalFilename();
        if (!"xls".equals(originalFilename.substring(originalFilename.lastIndexOf(".") + 1))) {
        if (!originalFilename.endsWith("xls")) {
            return ResponseValue.error("文件格式有误!");
        }
        FinSysTenantUser sysInfo = this.getSysInfo();
@@ -435,55 +437,62 @@
            return ResponseValue.error("不能创建县(区)级以下机构");
        }
        EasyExcel.read(file.getInputStream(), FinSysTenantParam.class, new AnalysisEventListener<FinSysTenantParam>() {
            LinkedList<FinSysTenantParam> finSysTenantParams = new LinkedList<>();
        EasyExcel
            .read(file.getInputStream(), ImportTenantTemplate.class, new AnalysisEventListener<ImportTenantTemplate>() {
                LinkedList<FinSysTenantParam> finSysTenantParams = new LinkedList<>();
            @Override
            public void invoke(FinSysTenantParam finSysTenantParam, AnalysisContext analysisContext) {
                if (StringUtils.isEmpty(finSysTenantParam.getCode()) || finSysTenantParam.getCode().length() > 20) {
                    IllegalStateException exception = new IllegalStateException(
                        "第" + analysisContext.readSheetHolder().getRowIndex() + "行,机构编号不能为空或长度大于20");
                    throw exception;
                }
                if (null != finSysTenantService.queryOneByCode(finSysTenantParam.getCode())) {
                    throw new IllegalStateException(
                        "第" + analysisContext.readSheetHolder().getRowIndex() + "行,机构编号已存在");
                }
                if (StringUtils.isEmpty(finSysTenantParam.getName()) || finSysTenantParam.getName().length() > 100) {
                    IllegalStateException exception = new IllegalStateException(
                        "第" + analysisContext.readSheetHolder().getRowIndex() + "行,机构名称不能为空或长度大于100");
                    throw exception;
                }
                finSysTenantParam.setParentId(pid);
                finSysTenantParam.setStatus(1);
                finSysTenantParam.setSummary("系统导入");
                finSysTenantParams.add(finSysTenantParam);
            }
            @Override
            public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                finSysTenantService.insertFinSysTenantBatch(finSysTenantParams, sysInfo, lv);
            }
            @Override
            public void onException(Exception exception, AnalysisContext context) {
                // 如果是某一个单元格的转换异常 能获取到具体行号
                if (exception instanceof ExcelDataConvertException) {
                    ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception;
                    logger.error("第{}行,第{}列解析异常,数据为:{}", excelDataConvertException.getRowIndex(),
                        excelDataConvertException.getColumnIndex() + 1,
                        excelDataConvertException.getCellData().getStringValue());
                    throw new IllegalStateException("第" + (excelDataConvertException.getRowIndex() + 1) + "行,第"
                        + (excelDataConvertException.getColumnIndex() + 1) + "列解析异常,异常数据为:[ "
                        + excelDataConvertException.getCellData().getStringValue() + " ]");
                }
                if (exception instanceof IllegalStateException) {
                    throw (IllegalStateException)exception;
                @Override
                public void invoke(ImportTenantTemplate finSysTenantParam, AnalysisContext analysisContext) {
                    String code = finSysTenantParam.getCode();
                    String tenantName = finSysTenantParam.getTenantName();
                    ReadSheetHolder readSheetHolder = analysisContext.readSheetHolder();
                    Integer rowIndex = readSheetHolder.getRowIndex() + 1;
                    if (StringUtils.isEmpty(code) || code.length() > 20) {
                        IllegalStateException exception =
                            new IllegalStateException("第" + rowIndex + "行,机构编号不能为空或长度大于20");
                        throw exception;
                    }
                    if (null != finSysTenantService.queryOneByCode(code)) {
                        throw new IllegalStateException("第" + rowIndex + "行,机构编号已存在");
                    }
                    if (StringUtils.isEmpty(tenantName) || tenantName.length() > 100) {
                        IllegalStateException exception =
                            new IllegalStateException("第" + rowIndex + "行,机构名称不能为空或长度大于100");
                        throw exception;
                    }
                    FinSysTenantParam tenantParam = new FinSysTenantParam();
                    tenantParam.setParentId(pid);
                    tenantParam.setStatus(1);
                    tenantParam.setSummary("系统导入");
                    tenantParam.setCode(code);
                    tenantParam.setName(tenantName);
                    finSysTenantParams.add(tenantParam);
                }
            }
                @Override
                public void doAfterAllAnalysed(AnalysisContext analysisContext) {
                    finSysTenantService.insertFinSysTenantBatch(finSysTenantParams, sysInfo, lv);
                }
        }).doReadAll();
                @Override
                public void onException(Exception exception, AnalysisContext context) {
                    // 如果是某一个单元格的转换异常 能获取到具体行号
                    if (exception instanceof ExcelDataConvertException) {
                        ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception;
                        Integer rowIndex = excelDataConvertException.getRowIndex() + 1;
                        Integer columnIndex = excelDataConvertException.getColumnIndex();
                        String stringValue = excelDataConvertException.getCellData().getStringValue();
                        logger.error("第{}行,第{}列解析异常,数据为:{}", rowIndex, columnIndex, stringValue);
                        throw new IllegalStateException(
                            "第" + rowIndex + "行,第" + columnIndex + "列解析异常,异常数据为:[ " + stringValue + " ]");
                    }
                    if (exception instanceof IllegalStateException) {
                        throw (IllegalStateException)exception;
                    }
                }
            }).doReadAll();
        return ResponseValue.success("导入成功!", 1);
    }
consum-base/src/main/java/com/consum/base/pojo/excel/ImportTenantTemplate.java
New file
@@ -0,0 +1,20 @@
package com.consum.base.pojo.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
/**
 * @author asus
 * @version 1.0
 * @description: 机构导入模板
 * @date 2023/12/21 13:27
 */
@Data
public class ImportTenantTemplate {
    @ExcelProperty("机构编号")
    private String code;
    @ExcelProperty("机构名称")
    private String tenantName;
}