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;