模块管理导入功能,实现交互

dev
lijinyu 1 year ago
parent abf00f0070
commit c99b54e9d4
  1. 20
      ant-design-vue-jeecg/src/views/modulex/ModulexList.vue
  2. 164
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/modulex/service/impl/ModulexServiceImpl.java
  3. 1
      jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/taskType/controller/TaskTypeController.java

@ -71,7 +71,25 @@
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入模块</a-button>
<a-modal
title="正在上传..."
:visible="ModalData.isVisible==='true'"
:confirm-loading="false"
:mask="true"
:maskClosable="false"
:keyboard="false"
:closable="false"
:footer="false"
>
<p>当前状态{{ ModalData.status }}</p>
<p>总记录数{{ ModalData.records }}</p>
<p>已上传{{ ModalData.uploaded }}</p>
<a-progress
:percent="parseInt(String(ModalData.uploaded/ModalData.records*100))"
title="上传进度:"
status="active" :steps="ModalData.records"/>
</a-modal>
<a-button type="primary" icon="import" @click="showProcess">导入模块</a-button>
</a-upload>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="functionImportExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入功能</a-button>

@ -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<ModulexMapper, Modulex> impl
@Autowired
private IProjectxService projectxService;
@Autowired
private WebSocketUtils webSocketUtils;
@ -326,13 +330,22 @@ public class ModulexServiceImpl extends ServiceImpl<ModulexMapper, Modulex> impl
public Result<?> importExcel(MultipartFile file) throws Exception {
// 获取当前操作用户
LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
Map<String, String> 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<ModulexTemplate> modulexVoList = new ArrayList<>();
@ -345,6 +358,8 @@ public class ModulexServiceImpl extends ServiceImpl<ModulexMapper, Modulex> impl
}
List<String> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> impl
}
}
modulexTemplateService.saveBatch(modulexVoList);
List<Modulex> modulexList = new ArrayList<>();
List<ModulexTemplate> modulexTemplates = this.SelectModulex();
List<String> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> impl
queryWrapper.eq(Modulex::getModuleName,pid);
List<Modulex> 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<Projectx> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> 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<ModulexMapper, Modulex> impl
List<ModulexTemplate> modulexTemplateList = modulexTemplateService.list(queryWrapper);
return modulexTemplateList;
}
@Transactional
public boolean saveSingleBatch(List<Modulex> modulexList, LoginUser loginUser, Map<String, String> 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) {

@ -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;

Loading…
Cancel
Save