Commit 9d2266cbdaf3f672174c13726decafed3dfb10a0

Authored by 陈威
1 parent 1df383b5
Exists in dev

1:关于批量数据处理的,加名字全称匹配

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;
14 14 import com.chinagas.modules.schsf.domain.McBasicCmty;
15 15 import com.chinagas.modules.schsf.domain.dto.CompanyDto;
16 16 import com.chinagas.modules.schsf.domain.vo.McBasicCmtyVo;
  17 +import com.chinagas.modules.schsf.service.ICommonService;
17 18 import com.chinagas.modules.schsf.service.IMcBasicCmtyService;
18 19 import com.chinagas.modules.schsf.utils.listener.McBasicCmtyImportInspection;
19 20 import lombok.extern.slf4j.Slf4j;
... ... @@ -27,6 +28,7 @@ import java.io.IOException;
27 28 import java.io.InputStream;
28 29 import java.net.URLEncoder;
29 30 import java.sql.SQLIntegrityConstraintViolationException;
  31 +import java.util.HashMap;
30 32 import java.util.List;
31 33 import java.util.Map;
32 34 import java.util.Set;
... ... @@ -45,6 +47,8 @@ import java.util.stream.Collectors;
45 47 public class McBasicCmtyController extends BaseController {
46 48 @Autowired
47 49 private IMcBasicCmtyService mcBasicCmtyService;
  50 + @Autowired
  51 + private ICommonService commonService;
48 52  
49 53 /**
50 54 * 查询基础数据-户数 项目公司组织级联
... ... @@ -123,6 +127,8 @@ public class McBasicCmtyController extends BaseController {
123 127 throw new RuntimeException("文件大小不得超过5M");
124 128 }
125 129 try {
  130 +
  131 +
126 132 // 获取文件的输入流
127 133 InputStream inputStream = file.getInputStream();
128 134 List<McBasicCmty> list = EasyExcel.read(inputStream) //调用read方法
... ... @@ -133,6 +139,10 @@ public class McBasicCmtyController extends BaseController {
133 139 .headRowNumber(4) // 列表头行数,1代表列表头有1行,第二行开始为数据行
134 140 .doReadSync(); // 开始读Excel,返回一个List<T>集合,继续后续入库操作
135 141 log.info("导入基础数据-户数总条数:{}", list == null ? 0 : list.size());
  142 +
  143 +// List<HashMap<String, String>> sysDeptAlls = commonService.selectSysDeptAll();
  144 +
  145 +
136 146 // // 检验重复数据
137 147 // Map<String, List<McBasicCmty>> collect = list.stream().collect(Collectors.groupingBy(o ->
138 148 // o.getRegionName() +
... ... @@ -153,40 +163,28 @@ public class McBasicCmtyController extends BaseController {
153 163 long startTime = System.currentTimeMillis(); // 记录任务开始时间
154 164 // 插入数据库
155 165 if (CollectionUtils.isNotEmpty(list)) {
156   - Runnable task = () -> {
157   - for (McBasicCmty mcBasicCmty : list) {
158   - mcBasicCmtyService.insertMcBasicCmty(mcBasicCmty);
159   - System.out.println(list); // 注意:这里直接打印list可能不是最佳实践,具体看需求
160   - }
161   - };
162   - Thread backgroundThread = new Thread(task, "后台插入任务线程");
163   - backgroundThread.setDaemon(true); // 设置为守护线程,随主线程结束而结束
164   - backgroundThread.start();
165   - try {
166   - backgroundThread.join(); // 等待线程执行完毕,确保能准确计算运行时长
167   - } catch (InterruptedException e) {
168   - Thread.currentThread().interrupt(); // 恢复中断状态
169   - log.error("导入基础数据-户数,等待线程执行完毕时被中断", e);
  166 +// Runnable task = () -> {
  167 + for (McBasicCmty mcBasicCmty : list) {
  168 + mcBasicCmtyService.insertMcBasicCmty(mcBasicCmty);
  169 + System.out.println(list); // 注意:这里直接打印list可能不是最佳实践,具体看需求
170 170 }
  171 +// };
  172 +// Thread backgroundThread = new Thread(task, "后台插入任务线程");
  173 +// backgroundThread.setDaemon(true); // 设置为守护线程,随主线程结束而结束
  174 +// backgroundThread.start();
  175 +// try {
  176 +// backgroundThread.join(); // 等待线程执行完毕,确保能准确计算运行时长
  177 +// } catch (InterruptedException e) {
  178 +// Thread.currentThread().interrupt(); // 恢复中断状态
  179 +// log.error("导入基础数据-户数,等待线程执行完毕时被中断", e);
  180 +// }
171 181 }
172 182 long endTime = System.currentTimeMillis(); // 记录任务结束时间
173 183 long duration = endTime - startTime; // 计算任务运行时长
174 184 log.info("导入基础数据-户数,数据库插入任务运行时长:{}毫秒", duration);
175 185 } catch (Exception e) {
176   - Throwable cause = e.getCause();
177   - if (cause instanceof SQLIntegrityConstraintViolationException) {
178   - String errMsg = (cause).getMessage();
179   - if (StringUtils.isNotEmpty(errMsg) && errMsg.contains("uniq_address")) {
180   - // 找到第一个引号的索引
181   - int startIndex = errMsg.indexOf("\'");
182   - // 找到第二个引号的索引
183   - int endIndex = errMsg.indexOf("\'", startIndex + 1);
184   - // 提取引号之间的内容
185   - String content = errMsg.substring(startIndex + 1, endIndex);
186   - throw new RuntimeException("系统中存在相同信息: " + content);
187   - }
188   - }
189   - throw new RuntimeException(e);
  186 + e.printStackTrace();
  187 + return AjaxResult.error(e.getMessage());
190 188 }
191 189 return AjaxResult.success("数据导入成功");
192 190 }
... ...
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;
11 11 import com.chinagas.common.log.enums.BusinessType;
12 12 import com.chinagas.common.security.annotation.RequirePermission;
13 13 import com.chinagas.common.security.enums.Logical;
14   -import com.chinagas.modules.schsf.domain.McBasicCmty;
15 14 import com.chinagas.modules.schsf.domain.McBasicMoney;
16 15 import com.chinagas.modules.schsf.domain.vo.McBasicMoneyVo;
17 16 import com.chinagas.modules.schsf.service.IMcBasicMoneyService;
  17 +import com.chinagas.modules.schsf.utils.listener.McBasicMoneyImportInspection;
18 18 import lombok.extern.slf4j.Slf4j;
19 19 import org.apache.commons.lang3.StringUtils;
20 20 import org.springframework.beans.factory.annotation.Autowired;
21   -import org.springframework.web.bind.annotation.*;
  21 +import org.springframework.web.bind.annotation.GetMapping;
  22 +import org.springframework.web.bind.annotation.PostMapping;
  23 +import org.springframework.web.bind.annotation.RequestMapping;
  24 +import org.springframework.web.bind.annotation.RestController;
22 25 import org.springframework.web.multipart.MultipartFile;
23 26  
24 27 import javax.servlet.http.HttpServletResponse;
... ... @@ -28,8 +31,6 @@ import java.net.URLEncoder;
28 31 import java.sql.SQLIntegrityConstraintViolationException;
29 32 import java.util.List;
30 33 import java.util.Map;
31   -import java.util.Set;
32   -import java.util.stream.Collectors;
33 34  
34 35  
35 36 /**
... ... @@ -81,6 +82,7 @@ public class McBasicMoneyController extends BaseController {
81 82 // 获取文件的输入流
82 83 InputStream inputStream = file.getInputStream();
83 84 List<McBasicMoney> list = EasyExcel.read(inputStream) //调用read方法
  85 + .registerReadListener(new McBasicMoneyImportInspection())
84 86 // 注册自定义监听器,字段校验可以在监听器内实现
85 87 .head(McBasicMoney.class) // 对应导入的实体类
86 88 .sheet(0) // 导入数据的sheet页编号,0代表第一个sheet页,如果不填,则会导入所有sheet页的数据
... ... @@ -108,40 +110,27 @@ public class McBasicMoneyController extends BaseController {
108 110 long startTime = System.currentTimeMillis(); // 记录任务开始时间
109 111 // 插入数据库
110 112 if (CollectionUtils.isNotEmpty(list)) {
111   - Runnable task = () -> {
  113 +// Runnable task = () -> {
112 114 for (McBasicMoney mcBasicCmty : list) {
113 115 mcBasicMoneyService.insertMcBasicMoney(mcBasicCmty);
114   - System.out.println(list);
115 116 }
116   - };
117   - Thread backgroundThread = new Thread(task, "后台插入任务线程");
118   - backgroundThread.setDaemon(true); // 设置为守护线程,随主线程结束而结束
119   - backgroundThread.start();
120   - try {
121   - backgroundThread.join(); // 等待线程执行完毕,确保能准确计算运行时长
122   - } catch (InterruptedException e) {
123   - Thread.currentThread().interrupt(); // 恢复中断状态
124   - log.error("导入基础数据-户数,等待线程执行完毕时被中断", e);
125   - }
  117 +// };
  118 +// Thread backgroundThread = new Thread(task, "后台插入任务线程");
  119 +// backgroundThread.setDaemon(true); // 设置为守护线程,随主线程结束而结束
  120 +// backgroundThread.start();
  121 +// try {
  122 +// backgroundThread.join(); // 等待线程执行完毕,确保能准确计算运行时长
  123 +// } catch (InterruptedException e) {
  124 +// Thread.currentThread().interrupt(); // 恢复中断状态
  125 +// log.error("导入基础数据-户数,等待线程执行完毕时被中断", e);
  126 +// }
126 127 }
127 128 long endTime = System.currentTimeMillis(); // 记录任务结束时间
128 129 long duration = endTime - startTime; // 计算任务运行时长
129 130 log.info("导入基础数据-金额,数据库插入任务运行时长:{}毫秒", duration);
130 131 } catch (Exception e) {
131   - Throwable cause = e.getCause();
132   - if (cause instanceof SQLIntegrityConstraintViolationException) {
133   - String errMsg = (cause).getMessage();
134   - if (StringUtils.isNotEmpty(errMsg) && errMsg.contains("uniq_address")) {
135   - // 找到第一个引号的索引
136   - int startIndex = errMsg.indexOf("\'");
137   - // 找到第二个引号的索引
138   - int endIndex = errMsg.indexOf("\'", startIndex + 1);
139   - // 提取引号之间的内容
140   - String content = errMsg.substring(startIndex + 1, endIndex);
141   - throw new RuntimeException("系统中存在相同信息: " + content);
142   - }
143   - }
144   - throw new RuntimeException(e);
  132 + e.printStackTrace();
  133 + return AjaxResult.error(e.getMessage());
145 134 }
146 135 return AjaxResult.success("数据导入成功");
147 136 }
... ...
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/mapper/CommonMapper.java 0 → 100644
... ... @@ -0,0 +1,11 @@
  1 +package com.chinagas.modules.schsf.mapper;
  2 +
  3 +import org.apache.ibatis.annotations.Param;
  4 +
  5 +import java.util.HashMap;
  6 +
  7 +public interface CommonMapper {
  8 + HashMap<String, String> selectSysDeptByidName(@Param("deptId") String deptId,@Param("deptName") String deptName);
  9 +
  10 +
  11 +}
... ...
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/ICommonService.java 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +package com.chinagas.modules.schsf.service;
  2 +
  3 +import java.util.HashMap;
  4 +
  5 +public interface ICommonService {
  6 +
  7 + HashMap<String, String> selectSysDeptByidName(String companyCode, String companyName);
  8 +
  9 +
  10 +}
... ...
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/CommonService.java 0 → 100644
... ... @@ -0,0 +1,21 @@
  1 +package com.chinagas.modules.schsf.service.impl;
  2 +
  3 +import com.chinagas.modules.schsf.mapper.CommonMapper;
  4 +import com.chinagas.modules.schsf.service.ICommonService;
  5 +import lombok.extern.slf4j.Slf4j;
  6 +import org.springframework.beans.factory.annotation.Autowired;
  7 +import org.springframework.stereotype.Service;
  8 +
  9 +import java.util.HashMap;
  10 +
  11 +@Slf4j
  12 +@Service
  13 +public class CommonService implements ICommonService {
  14 + @Autowired
  15 + private CommonMapper commonMapper;
  16 +
  17 + @Override
  18 + public HashMap<String, String> selectSysDeptByidName(String deptId, String deptName) {
  19 + return commonMapper.selectSysDeptByidName(deptId,deptName);
  20 + }
  21 +}
... ...
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/service/impl/McBasicCmtyServiceImpl.java
1 1 package com.chinagas.modules.schsf.service.impl;
2 2  
  3 +import com.chinagas.common.core.exceptions.ServiceException;
3 4 import com.chinagas.common.core.utils.DateUtils;
4 5 import com.chinagas.common.datascope.annotation.DataScope;
5 6 import com.chinagas.common.security.utils.SecurityUtils;
... ... @@ -9,6 +10,7 @@ import com.chinagas.modules.schsf.domain.dto.CompanyDto;
9 10 import com.chinagas.modules.schsf.domain.vo.McBasicCmtyVo;
10 11 import com.chinagas.modules.schsf.domain.vo.McVisitVo;
11 12 import com.chinagas.modules.schsf.mapper.McBasicCmtyMapper;
  13 +import com.chinagas.modules.schsf.service.ICommonService;
12 14 import com.chinagas.modules.schsf.service.IMcBasicCmtyService;
13 15 import com.chinagas.modules.schsf.service.IMcConstructionService;
14 16 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -31,6 +33,8 @@ public class McBasicCmtyServiceImpl implements IMcBasicCmtyService {
31 33 private McBasicCmtyMapper mcBasicCmtyMapper;
32 34 @Autowired
33 35 private IMcConstructionService iMcConstructionService;
  36 + @Autowired
  37 + private ICommonService commonService;
34 38  
35 39 /**
36 40 * 查询基础数据-户数
... ... @@ -75,6 +79,10 @@ public class McBasicCmtyServiceImpl implements IMcBasicCmtyService {
75 79 }
76 80 mcBasicCmty.setCreateTime(DateUtils.getNowLocal());
77 81 mcBasicCmty.setCreateBy(SecurityUtils.getUserId().toString());
  82 + HashMap<String, String> sysDeptByidName = commonService.selectSysDeptByidName(mcBasicCmty.getCompanyCode(), mcBasicCmty.getCompanyName());
  83 + if (sysDeptByidName == null || sysDeptByidName.size() == 0) {
  84 + throw new ServiceException(String.format("项目公司:‘%s’,项目公司代码:‘%s’,与组织信息不匹配,请核实", mcBasicCmty.getCompanyName(),mcBasicCmty.getCompanyCode()));
  85 + }
78 86 int i = mcBasicCmtyMapper.insertMcBasicCmty(mcBasicCmty);
79 87 if (i > 0) {
80 88 iMcConstructionService.insertMcConstructionByMcBasicCmty(mcBasicCmty);
... ...
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;
6 6 import com.chinagas.modules.schsf.domain.McBasicMoney;
7 7 import com.chinagas.modules.schsf.domain.vo.McBasicMoneyVo;
8 8 import com.chinagas.modules.schsf.mapper.McBasicMoneyMapper;
  9 +import com.chinagas.modules.schsf.service.ICommonService;
9 10 import com.chinagas.modules.schsf.service.IMcBasicMoneyService;
10 11 import org.springframework.beans.factory.annotation.Autowired;
11 12 import org.springframework.stereotype.Service;
12 13  
  14 +import java.util.HashMap;
13 15 import java.util.List;
14 16  
15 17 /**
... ... @@ -23,7 +25,8 @@ public class McBasicMoneyServiceImpl implements IMcBasicMoneyService
23 25 {
24 26 @Autowired
25 27 private McBasicMoneyMapper mcBasicMoneyMapper;
26   -
  28 + @Autowired
  29 + private ICommonService commonService;
27 30 /**
28 31 * 查询基础数据-金额
29 32 *
... ... @@ -68,6 +71,11 @@ public class McBasicMoneyServiceImpl implements IMcBasicMoneyService
68 71 }
69 72 mcBasicMoney.setCreateTime(DateUtils.getNowLocal());
70 73 mcBasicMoney.setCreateBy(SecurityUtils.getUserId().toString());
  74 + HashMap<String, String> sysDeptByidName = commonService.selectSysDeptByidName(mcBasicMoney.getCompanyCode(), mcBasicMoney.getCompanyName());
  75 + if (sysDeptByidName == null || sysDeptByidName.size() == 0) {
  76 + throw new RuntimeException(String.format("项目公司:‘%s’,项目公司代码:‘%s’,与组织信息不匹配,请核实", mcBasicMoney.getCompanyName(),mcBasicMoney.getCompanyCode()));
  77 + }
  78 +
71 79 return mcBasicMoneyMapper.insertMcBasicMoney(mcBasicMoney);
72 80 }
73 81  
... ...
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;
5 5 import com.alibaba.excel.exception.ExcelDataConvertException;
6 6 import com.chinagas.common.core.utils.StringUtils;
7 7 import com.chinagas.modules.schsf.domain.McBasicCmty;
  8 +import com.chinagas.modules.schsf.service.ICommonService;
  9 +import org.springframework.beans.factory.annotation.Autowired;
  10 +
  11 +import java.util.HashMap;
8 12  
9 13 public class McBasicCmtyImportInspection extends AnalysisEventListener {
10 14  
11 15 @Override
12 16 public void invoke(Object data, AnalysisContext context) {
  17 +
13 18 McBasicCmty mcBasicCmty = (McBasicCmty) data;
14 19 System.out.println(mcBasicCmty);
15   - if (mcBasicCmty.getFiscalYear()==null) {
  20 + if (mcBasicCmty.getFiscalYear() == null) {
16 21 throw new RuntimeException(String.format("第%s行 财年 为空,请核实", context.readRowHolder().getRowIndex() + 1));
17 22 }
18 23 if (StringUtils.isEmpty(mcBasicCmty.getRegionName())) {
... ... @@ -29,9 +34,6 @@ public class McBasicCmtyImportInspection extends AnalysisEventListener {
29 34 }
30 35 }
31 36  
32   -
33   -
34   -
35 37 /**
36 38 * 出现异常回调
37 39 *
... ...
zr-cloud/zr-modules/zr-schsf/src/main/java/com/chinagas/modules/schsf/utils/listener/McBasicMoneyImportInspection.java 0 → 100644
... ... @@ -0,0 +1,43 @@
  1 +package com.chinagas.modules.schsf.utils.listener;
  2 +
  3 +import com.alibaba.excel.context.AnalysisContext;
  4 +import com.alibaba.excel.event.AnalysisEventListener;
  5 +import com.alibaba.excel.exception.ExcelDataConvertException;
  6 +import com.chinagas.common.core.utils.StringUtils;
  7 +import com.chinagas.modules.schsf.domain.McBasicMoney;
  8 +
  9 +public class McBasicMoneyImportInspection extends AnalysisEventListener {
  10 +
  11 +
  12 +
  13 + @Override
  14 + public void invoke(Object data, AnalysisContext context) {
  15 + McBasicMoney mcBasicMoney = (McBasicMoney) data;
  16 + if (StringUtils.isEmpty(mcBasicMoney.getCompanyName())) {
  17 + throw new RuntimeException(String.format("第%s行 项目公司 为空,请核实", context.readRowHolder().getRowIndex() + 1));
  18 + }
  19 + if (StringUtils.isEmpty(mcBasicMoney.getCompanyCode())) {
  20 + throw new RuntimeException(String.format("第%s行 公司代码 为空,请核实", context.readRowHolder().getRowIndex() + 1));
  21 + }
  22 + }
  23 +
  24 + @Override
  25 + public void onException(Exception exception, AnalysisContext context) throws Exception {
  26 + if (exception instanceof ExcelDataConvertException) {
  27 + /**从0开始计算*/
  28 + Integer columnIndex = ((ExcelDataConvertException) exception).getColumnIndex() + 1;
  29 + Integer rowIndex = ((ExcelDataConvertException) exception).getRowIndex() + 1;
  30 + String message = "第" + rowIndex + "行,第" + columnIndex + "列" + "数据格式有误,请核实";
  31 + throw new RuntimeException(message);
  32 + } else if (exception instanceof RuntimeException) {
  33 + throw exception;
  34 + } else {
  35 + super.onException(exception, context);
  36 + }
  37 + }
  38 +
  39 + @Override
  40 + public void doAfterAllAnalysed(AnalysisContext analysisContext) {
  41 +
  42 + }
  43 +}
... ...
zr-cloud/zr-modules/zr-schsf/src/main/resources/mapper/CommonMapper.xml 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +<?xml version="1.0" encoding="UTF-8" ?>
  2 +<!DOCTYPE mapper
  3 + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4 + "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5 +<mapper namespace="com.chinagas.modules.schsf.mapper.CommonMapper">
  6 +
  7 + <select id="selectSysDeptByidName" resultType="java.util.HashMap" parameterType="java.lang.String">
  8 + SELECT dept_id,dept_name FROM sys_dept WHERE dept_id=#{deptId,jdbcType=VARCHAR} and dept_name=#{deptName,jdbcType=VARCHAR}
  9 + </select>
  10 +</mapper>
... ...