From 9d2266cbdaf3f672174c13726decafed3dfb10a0 Mon Sep 17 00:00:00 2001 From: chenweiwei Date: Thu, 27 Jun 2024 12:07:22 +0800 Subject: [PATCH] 1:关于批量数据处理的,加名字全称匹配 --- zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicCmtyController.java | 54 ++++++++++++++++++++++++++---------------------------- zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicMoneyController.java | 49 +++++++++++++++++++------------------------------ zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/mapper/CommonMapper.java | 11 +++++++++++ zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/ICommonService.java | 10 ++++++++++ zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/CommonService.java | 21 +++++++++++++++++++++ zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicCmtyServiceImpl.java | 8 ++++++++ zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicMoneyServiceImpl.java | 10 +++++++++- zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicCmtyImportInspection.java | 10 ++++++---- zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicMoneyImportInspection.java | 43 +++++++++++++++++++++++++++++++++++++++++++ zr-cloud/zr-modules/zr-schsf/src/main/resources/mapper/CommonMapper.xml | 10 ++++++++++ 10 files changed, 163 insertions(+), 63 deletions(-) create mode 100644 zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/mapper/CommonMapper.java create mode 100644 zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/ICommonService.java create mode 100644 zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/CommonService.java create mode 100644 zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicMoneyImportInspection.java create mode 100644 zr-cloud/zr-modules/zr-schsf/src/main/resources/mapper/CommonMapper.xml diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicCmtyController.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicCmtyController.java index 0c75880..9ceab31 100644 --- a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicCmtyController.java +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicCmtyController.java @@ -14,6 +14,7 @@ import com.chinagas.common.security.enums.Logical; import com.chinagas.modules.schsf.domain.McBasicCmty; import com.chinagas.modules.schsf.domain.dto.CompanyDto; import com.chinagas.modules.schsf.domain.vo.McBasicCmtyVo; +import com.chinagas.modules.schsf.service.ICommonService; import com.chinagas.modules.schsf.service.IMcBasicCmtyService; import com.chinagas.modules.schsf.utils.listener.McBasicCmtyImportInspection; import lombok.extern.slf4j.Slf4j; @@ -27,6 +28,7 @@ import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.sql.SQLIntegrityConstraintViolationException; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -45,6 +47,8 @@ import java.util.stream.Collectors; public class McBasicCmtyController extends BaseController { @Autowired private IMcBasicCmtyService mcBasicCmtyService; + @Autowired + private ICommonService commonService; /** * 查询基础数据-户数 项目公司组织级联 @@ -123,6 +127,8 @@ public class McBasicCmtyController extends BaseController { throw new RuntimeException("文件大小不得超过5M"); } try { + + // 获取文件的输入流 InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 @@ -133,6 +139,10 @@ public class McBasicCmtyController extends BaseController { .headRowNumber(4) // 列表头行数,1代表列表头有1行,第二行开始为数据行 .doReadSync(); // 开始读Excel,返回一个List集合,继续后续入库操作 log.info("导入基础数据-户数总条数:{}", list == null ? 0 : list.size()); + +// List> sysDeptAlls = commonService.selectSysDeptAll(); + + // // 检验重复数据 // Map> collect = list.stream().collect(Collectors.groupingBy(o -> // o.getRegionName() + @@ -153,40 +163,28 @@ public class McBasicCmtyController extends BaseController { long startTime = System.currentTimeMillis(); // 记录任务开始时间 // 插入数据库 if (CollectionUtils.isNotEmpty(list)) { - Runnable task = () -> { - for (McBasicCmty mcBasicCmty : list) { - mcBasicCmtyService.insertMcBasicCmty(mcBasicCmty); - System.out.println(list); // 注意:这里直接打印list可能不是最佳实践,具体看需求 - } - }; - Thread backgroundThread = new Thread(task, "后台插入任务线程"); - backgroundThread.setDaemon(true); // 设置为守护线程,随主线程结束而结束 - backgroundThread.start(); - try { - backgroundThread.join(); // 等待线程执行完毕,确保能准确计算运行时长 - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); // 恢复中断状态 - log.error("导入基础数据-户数,等待线程执行完毕时被中断", e); +// Runnable task = () -> { + for (McBasicCmty mcBasicCmty : list) { + mcBasicCmtyService.insertMcBasicCmty(mcBasicCmty); + System.out.println(list); // 注意:这里直接打印list可能不是最佳实践,具体看需求 } +// }; +// Thread backgroundThread = new Thread(task, "后台插入任务线程"); +// backgroundThread.setDaemon(true); // 设置为守护线程,随主线程结束而结束 +// backgroundThread.start(); +// try { +// backgroundThread.join(); // 等待线程执行完毕,确保能准确计算运行时长 +// } catch (InterruptedException e) { +// Thread.currentThread().interrupt(); // 恢复中断状态 +// log.error("导入基础数据-户数,等待线程执行完毕时被中断", e); +// } } long endTime = System.currentTimeMillis(); // 记录任务结束时间 long duration = endTime - startTime; // 计算任务运行时长 log.info("导入基础数据-户数,数据库插入任务运行时长:{}毫秒", duration); } catch (Exception e) { - Throwable cause = e.getCause(); - if (cause instanceof SQLIntegrityConstraintViolationException) { - String errMsg = (cause).getMessage(); - if (StringUtils.isNotEmpty(errMsg) && errMsg.contains("uniq_address")) { - // 找到第一个引号的索引 - int startIndex = errMsg.indexOf("\'"); - // 找到第二个引号的索引 - int endIndex = errMsg.indexOf("\'", startIndex + 1); - // 提取引号之间的内容 - String content = errMsg.substring(startIndex + 1, endIndex); - throw new RuntimeException("系统中存在相同信息: " + content); - } - } - throw new RuntimeException(e); + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); } return AjaxResult.success("数据导入成功"); } diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicMoneyController.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicMoneyController.java index 11e45c7..678e8e2 100644 --- a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicMoneyController.java +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/controller/McBasicMoneyController.java @@ -11,14 +11,17 @@ import com.chinagas.common.log.annotation.Log; import com.chinagas.common.log.enums.BusinessType; import com.chinagas.common.security.annotation.RequirePermission; import com.chinagas.common.security.enums.Logical; -import com.chinagas.modules.schsf.domain.McBasicCmty; import com.chinagas.modules.schsf.domain.McBasicMoney; import com.chinagas.modules.schsf.domain.vo.McBasicMoneyVo; import com.chinagas.modules.schsf.service.IMcBasicMoneyService; +import com.chinagas.modules.schsf.utils.listener.McBasicMoneyImportInspection; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -28,8 +31,6 @@ import java.net.URLEncoder; import java.sql.SQLIntegrityConstraintViolationException; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; /** @@ -81,6 +82,7 @@ public class McBasicMoneyController extends BaseController { // 获取文件的输入流 InputStream inputStream = file.getInputStream(); List list = EasyExcel.read(inputStream) //调用read方法 + .registerReadListener(new McBasicMoneyImportInspection()) // 注册自定义监听器,字段校验可以在监听器内实现 .head(McBasicMoney.class) // 对应导入的实体类 .sheet(0) // 导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据 @@ -108,40 +110,27 @@ public class McBasicMoneyController extends BaseController { long startTime = System.currentTimeMillis(); // 记录任务开始时间 // 插入数据库 if (CollectionUtils.isNotEmpty(list)) { - Runnable task = () -> { +// Runnable task = () -> { for (McBasicMoney mcBasicCmty : list) { mcBasicMoneyService.insertMcBasicMoney(mcBasicCmty); - System.out.println(list); } - }; - Thread backgroundThread = new Thread(task, "后台插入任务线程"); - backgroundThread.setDaemon(true); // 设置为守护线程,随主线程结束而结束 - backgroundThread.start(); - try { - backgroundThread.join(); // 等待线程执行完毕,确保能准确计算运行时长 - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); // 恢复中断状态 - log.error("导入基础数据-户数,等待线程执行完毕时被中断", e); - } +// }; +// Thread backgroundThread = new Thread(task, "后台插入任务线程"); +// backgroundThread.setDaemon(true); // 设置为守护线程,随主线程结束而结束 +// backgroundThread.start(); +// try { +// backgroundThread.join(); // 等待线程执行完毕,确保能准确计算运行时长 +// } catch (InterruptedException e) { +// Thread.currentThread().interrupt(); // 恢复中断状态 +// log.error("导入基础数据-户数,等待线程执行完毕时被中断", e); +// } } long endTime = System.currentTimeMillis(); // 记录任务结束时间 long duration = endTime - startTime; // 计算任务运行时长 log.info("导入基础数据-金额,数据库插入任务运行时长:{}毫秒", duration); } catch (Exception e) { - Throwable cause = e.getCause(); - if (cause instanceof SQLIntegrityConstraintViolationException) { - String errMsg = (cause).getMessage(); - if (StringUtils.isNotEmpty(errMsg) && errMsg.contains("uniq_address")) { - // 找到第一个引号的索引 - int startIndex = errMsg.indexOf("\'"); - // 找到第二个引号的索引 - int endIndex = errMsg.indexOf("\'", startIndex + 1); - // 提取引号之间的内容 - String content = errMsg.substring(startIndex + 1, endIndex); - throw new RuntimeException("系统中存在相同信息: " + content); - } - } - throw new RuntimeException(e); + e.printStackTrace(); + return AjaxResult.error(e.getMessage()); } return AjaxResult.success("数据导入成功"); } diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/mapper/CommonMapper.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/mapper/CommonMapper.java new file mode 100644 index 0000000..e4afdf0 --- /dev/null +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/mapper/CommonMapper.java @@ -0,0 +1,11 @@ +package com.chinagas.modules.schsf.mapper; + +import org.apache.ibatis.annotations.Param; + +import java.util.HashMap; + +public interface CommonMapper { + HashMap selectSysDeptByidName(@Param("deptId") String deptId,@Param("deptName") String deptName); + + +} diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/ICommonService.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/ICommonService.java new file mode 100644 index 0000000..970a0aa --- /dev/null +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/ICommonService.java @@ -0,0 +1,10 @@ +package com.chinagas.modules.schsf.service; + +import java.util.HashMap; + +public interface ICommonService { + + HashMap selectSysDeptByidName(String companyCode, String companyName); + + +} diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/CommonService.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/CommonService.java new file mode 100644 index 0000000..2ff94c8 --- /dev/null +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/CommonService.java @@ -0,0 +1,21 @@ +package com.chinagas.modules.schsf.service.impl; + +import com.chinagas.modules.schsf.mapper.CommonMapper; +import com.chinagas.modules.schsf.service.ICommonService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; + +@Slf4j +@Service +public class CommonService implements ICommonService { + @Autowired + private CommonMapper commonMapper; + + @Override + public HashMap selectSysDeptByidName(String deptId, String deptName) { + return commonMapper.selectSysDeptByidName(deptId,deptName); + } +} diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicCmtyServiceImpl.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicCmtyServiceImpl.java index 4b262ba..16ab021 100644 --- a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicCmtyServiceImpl.java +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicCmtyServiceImpl.java @@ -1,5 +1,6 @@ package com.chinagas.modules.schsf.service.impl; +import com.chinagas.common.core.exceptions.ServiceException; import com.chinagas.common.core.utils.DateUtils; import com.chinagas.common.datascope.annotation.DataScope; import com.chinagas.common.security.utils.SecurityUtils; @@ -9,6 +10,7 @@ import com.chinagas.modules.schsf.domain.dto.CompanyDto; import com.chinagas.modules.schsf.domain.vo.McBasicCmtyVo; import com.chinagas.modules.schsf.domain.vo.McVisitVo; import com.chinagas.modules.schsf.mapper.McBasicCmtyMapper; +import com.chinagas.modules.schsf.service.ICommonService; import com.chinagas.modules.schsf.service.IMcBasicCmtyService; import com.chinagas.modules.schsf.service.IMcConstructionService; import org.springframework.beans.factory.annotation.Autowired; @@ -31,6 +33,8 @@ public class McBasicCmtyServiceImpl implements IMcBasicCmtyService { private McBasicCmtyMapper mcBasicCmtyMapper; @Autowired private IMcConstructionService iMcConstructionService; + @Autowired + private ICommonService commonService; /** * 查询基础数据-户数 @@ -75,6 +79,10 @@ public class McBasicCmtyServiceImpl implements IMcBasicCmtyService { } mcBasicCmty.setCreateTime(DateUtils.getNowLocal()); mcBasicCmty.setCreateBy(SecurityUtils.getUserId().toString()); + HashMap sysDeptByidName = commonService.selectSysDeptByidName(mcBasicCmty.getCompanyCode(), mcBasicCmty.getCompanyName()); + if (sysDeptByidName == null || sysDeptByidName.size() == 0) { + throw new ServiceException(String.format("项目公司:‘%s’,项目公司代码:‘%s’,与组织信息不匹配,请核实", mcBasicCmty.getCompanyName(),mcBasicCmty.getCompanyCode())); + } int i = mcBasicCmtyMapper.insertMcBasicCmty(mcBasicCmty); if (i > 0) { iMcConstructionService.insertMcConstructionByMcBasicCmty(mcBasicCmty); diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicMoneyServiceImpl.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicMoneyServiceImpl.java index 74ff233..1ee71a9 100644 --- a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicMoneyServiceImpl.java +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicMoneyServiceImpl.java @@ -6,10 +6,12 @@ import com.chinagas.common.security.utils.SecurityUtils; import com.chinagas.modules.schsf.domain.McBasicMoney; import com.chinagas.modules.schsf.domain.vo.McBasicMoneyVo; import com.chinagas.modules.schsf.mapper.McBasicMoneyMapper; +import com.chinagas.modules.schsf.service.ICommonService; import com.chinagas.modules.schsf.service.IMcBasicMoneyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.HashMap; import java.util.List; /** @@ -23,7 +25,8 @@ public class McBasicMoneyServiceImpl implements IMcBasicMoneyService { @Autowired private McBasicMoneyMapper mcBasicMoneyMapper; - + @Autowired + private ICommonService commonService; /** * 查询基础数据-金额 * @@ -68,6 +71,11 @@ public class McBasicMoneyServiceImpl implements IMcBasicMoneyService } mcBasicMoney.setCreateTime(DateUtils.getNowLocal()); mcBasicMoney.setCreateBy(SecurityUtils.getUserId().toString()); + HashMap sysDeptByidName = commonService.selectSysDeptByidName(mcBasicMoney.getCompanyCode(), mcBasicMoney.getCompanyName()); + if (sysDeptByidName == null || sysDeptByidName.size() == 0) { + throw new RuntimeException(String.format("项目公司:‘%s’,项目公司代码:‘%s’,与组织信息不匹配,请核实", mcBasicMoney.getCompanyName(),mcBasicMoney.getCompanyCode())); + } + return mcBasicMoneyMapper.insertMcBasicMoney(mcBasicMoney); } diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicCmtyImportInspection.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicCmtyImportInspection.java index 9f6259e..b5ddbc1 100644 --- a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicCmtyImportInspection.java +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicCmtyImportInspection.java @@ -5,14 +5,19 @@ import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.exception.ExcelDataConvertException; import com.chinagas.common.core.utils.StringUtils; import com.chinagas.modules.schsf.domain.McBasicCmty; +import com.chinagas.modules.schsf.service.ICommonService; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.HashMap; public class McBasicCmtyImportInspection extends AnalysisEventListener { @Override public void invoke(Object data, AnalysisContext context) { + McBasicCmty mcBasicCmty = (McBasicCmty) data; System.out.println(mcBasicCmty); - if (mcBasicCmty.getFiscalYear()==null) { + if (mcBasicCmty.getFiscalYear() == null) { throw new RuntimeException(String.format("第%s行 财年 为空,请核实", context.readRowHolder().getRowIndex() + 1)); } if (StringUtils.isEmpty(mcBasicCmty.getRegionName())) { @@ -29,9 +34,6 @@ public class McBasicCmtyImportInspection extends AnalysisEventListener { } } - - - /** * 出现异常回调 * diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicMoneyImportInspection.java b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicMoneyImportInspection.java new file mode 100644 index 0000000..c46569e --- /dev/null +++ b/zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicMoneyImportInspection.java @@ -0,0 +1,43 @@ +package com.chinagas.modules.schsf.utils.listener; + +import com.alibaba.excel.context.AnalysisContext; +import com.alibaba.excel.event.AnalysisEventListener; +import com.alibaba.excel.exception.ExcelDataConvertException; +import com.chinagas.common.core.utils.StringUtils; +import com.chinagas.modules.schsf.domain.McBasicMoney; + +public class McBasicMoneyImportInspection extends AnalysisEventListener { + + + + @Override + public void invoke(Object data, AnalysisContext context) { + McBasicMoney mcBasicMoney = (McBasicMoney) data; + if (StringUtils.isEmpty(mcBasicMoney.getCompanyName())) { + throw new RuntimeException(String.format("第%s行 项目公司 为空,请核实", context.readRowHolder().getRowIndex() + 1)); + } + if (StringUtils.isEmpty(mcBasicMoney.getCompanyCode())) { + throw new RuntimeException(String.format("第%s行 公司代码 为空,请核实", context.readRowHolder().getRowIndex() + 1)); + } + } + + @Override + public void onException(Exception exception, AnalysisContext context) throws Exception { + if (exception instanceof ExcelDataConvertException) { + /**从0开始计算*/ + Integer columnIndex = ((ExcelDataConvertException) exception).getColumnIndex() + 1; + Integer rowIndex = ((ExcelDataConvertException) exception).getRowIndex() + 1; + String message = "第" + rowIndex + "行,第" + columnIndex + "列" + "数据格式有误,请核实"; + throw new RuntimeException(message); + } else if (exception instanceof RuntimeException) { + throw exception; + } else { + super.onException(exception, context); + } + } + + @Override + public void doAfterAllAnalysed(AnalysisContext analysisContext) { + + } +} diff --git a/zr-cloud/zr-modules/zr-schsf/src/main/resources/mapper/CommonMapper.xml b/zr-cloud/zr-modules/zr-schsf/src/main/resources/mapper/CommonMapper.xml new file mode 100644 index 0000000..137af22 --- /dev/null +++ b/zr-cloud/zr-modules/zr-schsf/src/main/resources/mapper/CommonMapper.xml @@ -0,0 +1,10 @@ + + + + + + -- libgit2 0.21.2