From c99b54e9d4dd688272c7c622570090271365baf1 Mon Sep 17 00:00:00 2001
From: lijinyu <3023846734@qq.com>
Date: Sat, 15 Jul 2023 09:42:20 +0800
Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E5=9D=97=E7=AE=A1=E7=90=86=E5=AF=BC?=
=?UTF-8?q?=E5=85=A5=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=AE=9E=E7=8E=B0=E4=BA=A4?=
=?UTF-8?q?=E4=BA=92?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../src/views/modulex/ModulexList.vue | 20 ++-
.../service/impl/ModulexServiceImpl.java | 164 ++++++++++++++++--
.../controller/TaskTypeController.java | 1 -
3 files changed, 164 insertions(+), 21 deletions(-)
diff --git a/ant-design-vue-jeecg/src/views/modulex/ModulexList.vue b/ant-design-vue-jeecg/src/views/modulex/ModulexList.vue
index b31d425..f3a8a1b 100644
--- a/ant-design-vue-jeecg/src/views/modulex/ModulexList.vue
+++ b/ant-design-vue-jeecg/src/views/modulex/ModulexList.vue
@@ -71,7 +71,25 @@
新增
- 导入模块
+
+ 当前状态:{{ ModalData.status }}
+ 总记录数:{{ ModalData.records }}
+ 已上传:{{ ModalData.uploaded }}
+
+
+ 导入模块
导入功能
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/modulex/service/impl/ModulexServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/modulex/service/impl/ModulexServiceImpl.java
index 6a0f3e5..5f596a7 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/modulex/service/impl/ModulexServiceImpl.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/modulex/service/impl/ModulexServiceImpl.java
@@ -42,6 +42,7 @@ import org.jeecg.modules.system.service.ISysRoleService;
import org.jeecg.modules.system.service.ISysUserService;
import org.jeecg.modules.tablex.entity.Tablex;
import org.jeecg.modules.tablex.service.ITablexService;
+import org.jeecg.modules.tablex.ws.WebSocketUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -101,6 +102,9 @@ public class ModulexServiceImpl extends ServiceImpl impl
@Autowired
private IProjectxService projectxService;
+ @Autowired
+ private WebSocketUtils webSocketUtils;
+
@@ -326,13 +330,22 @@ public class ModulexServiceImpl extends ServiceImpl impl
public Result> importExcel(MultipartFile file) throws Exception {
// 获取当前操作用户
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+ Map message = new HashMap<>();
+ message.put("isVisible", "true");
+ message.put("uploaded", "0");
+ message.put("status", "判断文件结构");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
String username = loginUser.getUsername();
if (file.isEmpty()) {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("上传为空");
}
String filename = file.getOriginalFilename();
String fileSuffix = filename.substring(filename.lastIndexOf("."));
if (!fileSuffix.equals(".xls") && !fileSuffix.equals(".xlsx")) {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("文件类型不对");
}
List modulexVoList = new ArrayList<>();
@@ -345,6 +358,8 @@ public class ModulexServiceImpl extends ServiceImpl impl
}
List propertyNames = new ArrayList<>();
// 获取excel的sheet页
+ message.put("status", "读取数据中");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
int numberOfSheets = wb.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = wb.getSheetAt(i);
@@ -380,24 +395,32 @@ public class ModulexServiceImpl extends ServiceImpl impl
break;
case 1:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "项目名称为空");
}
modulexVo.setProjectId(value);
break;
case 2:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "中文名称为空");
}
modulexVo.setModuleName(value);
break;
case 3:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "英文名称为空");
}
modulexVo.setModuleEnName(value);
break;
case 4:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "模块编码为空");
}
modulexVo.setModuleCode(value);
@@ -410,12 +433,16 @@ public class ModulexServiceImpl extends ServiceImpl impl
break;
case 7:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "任务等级为空");
}
modulexVo.setWorkLevel(value);
break;
case 8:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "开发状态为空");
}
modulexVo.setWorkStatus(value);
@@ -425,6 +452,8 @@ public class ModulexServiceImpl extends ServiceImpl impl
break;
case 10:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "任务时长为空");
}
modulexVo.setDuration(value);
@@ -437,6 +466,8 @@ public class ModulexServiceImpl extends ServiceImpl impl
break;
case 13:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "实际时长为空");
}
modulexVo.setRealDuration(value);
@@ -455,26 +486,36 @@ public class ModulexServiceImpl extends ServiceImpl impl
break;
case 18:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "模块状态为空");
}
modulexVo.setStatus(value);
break;
case 19:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "版本状态为空");
}
modulexVo.setVerisonStatus(value);
break;
case 20:
if (value == null || value == "") {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("第" + (j + 1) + "行" + propertyNames.get(k) + "版本号为空");
}else if(value.length()<=0||value.length()>50){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("版本号不符合规范");
}else {
modulexVo.setVerison(value);
}
break;
default:
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("未知错误");
}
modulexVo.setUploadPerson(username);
@@ -484,11 +525,15 @@ public class ModulexServiceImpl extends ServiceImpl impl
}
}
modulexTemplateService.saveBatch(modulexVoList);
+
+
List modulexList = new ArrayList<>();
List modulexTemplates = this.SelectModulex();
List ids = new ArrayList<>();
if(modulexTemplates==null||modulexTemplates.size()==0){
- return Result.error("导入失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,预读数据失败,获取不到表格中的数据,请重新导入");
}
else {
for (ModulexTemplate modulexTemplate : modulexTemplates) {
@@ -497,8 +542,11 @@ public class ModulexServiceImpl extends ServiceImpl impl
}
boolean isTure = modulexTemplateService.removeByIds(ids);
if(!isTure){
- return Result.error("临时表删除失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("预读数据删除失败,请重新导入");
}
+ message.put("status", "导入数据中");
for (ModulexTemplate modulexTemplate : modulexTemplates) {
Modulex modulex = new Modulex();
String pid = modulexTemplate.getPid();
@@ -509,26 +557,36 @@ public class ModulexServiceImpl extends ServiceImpl impl
queryWrapper.eq(Modulex::getModuleName,pid);
List list = this.list(queryWrapper);
if(list==null ||list.size()==0){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,此模块不存在上级");
}
Modulex one =list.get(0);
if(one==null){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,此模块不存在上级");
}String pid1 = one.getId();
if(pid1==null){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,此模块不存在上级");
}
modulex.setPid(pid1);
}
String projectId = modulexTemplate.getProjectId();
if(projectId==null){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,项目名称不能为空");
}else {
LambdaQueryWrapper projectxLambdaQueryWrapper = new LambdaQueryWrapper<>();
projectxLambdaQueryWrapper.eq(Projectx::getProjectName,projectId);
Projectx projectx = projectxService.getOne(projectxLambdaQueryWrapper);
if(projectx==null){
- return Result.error("项目名称不存在");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,项目名称不存在");
} else {
String projectxId = projectx.getId();
modulex.setProjectId(projectxId);
@@ -537,6 +595,8 @@ public class ModulexServiceImpl extends ServiceImpl impl
String moduleName = modulexTemplate.getModuleName();
String pid1 = modulex.getPid();
if(moduleName==null){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,中文名称不能为空");
}else if(pid1==null){
modulex.setModuleName(moduleName);
@@ -545,14 +605,20 @@ public class ModulexServiceImpl extends ServiceImpl impl
modulexLambdaQueryWrapper.eq(Modulex::getPid,pid1).eq(Modulex::getModuleName,moduleName);
Modulex modulex1 = this.getOne(modulexLambdaQueryWrapper);
if(modulex1!=null){
- return Result.error("相同的上级模块不能重名");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,相同的上级模块不能重名");
}modulex.setModuleName(moduleName);
String moduleEnName = modulexTemplate.getModuleEnName();
if(moduleEnName==null){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,英文名称不能为空");
}modulex.setModuleEnName(moduleEnName);
String moduleCode = modulexTemplate.getModuleCode();
if(moduleCode==null||moduleCode.length()>30){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,模块编码不能为空或者模块编码过长");
}
modulex.setModuleCode(moduleCode);
@@ -568,10 +634,14 @@ public class ModulexServiceImpl extends ServiceImpl impl
sysUserLambdaQueryWrapper.eq(SysUser::getUsername,managerUsers);
SysUser iSysUserServiceOne = iSysUserService.getOne(sysUserLambdaQueryWrapper);
if(iSysUserServiceOne==null){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,责任人信息查询不到");
}else {
String id = iSysUserServiceOne.getId();
if (id == null) {
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,责任人信息查询不到");
}
modulex.setManagerUsers(id);
@@ -579,17 +649,23 @@ public class ModulexServiceImpl extends ServiceImpl impl
}
String workLevel = modulexTemplate.getWorkLevel();
if(StringUtils.isBlank(workLevel)){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,任务等级不能为空");
}
else {
Integer integer = Integer.valueOf(workLevel);
if(integer<=0&&integer>=6){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,任务等级不规范");
}
modulex.setWorkLevel(integer);
}
String workStatus = modulexTemplate.getWorkStatus();
if(StringUtils.isBlank(workStatus)){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,工作状态不能为空");
}else {
Integer integer = 100;
@@ -607,6 +683,8 @@ public class ModulexServiceImpl extends ServiceImpl impl
case "已取出": integer = 9;
break;
default:
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("导入失败,开发状态不规范");
}
modulex.setWorkStatus(integer);
@@ -617,7 +695,9 @@ public class ModulexServiceImpl extends ServiceImpl impl
}else {
Boolean result = this.checkTime(publishTime);
if(!result){
- return Result.error("日期格式不规范");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,日期格式不规范");
}else {
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(publishTime);
modulex.setPublishTime(date);
@@ -625,7 +705,9 @@ public class ModulexServiceImpl extends ServiceImpl impl
}
String duration = modulexTemplate.getDuration();
if(StringUtils.isBlank(duration)){
- return Result.error("任务时长不能为空");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,任务时长不能为空");
}else {
double parseDouble = Double.parseDouble(duration);
modulex.setDuration(parseDouble);
@@ -636,7 +718,9 @@ public class ModulexServiceImpl extends ServiceImpl impl
}else {
Boolean result = this.checkTime(startTime);
if(!result){
- return Result.error("开始时间不规范");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,开始时间不规范");
}else {
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(startTime);
modulex.setStartTime(date);
@@ -648,7 +732,9 @@ public class ModulexServiceImpl extends ServiceImpl impl
}else {
Boolean result = this.checkTime(submitTime);
if(!result){
- return Result.error("提交时间不规范");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,提交时间不规范");
}else {
Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(submitTime);
modulex.setSubmitTime(date);
@@ -656,11 +742,15 @@ public class ModulexServiceImpl extends ServiceImpl impl
}
String realDuration = modulexTemplate.getRealDuration();
if(StringUtils.isBlank(realDuration)){
- return Result.error("实际时长不能为空");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,实际时长不能为空");
}else {
double parseDouble = Double.parseDouble(realDuration);
if(parseDouble<0.1){
- return Result.error("最小时间0.1小时");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,最小时间0.1小时");
}
modulex.setRealDuration(parseDouble);
}
@@ -672,11 +762,15 @@ public class ModulexServiceImpl extends ServiceImpl impl
sysRoleLambdaQueryWrapper.eq(SysRole::getRoleName,userRole);
SysRole one = iSysRoleService.getOne(sysRoleLambdaQueryWrapper);
if(one==null){
- return Result.error("导入失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,用户角色不存在");
}
String useRole = one.getId();
if(useRole==null){
- return Result.error("导入失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,用户角色不存在");
} modulex.setUserRole(useRole);
}
String relatedBean = modulexTemplate.getRelatedBean();
@@ -685,6 +779,8 @@ public class ModulexServiceImpl extends ServiceImpl impl
}else {
Boolean extracted = extracted(modulex, relatedBean);
if(!extracted){
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.error("关联实体不存在");
}
}
@@ -698,7 +794,9 @@ public class ModulexServiceImpl extends ServiceImpl impl
}modulex.setDiagrams(diagrams);
String status = modulexTemplate.getStatus();
if(StringUtils.isBlank(status)){
- return Result.error("导入失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,模块状态不能为空");
}else {
Integer integer = 100;
switch (status){
@@ -709,13 +807,17 @@ public class ModulexServiceImpl extends ServiceImpl impl
case "废弃": integer = 9;
break;
default:
- return Result.error("导入失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,模块状态不规范匹配不到");
}
modulex.setStatus(integer);
}
String verisonStatus = modulexTemplate.getVerisonStatus();
if(StringUtils.isBlank(verisonStatus)){
- return Result.error("导入失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,版本状态不能为空");
}else {
Integer integer = 100;
switch (verisonStatus){
@@ -724,23 +826,31 @@ public class ModulexServiceImpl extends ServiceImpl impl
case "历史": integer = 0;
break;
default:
- Result.error("未知错误");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ Result.error("导入失败,版本状态不规范,匹配失败");
}
modulex.setVerisonStatus(integer);
}
String verison = modulexTemplate.getVerison();
if(StringUtils.isBlank(verison)){
- return Result.error("导入失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("导入失败,版本号不能为空");
}else {
int parseInt = Integer.parseInt(verison);
modulex.setVerison(parseInt);
}
modulexList.add(modulex);
}
- boolean result = this.saveBatch(modulexList);
+ boolean result = this.saveSingleBatch(modulexList, loginUser, message);
if(!result){
- return Result.error("导入失败");
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return Result.error("未知错误导入失败,请重新导入");
}
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
return Result.OK("导入成功");
}
}
@@ -798,6 +908,22 @@ public class ModulexServiceImpl extends ServiceImpl impl
List modulexTemplateList = modulexTemplateService.list(queryWrapper);
return modulexTemplateList;
}
+ @Transactional
+ public boolean saveSingleBatch(List modulexList, LoginUser loginUser, Map message) throws InterruptedException {
+ Boolean isTrue;
+ for (int i = 0; i < modulexList.size(); i++){
+ Thread.sleep(1000L);
+ message.put("uploaded", String.valueOf(i + 1));
+ isTrue = this.save(modulexList.get(i));
+ if(!isTrue){
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ message.put("isVisible", "false");
+ webSocketUtils.sendMessage(loginUser.getId(), message);
+ return false;
+ }
+ }
+ return true;
+ }
private void handleStatus(String id, Integer a) {
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/taskType/controller/TaskTypeController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/taskType/controller/TaskTypeController.java
index a5eb58f..089fa15 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/taskType/controller/TaskTypeController.java
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/taskType/controller/TaskTypeController.java
@@ -9,7 +9,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
-import javafx.util.Pair;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.SecurityUtils;
import org.jeecg.common.api.vo.Result;