diff --git a/ant-design-vue-jeecg/src/views/modulex/ModulexList.vue b/ant-design-vue-jeecg/src/views/modulex/ModulexList.vue index b20bd0e..b31d425 100644 --- a/ant-design-vue-jeecg/src/views/modulex/ModulexList.vue +++ b/ant-design-vue-jeecg/src/views/modulex/ModulexList.vue @@ -77,10 +77,49 @@ 导入功能 - 导入规则 + + 导入规则 + +

当前状态:{{ ModalData.status }}

+

总记录数:{{ ModalData.records }}

+

已上传:{{ ModalData.uploaded }}

+ +
- - 导入实体 + + + 导入实体 + +

当前状态:{{ ModalData.status }}

+

总记录数:{{ ModalData.records }}

+

已上传:{{ ModalData.uploaded }}

+ +
返回 @@ -212,6 +251,13 @@ export default { }, data () { return { + ModalData:{ + uploaded: '0', + isVisible: 'false', + records: '0', + status: '判断文件结构' + }, + visible:false, description: '模块管理管理页面', // 表头 columns: [ @@ -427,6 +473,7 @@ export default { this.loginRole(usercode) //console.log('userole1',this.userRole1) this.getSuperFieldList() + this.showProcess() }, computed: { importExcelUrl: function () { @@ -450,6 +497,20 @@ export default { }, }, methods: { + // 显示进度 + showProcess(){ + let userId = store.getters.userInfo.id + let base_url = window._CONFIG['domianURL'] + base_url = base_url.replace('http', 'ws') + let ws = new WebSocket(`${base_url}/uploadProcess/${userId}`) + ws.onmessage = (e) =>{ + this.ModalData=JSON.parse(e.data) + if (this.visible===false) { + // this.getList() + console.log("重新获取列表") + } + } + }, // 多选框的事件回调 checkChange (checked) { // 初始是默认全选的,假设此刻点击了name的选择框 diff --git a/ant-design-vue-jeecg/src/views/requiremententity/RequirementEntityList.vue b/ant-design-vue-jeecg/src/views/requiremententity/RequirementEntityList.vue index 20bda8a..b0847d3 100644 --- a/ant-design-vue-jeecg/src/views/requiremententity/RequirementEntityList.vue +++ b/ant-design-vue-jeecg/src/views/requiremententity/RequirementEntityList.vue @@ -95,15 +95,14 @@ 编辑 - 详情 废弃 - 转化 + 撤销 - 撤销 + 转化 删除 @@ -194,6 +193,7 @@ importExcelUrl: "requiremententity/requirementEntity/importExcel", fq:"/requiremententity/requirementEntity/fq", hb:"/requiremententity/requirementEntity/hb", + cx:"/requiremententity/requirementEntity/cx", }, dictOptions:{}, @@ -209,6 +209,16 @@ }, }, methods: { + updateEntityStatus(id){ + getAction(this.url.cx,{id:id}).then((res)=>{ + if (res.success) { + this.$message.success(res.message); + this.loadData(); + }else{ + this.$message.warning(res.message); + } + }); + }, hb(hbsj){ console.log(hbsj) if(hbsj.length<2){ diff --git a/jeecg-boot/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java b/jeecg-boot/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java index 65db351..3714a10 100644 --- a/jeecg-boot/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java +++ b/jeecg-boot/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java @@ -72,6 +72,7 @@ public class ShiroConfig { } // 配置不会被拦截的链接 顺序判断 filterChainDefinitionMap.put("/createtp/createtp/maketupu","anon"); // 知识图谱排除 + filterChainDefinitionMap.put("/uploadProcess/**", "anon"); //上传进度条 filterChainDefinitionMap.put("/sys/cas/client/validateLogin", "anon"); //cas验证登录 filterChainDefinitionMap.put("/sys/randomImage/**", "anon"); //登录验证码接口排除 filterChainDefinitionMap.put("/sys/checkCaptcha", "anon"); //登录验证码接口排除 diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/requiremententity/controller/RequirementEntityController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/requiremententity/controller/RequirementEntityController.java index 92da0c6..1734600 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/requiremententity/controller/RequirementEntityController.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/requiremententity/controller/RequirementEntityController.java @@ -200,6 +200,26 @@ public class RequirementEntityController extends JeecgController cx(@RequestParam(name="id",required=true) String id) { + RequirementEntity requirementEntity = requirementEntityService.getById(id); + if(requirementEntity==null) { + return Result.error("未找到对应数据"); + }else{ + requirementEntity.setEntityStatus(0); + requirementEntityService.updateById(requirementEntity); + } + return Result.OK("已撤销废除"); + } + /** * 合并 * @@ -210,18 +230,23 @@ public class RequirementEntityController extends JeecgController hb(@RequestParam(name="ids",required=true) String ids,@RequestParam(name="id",required=true) String id) { - List listids = Arrays.asList(ids.split(",")); - for (int i = 0 ; i < listids.size(); i++){ - if(!id.equals(listids.get(i))){ - RequirementEntity requirementEntity = requirementEntityService.getById(listids.get(i)); - requirementEntity.setEntityStatus(9); - requirementEntityService.updateById(requirementEntity); - } - } RequirementEntity requirementEntity1 = requirementEntityService.getById(id); - requirementEntity1.setEntityStatus(2); - requirementEntityService.updateById(requirementEntity1); - return Result.OK("成功"); + if(requirementEntity1.getEntityStatus()==9){ + return Result.error("该实体已废弃,需撤回废弃后再保留"); + }else{ + List listids = Arrays.asList(ids.split(",")); + for (int i = 0 ; i < listids.size(); i++){ + if(!id.equals(listids.get(i))){ + RequirementEntity requirementEntity = requirementEntityService.getById(listids.get(i)); + requirementEntity.setEntityStatus(9); + requirementEntityService.updateById(requirementEntity); + } + } + requirementEntity1.setEntityStatus(2); + requirementEntityService.updateById(requirementEntity1); + return Result.OK("成功"); + } + } /** diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/controller/RulexController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/controller/RulexController.java index 428f7c5..26646d4 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/controller/RulexController.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/controller/RulexController.java @@ -1,17 +1,18 @@ package org.jeecg.modules.demo.rulex.controller; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.io.IOException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.aspect.annotation.AutoLog; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.demo.functionx.entity.Functionx; import org.jeecg.modules.demo.functionx.mapper.FunctionxMapper; import org.jeecg.modules.demo.functionx.service.IFunctionxService; @@ -20,484 +21,528 @@ import org.jeecg.modules.demo.rulex.entity.Rulex; import org.jeecg.modules.demo.rulex.mapper.RulexMapper; import org.jeecg.modules.demo.rulex.service.IRuleVoService; import org.jeecg.modules.demo.rulex.service.IRulexService; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.metadata.IPage; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import lombok.extern.slf4j.Slf4j; - import org.jeecg.modules.demo.rulex.util.DateValidator; import org.jeecg.modules.demo.rulex.util.DateValidatorUsingDateFormat; import org.jeecg.modules.fieldx.entity.Fieldx; import org.jeecg.modules.fieldx.service.IFieldxService; import org.jeecg.modules.modulex.entity.Modulex; import org.jeecg.modules.modulex.service.IModulexService; -import org.jeecg.modules.system.entity.SysDict; import org.jeecg.modules.system.entity.SysDictItem; import org.jeecg.modules.system.mapper.SysDictItemMapper; import org.jeecg.modules.tablex.entity.Tablex; import org.jeecg.modules.tablex.service.ITablexService; +import org.jeecg.modules.tablex.ws.WebSocketUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.entity.ImportParams; -import org.jeecg.common.system.base.controller.JeecgController; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; -import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.servlet.ModelAndView; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.jeecg.common.aspect.annotation.AutoLog; - /** +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; + +/** * @Description: 规则管理 * @Author: jeecg-boot - * @Date: 2023-04-10 + * @Date: 2023-04-10 * @Version: V1.0 */ -@Api(tags="规则管理") +@Api(tags = "规则管理") @RestController @RequestMapping("/rulex/rulex") @Slf4j public class RulexController extends JeecgController { - @Autowired - private IRulexService rulexService; - @Autowired - private IRuleVoService iRuleVoService; - @Autowired - FunctionxMapper functionxMapper; - @Autowired - IFunctionxService functionxService; - @Autowired - RulexMapper rulexMapper; - @Autowired - IFieldxService iFieldxService; - @Autowired - ITablexService iTablexService; - @Autowired - IModulexService iModulexService; - - @Autowired - RulexController rulexController; - - @Autowired - private SysDictItemMapper sysDictItemMapper; - - - /** - * 分页列表查询 - * - * @param rulex - * @param pageNo - * @param pageSize - * @param req - * @return - */ - @AutoLog(value = "规则管理-分页列表查询") - @ApiOperation(value="规则管理-分页列表查询", notes="规则管理-分页列表查询") - @GetMapping(value = "/list") - public Result queryPageList(Rulex rulex, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { + @Autowired + FunctionxMapper functionxMapper; + @Autowired + IFunctionxService functionxService; + @Autowired + RulexMapper rulexMapper; + @Autowired + IFieldxService iFieldxService; + @Autowired + ITablexService iTablexService; + @Autowired + IModulexService iModulexService; + @Autowired + RulexController rulexController; + @Autowired + private IRulexService rulexService; + @Autowired + private IRuleVoService iRuleVoService; + @Autowired + private SysDictItemMapper sysDictItemMapper; + + @Autowired + private WebSocketUtils webSocketUtils; + + + /** + * 分页列表查询 + * + * @param rulex + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "规则管理-分页列表查询") + @ApiOperation(value = "规则管理-分页列表查询", notes = "规则管理-分页列表查询") + @GetMapping(value = "/list") + public Result queryPageList(Rulex rulex, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, + HttpServletRequest req) { // QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(rulex, req.getParameterMap()); - QueryWrapper queryWrapper=new QueryWrapper<>(); - queryWrapper.eq("function_id",rulex.getFunctionId()); - queryWrapper.orderByDesc("work_level"); - if(rulex.getRuleCode()!=null){ - queryWrapper.eq("rule_code",rulex.getRuleCode()); - } - if(rulex.getTableId()!=null){ - queryWrapper.eq("table_id",rulex.getTableId()); - } - if(rulex.getFieldId()!=null){ - queryWrapper.eq("field_id",rulex.getFieldId()); - } - Page page = new Page(pageNo, pageSize); - IPage pageList = rulexService.page(page, queryWrapper); - return Result.OK(pageList); - } - - /** - * 添加 - * - * @param rulex - * @return - */ - @AutoLog(value = "规则管理-添加") - @ApiOperation(value="规则管理-添加", notes="规则管理-添加") - @PostMapping(value = "/add") - public Result add(@RequestBody Rulex rulex) { - if(rulex.getFunctionId()==null){ - return Result.error("功能点错误!!!"); - } - Functionx functionx = functionxMapper.selectById(rulex.getFunctionId()); - if(functionx.getStartTime()!=null){ - rulex.setStartTime(functionx.getStartTime()); - } - if(functionx.getSubmitTime()!=null){ - rulex.setSubmitTime(functionx.getSubmitTime()); - } - if(functionx.getRealDuration()!=null){ - rulex.setRealDuration(functionx.getRealDuration()); - } - rulex.setManagerUsers(functionx.getManagerUsers()); - rulex.setWorkStatus(functionx.getWorkStatus()); - rulexService.save(rulex); - return Result.OK("添加成功!"); - } - - /** - * 编辑 - * - * @param rulex - * @return - */ - @AutoLog(value = "规则管理-编辑") - @ApiOperation(value="规则管理-编辑", notes="规则管理-编辑") - @PutMapping(value = "/edit") - public Result edit(@RequestBody Rulex rulex) { - rulexService.updateById(rulex); - return Result.OK("编辑成功!"); - } - - /** - * 通过id删除 - * - * @param id - * @return - */ - @AutoLog(value = "规则管理-通过id删除") - @ApiOperation(value="规则管理-通过id删除", notes="规则管理-通过id删除") - @DeleteMapping(value = "/delete") - public Result delete(@RequestParam(name="id",required=true) String id) { - rulexService.removeById(id); - return Result.OK("删除成功!"); - } - - /** - * 批量删除 - * - * @param ids - * @return - */ - @AutoLog(value = "规则管理-批量删除") - @ApiOperation(value="规则管理-批量删除", notes="规则管理-批量删除") - @DeleteMapping(value = "/deleteBatch") - public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { - this.rulexService.removeByIds(Arrays.asList(ids.split(","))); - return Result.OK("批量删除成功!"); - } - - /** - * 通过id查询 - * - * @param id - * @return - */ - @AutoLog(value = "规则管理-通过id查询") - @ApiOperation(value="规则管理-通过id查询", notes="规则管理-通过id查询") - @GetMapping(value = "/queryById") - public Result queryById(@RequestParam(name="id",required=true) String id) { - Rulex rulex = rulexService.getById(id); - if(rulex==null) { - return Result.error("未找到对应数据"); - } - return Result.OK(rulex); - } + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("function_id", rulex.getFunctionId()); + queryWrapper.orderByDesc("work_level"); + if (rulex.getRuleCode() != null) { + queryWrapper.eq("rule_code", rulex.getRuleCode()); + } + if (rulex.getTableId() != null) { + queryWrapper.eq("table_id", rulex.getTableId()); + } + if (rulex.getFieldId() != null) { + queryWrapper.eq("field_id", rulex.getFieldId()); + } + Page page = new Page(pageNo, pageSize); + IPage pageList = rulexService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 添加 + * + * @param rulex + * @return + */ + @AutoLog(value = "规则管理-添加") + @ApiOperation(value = "规则管理-添加", notes = "规则管理-添加") + @PostMapping(value = "/add") + public Result add(@RequestBody Rulex rulex) { + if (rulex.getFunctionId() == null) { + return Result.error("功能点错误!!!"); + } + Functionx functionx = functionxMapper.selectById(rulex.getFunctionId()); + if (functionx.getStartTime() != null) { + rulex.setStartTime(functionx.getStartTime()); + } + if (functionx.getSubmitTime() != null) { + rulex.setSubmitTime(functionx.getSubmitTime()); + } + if (functionx.getRealDuration() != null) { + rulex.setRealDuration(functionx.getRealDuration()); + } + rulex.setManagerUsers(functionx.getManagerUsers()); + rulex.setWorkStatus(functionx.getWorkStatus()); + rulexService.save(rulex); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param rulex + * @return + */ + @AutoLog(value = "规则管理-编辑") + @ApiOperation(value = "规则管理-编辑", notes = "规则管理-编辑") + @PutMapping(value = "/edit") + public Result edit(@RequestBody Rulex rulex) { + rulexService.updateById(rulex); + return Result.OK("编辑成功!"); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @AutoLog(value = "规则管理-通过id删除") + @ApiOperation(value = "规则管理-通过id删除", notes = "规则管理-通过id删除") + @DeleteMapping(value = "/delete") + public Result delete(@RequestParam(name = "id", required = true) String id) { + rulexService.removeById(id); + return Result.OK("删除成功!"); + } /** - * 导出excel - * - * @param request - * @param rulex - */ + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "规则管理-批量删除") + @ApiOperation(value = "规则管理-批量删除", notes = "规则管理-批量删除") + @DeleteMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + this.rulexService.removeByIds(Arrays.asList(ids.split(","))); + return Result.OK("批量删除成功!"); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @AutoLog(value = "规则管理-通过id查询") + @ApiOperation(value = "规则管理-通过id查询", notes = "规则管理-通过id查询") + @GetMapping(value = "/queryById") + public Result queryById(@RequestParam(name = "id", required = true) String id) { + Rulex rulex = rulexService.getById(id); + if (rulex == null) { + return Result.error("未找到对应数据"); + } + return Result.OK(rulex); + } + + /** + * 导出excel + * + * @param request + * @param rulex + */ @RequestMapping(value = "/exportXls") public ModelAndView exportXls(HttpServletRequest request, Rulex rulex) { return super.exportXls(request, rulex, Rulex.class, "规则管理"); } /** - * 通过excel导入数据 - * - * @param request - * @param response - * @return - */ + * 通过excel导入数据 + * + * + * @return + */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + public Result importExcel(MultipartFile file) { - return rulexController.preImportAndExcel(request); + return rulexController.preImportAndExcel(file); } - @Transactional - public Result preImportAndExcel(HttpServletRequest request) { - //return super.importExcel(request, response, ScTeams.class); - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - //校验时间 - final DateValidator validator = new DateValidatorUsingDateFormat("yyyy-MM-dd hh:mm:ss"); - for (Map.Entry entity : fileMap.entrySet()) { - System.err.println("----------------------------------------------"); - // 获取上传文件对象 - MultipartFile file = entity.getValue(); - if (file==null){ - return Result.error("文件上传失败,请重新上传"); - } - ImportParams params = new ImportParams(); - params.setTitleRows(2);//表格标题行数,默认0 - params.setHeadRows(1);//表头行数,默认1 - params.setNeedSave(true);//是否需要保存上传的Excel,默认为false - try { -// List list = ExcelImportUtil.importExcel(file.getInputStream(), ScTeamsDr.class, params); - List list = ExcelImportUtil.importExcel(file.getInputStream(), RuleVo.class, params); - if (list == null || list.size() <= 0) { - return Result.error("文件导入失败:模板中暂无数据"); - } - System.err.println("----------------------------------------------"); - System.out.println("List list = ExcelImportUtil.importExcel: " + list); - int num = 0; - for (int i = 0; i < list.size(); i++) { - if ( - //excel出现必要值未填该行直接跳过 - list.get(i).getRuleNo() == null || - list.get(i).getRuleCode() == null || + + @Transactional + public Result preImportAndExcel(MultipartFile file) { + + 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 originalFilename = file.getOriginalFilename(); + if (StringUtils.isBlank(originalFilename) || + (!originalFilename.endsWith("xls") && + !originalFilename.endsWith("xlsx"))) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("文件格式不正确"); + } + //校验时间 + final DateValidator validator = new DateValidatorUsingDateFormat("yyyy-MM-dd hh:mm:ss"); + + if (file == null) { + return Result.error("文件上传失败,请重新上传"); + } + ImportParams params = new ImportParams(); + params.setTitleRows(2);//表格标题行数,默认0 + params.setHeadRows(1);//表头行数,默认1 + params.setNeedSave(true);//是否需要保存上传的Excel,默认为false + try { + message.put("status", "数据预读入"); + webSocketUtils.sendMessage(loginUser.getId(), message); + List list = ExcelImportUtil.importExcel(file.getInputStream(), RuleVo.class, params); + if (list == null || list.size() <= 0) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("文件导入失败:模板中暂无数据"); + } + int num = 0; + for (int i = 0; i < list.size(); i++) { + if ( + //excel出现必要值未填该行直接跳过 + list.get(i).getRuleNo() == null || + list.get(i).getRuleCode() == null || // list.get(i).getPmDescribe() == null && - list.get(i).getModuleId() == null || - list.get(i).getFunctionId() == null || + list.get(i).getModuleId() == null || + list.get(i).getFunctionId() == null || // list.get(i).getDiagrams() == null && - list.get(i).getTableId() == null || - list.get(i).getFieldId() == null || - list.get(i).getManagerUsers() == null || - list.get(i).getWorkLevel() == null || - list.get(i).getWorkStatus() == null || + list.get(i).getTableId() == null || + list.get(i).getFieldId() == null || + list.get(i).getManagerUsers() == null || + list.get(i).getWorkLevel() == null || + list.get(i).getWorkStatus() == null || // list.get(i).getStartTime() == null && // list.get(i).getManagerUsers() == null && // list.get(i).getDuration() == null && // list.get(i).getSubmitTime() == null && - list.get(i).getRealDuration() == null&& - list.get(i).getStatus() == null|| - list.get(i).getVerisonStatus() == null|| - list.get(i).getVerison() == null) { - continue; - } - num++; - if (num == 0) { - return Result.error("文件导入失败:导入模板不匹配"); + list.get(i).getRealDuration() == null && + list.get(i).getStatus() == null || + list.get(i).getVerisonStatus() == null || + list.get(i).getVerison() == null) { + continue; + } + num++; + if (num == 0) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("文件导入失败:导入模板不匹配"); // } else if (num!=list.size()) { // return Result.error("文件导入失败:请检查填写文字"); - } - iRuleVoService.save(list.get(i)); - } - }catch (Exception e) { - //update-begin-author:taoyan date:20211124 for: 导入数据重复增加提示 - String msg = e.getMessage(); - log.error(msg, e); - //if(msg!=null && msg.contains("Duplicate entry")) - if (msg != null && msg.indexOf("Duplicate entry") >= 0) { - return Result.error("文件导入失败:有重复数据!"); - } else { - return Result.error("文件导入失败:" + e.getMessage()); - } - //update-end-author:taoyan date:20211124 for: 导入数据重复增加提示 - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - List ruleVoList = iRuleVoService.list(); - if (ruleVoList.size()<=0||ruleVoList==null){ - return Result.error("文件导入失败,模板不匹配"); - } - for (int i = 0; i < ruleVoList.size(); i++) { - Rulex rulex = new Rulex(); - RuleVo ruleVo = ruleVoList.get(i); - //对应字段 - String fieldId = ruleVo.getFieldId(); - LambdaQueryWrapper rulexLambdaQueryWrapper = new LambdaQueryWrapper<>(); - rulexLambdaQueryWrapper.eq(Fieldx::getFieldName, fieldId); - Fieldx byId = iFieldxService.getOne(rulexLambdaQueryWrapper); - if (byId == null) { - iRuleVoService.remove(null); - return Result.error("字段输入错误,请核对"); - } - rulex.setFieldId(byId.getId()); - //对应功能 - String functionName = ruleVo.getFunctionId(); - LambdaQueryWrapper functionxLambdaQueryWrapper = new LambdaQueryWrapper(); - functionxLambdaQueryWrapper.eq(Functionx::getFunctionName, functionName); - Functionx byId1 = functionxService.getOne(functionxLambdaQueryWrapper); - if (byId1 == null) { - iRuleVoService.remove(null); - return Result.error("功能输入错误,请核对"); - } - rulex.setFunctionId(byId1.getId()); - //对应模块 - String moduleName = ruleVo.getModuleId(); - LambdaQueryWrapper modulexLambdaQueryWrapper = new LambdaQueryWrapper<>(); - modulexLambdaQueryWrapper.eq(Modulex::getModuleName, moduleName); - Modulex byId2 = iModulexService.getOne(modulexLambdaQueryWrapper); - if (byId2 == null) { - iRuleVoService.remove(null); - - return Result.error("模块输入错误,请核对"); - } - rulex.setModuleId(byId2.getId()); - //对应实体 - String tableId = ruleVo.getTableId(); - LambdaQueryWrapper tableLambdaQueryWrapper = new LambdaQueryWrapper<>(); - tableLambdaQueryWrapper.eq(Tablex::getTableName, tableId); - Tablex byId3 = iTablexService.getOne(tableLambdaQueryWrapper); - if (byId3 == null) { - iRuleVoService.remove(null); - - return Result.error("实体输入错误,请核对"); - } - rulex.setTableId(byId3.getId()); - Double aDouble = null; - try { - if (aDouble != null) - aDouble = Double.valueOf(ruleVo.getDuration()); - rulex.setDuration(aDouble); - } catch (Exception e) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 - - return Result.error("任务时长输入错误,请核对"); - } - - Double d; - try { - d = Double.valueOf(ruleVo.getRealDuration()); - } catch (Exception e) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 - - return Result.error("实际时长输入错误,请核对"); - } - rulex.setRealDuration(d); - Integer integer; - try { - integer = Integer.valueOf(ruleVo.getWorkLevel()); - } catch (Exception e) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 - - return Result.error("任务等级输入错误,请核对"); - } - rulex.setWorkLevel(integer); - String workStatus = ruleVo.getWorkStatus(); - LambdaQueryWrapper sysDictItemLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysDictItemLambdaQueryWrapper.eq(SysDictItem::getItemText, workStatus).eq(SysDictItem::getDictId,"1645268542514421762"); - SysDictItem sysDictItem = sysDictItemMapper.selectOne(sysDictItemLambdaQueryWrapper); - if (sysDictItem == null){ - iRuleVoService.remove(null); - return Result.error("任务状态输入错误,请核对"); - } - - rulex.setWorkStatus(Integer.valueOf(sysDictItem.getItemValue())); - - String status = ruleVo.getStatus(); - LambdaQueryWrapper sysDictItemLambdaQueryWrapper2 = new LambdaQueryWrapper<>(); - sysDictItemLambdaQueryWrapper2.eq(SysDictItem::getItemText, status).eq(SysDictItem::getDictId,"1645264493205491713"); - SysDictItem sysDictItem2 = sysDictItemMapper.selectOne(sysDictItemLambdaQueryWrapper2); - if (sysDictItem2 == null){ - iRuleVoService.remove(null); - return Result.error("规则状态输入错误,请核对"); - } - - - rulex.setStatus(Integer.valueOf(sysDictItem2.getItemValue())); - String verisonStatus = ruleVo.getVerisonStatus(); - LambdaQueryWrapper sysDictItemLambdaQueryWrapper3 = new LambdaQueryWrapper<>(); - sysDictItemLambdaQueryWrapper3.eq(SysDictItem::getItemText, verisonStatus); - SysDictItem sysDictItem3 = sysDictItemMapper.selectOne(sysDictItemLambdaQueryWrapper3); - if (sysDictItem3 == null) { - iRuleVoService.remove(null); - return Result.error("版本状态输入错误,请核对"); - } - - rulex.setVerisonStatus(Integer.valueOf(sysDictItem3.getItemValue())); - - //String转Date - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - try { - String startTime = ruleVo.getStartTime(); - if (startTime != null) - if (!validator.isValid(startTime)){ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 - return Result.error("开始时间输入错误"); - } - - else { - Date date = simpleDateFormat.parse(startTime); - rulex.setStartTime(date); - } - String submitTime = ruleVo.getSubmitTime(); - if (submitTime != null) - if (!validator.isValid(submitTime)){ - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 - return Result.error("提交时间输入错误"); - } - - else { - Date date1 = simpleDateFormat.parse(submitTime); - rulex.setSubmitTime(date1); - } - } catch (ParseException e) { - e.printStackTrace(); - } - - //规则序号 - String ruleNo = ruleVo.getRuleNo(); - List list = rulexMapper.checkRuleNo(byId1.getId()); - if (list.contains(ruleNo)) { - iRuleVoService.remove(null); - return Result.error("规则序号已存在"); - } - rulex.setRuleNo(ruleNo); - //规则编码 - String ruleCode = ruleVo.getRuleCode(); - Functionx functionxServiceById = functionxService.getById(byId1.getId()); - String functionCode = functionxServiceById.getFunctionCode(); + } + iRuleVoService.save(list.get(i)); + } + } catch (Exception e) { + //update-begin-author:taoyan date:20211124 for: 导入数据重复增加提示 + String msg = e.getMessage(); + log.error(msg, e); + //if(msg!=null && msg.contains("Duplicate entry")) + if (msg != null && msg.indexOf("Duplicate entry") >= 0) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("文件导入失败:有重复数据!"); + } else { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("文件导入失败:" + e.getMessage()); + } + //update-end-author:taoyan date:20211124 for: 导入数据重复增加提示 + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + List ruleVoList = iRuleVoService.list(); + if (ruleVoList.size() <= 0 || ruleVoList == null) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("文件导入失败,模板不匹配"); + } + // 将总的记录数传递给前端 + message.put("records", String.valueOf(ruleVoList.size())); + webSocketUtils.sendMessage(loginUser.getId(), message); + + for (int i = 0; i < ruleVoList.size(); i++) { + Rulex rulex = new Rulex(); + RuleVo ruleVo = ruleVoList.get(i); + //对应字段 + String fieldId = ruleVo.getFieldId(); + LambdaQueryWrapper rulexLambdaQueryWrapper = new LambdaQueryWrapper<>(); + rulexLambdaQueryWrapper.eq(Fieldx::getFieldName, fieldId); + Fieldx byId = iFieldxService.getOne(rulexLambdaQueryWrapper); + if (byId == null) { + iRuleVoService.remove(null); + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("字段输入错误,请核对"); + } + rulex.setFieldId(byId.getId()); + //对应功能 + String functionName = ruleVo.getFunctionId(); + LambdaQueryWrapper functionxLambdaQueryWrapper = new LambdaQueryWrapper(); + functionxLambdaQueryWrapper.eq(Functionx::getFunctionName, functionName); + Functionx byId1 = functionxService.getOne(functionxLambdaQueryWrapper); + if (byId1 == null) { + iRuleVoService.remove(null); + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("功能输入错误,请核对"); + } + rulex.setFunctionId(byId1.getId()); + //对应模块 + String moduleName = ruleVo.getModuleId(); + LambdaQueryWrapper modulexLambdaQueryWrapper = new LambdaQueryWrapper<>(); + modulexLambdaQueryWrapper.eq(Modulex::getModuleName, moduleName); + Modulex byId2 = iModulexService.getOne(modulexLambdaQueryWrapper); + if (byId2 == null) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + iRuleVoService.remove(null); + + return Result.error("模块输入错误,请核对"); + } + rulex.setModuleId(byId2.getId()); + //对应实体 + String tableId = ruleVo.getTableId(); + LambdaQueryWrapper tableLambdaQueryWrapper = new LambdaQueryWrapper<>(); + tableLambdaQueryWrapper.eq(Tablex::getTableName, tableId); + Tablex byId3 = iTablexService.getOne(tableLambdaQueryWrapper); + if (byId3 == null) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + iRuleVoService.remove(null); + + return Result.error("实体输入错误,请核对"); + } + rulex.setTableId(byId3.getId()); + Double aDouble = null; + try { + if (aDouble != null) + aDouble = Double.valueOf(ruleVo.getDuration()); + rulex.setDuration(aDouble); + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("任务时长输入错误,请核对"); + } + + Double d; + try { + d = Double.valueOf(ruleVo.getRealDuration()); + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("实际时长输入错误,请核对"); + } + rulex.setRealDuration(d); + Integer integer; + try { + integer = Integer.valueOf(ruleVo.getWorkLevel()); + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("任务等级输入错误,请核对"); + } + rulex.setWorkLevel(integer); + String workStatus = ruleVo.getWorkStatus(); + LambdaQueryWrapper sysDictItemLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysDictItemLambdaQueryWrapper.eq(SysDictItem::getItemText, workStatus).eq(SysDictItem::getDictId, "1645268542514421762"); + SysDictItem sysDictItem = sysDictItemMapper.selectOne(sysDictItemLambdaQueryWrapper); + if (sysDictItem == null) { + iRuleVoService.remove(null); + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("任务状态输入错误,请核对"); + } + + rulex.setWorkStatus(Integer.valueOf(sysDictItem.getItemValue())); + + String status = ruleVo.getStatus(); + LambdaQueryWrapper sysDictItemLambdaQueryWrapper2 = new LambdaQueryWrapper<>(); + sysDictItemLambdaQueryWrapper2.eq(SysDictItem::getItemText, status).eq(SysDictItem::getDictId, "1645264493205491713"); + SysDictItem sysDictItem2 = sysDictItemMapper.selectOne(sysDictItemLambdaQueryWrapper2); + if (sysDictItem2 == null) { + iRuleVoService.remove(null); + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("规则状态输入错误,请核对"); + } + + + rulex.setStatus(Integer.valueOf(sysDictItem2.getItemValue())); + String verisonStatus = ruleVo.getVerisonStatus(); + LambdaQueryWrapper sysDictItemLambdaQueryWrapper3 = new LambdaQueryWrapper<>(); + sysDictItemLambdaQueryWrapper3.eq(SysDictItem::getItemText, verisonStatus); + SysDictItem sysDictItem3 = sysDictItemMapper.selectOne(sysDictItemLambdaQueryWrapper3); + if (sysDictItem3 == null) { + iRuleVoService.remove(null); + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("版本状态输入错误,请核对"); + } + + rulex.setVerisonStatus(Integer.valueOf(sysDictItem3.getItemValue())); + + //String转Date + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + try { + String startTime = ruleVo.getStartTime(); + if (startTime != null) + if (!validator.isValid(startTime)) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("开始时间输入错误"); + } else { + Date date = simpleDateFormat.parse(startTime); + rulex.setStartTime(date); + } + String submitTime = ruleVo.getSubmitTime(); + if (submitTime != null) + if (!validator.isValid(submitTime)) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("提交时间输入错误"); + } else { + Date date1 = simpleDateFormat.parse(submitTime); + rulex.setSubmitTime(date1); + } + } catch (ParseException e) { + e.printStackTrace(); + } + + //规则序号 + String ruleNo = ruleVo.getRuleNo(); + List list = rulexMapper.checkRuleNo(byId1.getId()); + if (list.contains(ruleNo)) { + iRuleVoService.remove(null); + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("规则序号已存在"); + } + rulex.setRuleNo(ruleNo); + //规则编码 + String ruleCode = ruleVo.getRuleCode(); + Functionx functionxServiceById = functionxService.getById(byId1.getId()); + String functionCode = functionxServiceById.getFunctionCode(); // if (!ruleCode.matches(functionCode)) // return Result.error("规则编码错误"); - rulex.setRuleCode(functionCode); - //规则描述 - String pmDescribe = ruleVo.getPmDescribe(); - if (pmDescribe != null) - rulex.setPmDescribe(pmDescribe); - //分析图 - String diagrams = ruleVo.getDiagrams(); - if (diagrams != null) - rulex.setDiagrams(diagrams); - //版本号 - Integer integer1; - try { - integer1 = Integer.valueOf(ruleVo.getVerison()); - } catch (Exception e) { - TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 - - return Result.error("版本号输入错误,请核对"); - } - rulex.setVerison(String.valueOf(integer1)); - //责任人、 - String managerUsers = ruleVo.getManagerUsers(); - if (managerUsers != null) - rulex.setManagerUsers(managerUsers); - //存入真实表 - rulexService.save(rulex); - iRuleVoService.remove(null); - } - return Result.ok("文件导入成功!"); - - } - @GetMapping(value = "/sort") - public Result sort(@RequestParam(name="id",required=true) String id) { - return rulexService.sort(id); - } - - } + rulex.setRuleCode(functionCode); + //规则描述 + String pmDescribe = ruleVo.getPmDescribe(); + if (pmDescribe != null) + rulex.setPmDescribe(pmDescribe); + //分析图 + String diagrams = ruleVo.getDiagrams(); + if (diagrams != null) + rulex.setDiagrams(diagrams); + //版本号 + Integer integer1; + try { + integer1 = Integer.valueOf(ruleVo.getVerison()); + } catch (Exception e) { + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); //手动回滚,这样上层就无需去处理异常了 + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("版本号输入错误,请核对"); + } + rulex.setVerison(String.valueOf(integer1)); + //责任人、 + String managerUsers = ruleVo.getManagerUsers(); + if (managerUsers != null) + rulex.setManagerUsers(managerUsers); + message.put("status", "正在读取数据"); + webSocketUtils.sendMessage(loginUser.getId(), message); + //存入真实表 + rulexService.saveRule(rulex,loginUser,message,i+1); + iRuleVoService.remove(null); + } + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.ok("文件导入成功!"); + } + + @GetMapping(value = "/sort") + public Result sort(@RequestParam(name = "id", required = true) String id) { + return rulexService.sort(id); + } + +} diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/service/IRulexService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/service/IRulexService.java index da87dd0..c894d16 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/service/IRulexService.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/service/IRulexService.java @@ -1,11 +1,13 @@ package org.jeecg.modules.demo.rulex.service; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.demo.functionx.entity.Functionx; import org.jeecg.modules.demo.rulex.entity.Rulex; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; +import java.util.Map; /** * @Description: 规则管理 @@ -20,6 +22,7 @@ public interface IRulexService extends IService { List queryRuleListByFunctionId(Functionx functionx); + void saveRule(Rulex rulex, LoginUser loginUser, Map message,int i); void saveRulex(Functionx functionx); } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/service/impl/RulexServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/service/impl/RulexServiceImpl.java index 126b80e..b68794e 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/service/impl/RulexServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/demo/rulex/service/impl/RulexServiceImpl.java @@ -5,20 +5,24 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; +import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.demo.functionx.entity.Functionx; import org.jeecg.modules.demo.rulex.entity.Rulex; import org.jeecg.modules.demo.rulex.mapper.RulexMapper; import org.jeecg.modules.demo.rulex.service.IRulexService; import org.jeecg.modules.fieldx.entity.Fieldx; import org.jeecg.modules.fieldx.service.IFieldxService; +import org.jeecg.modules.message.controller.SysMessageTemplateController; 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.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.util.Date; import java.util.List; +import java.util.Map; /** * @Description: 规则管理 @@ -34,6 +38,9 @@ public class RulexServiceImpl extends ServiceImpl implements @Autowired RulexMapper rulexMapper; + @Autowired + private WebSocketUtils webSocketUtils; + @Autowired private ITablexService iTablexService; @@ -70,6 +77,26 @@ public class RulexServiceImpl extends ServiceImpl implements return this.list(ruleWrapper); } + @Override + public void saveRule(Rulex rulex, LoginUser loginUser, Map message,int i) { + + try { + + Thread.sleep(1000L); + this.save(rulex); + message.put("uploaded", String.valueOf(i )); + + webSocketUtils.sendMessage(loginUser.getId(), message); + } catch (InterruptedException e) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + log.error(e.getMessage(), e); + } + + + } + + /** * 功能管理新增规则操作时,如果功能类型是‘新增’和‘修改’,自动根据实体对应的字段,自动生成若干条记录(根据实体的字段生成多条规则) * diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/controller/TablexController.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/controller/TablexController.java index 5dac3f3..1018013 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/controller/TablexController.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/controller/TablexController.java @@ -37,12 +37,14 @@ import lombok.extern.slf4j.Slf4j; import org.jeecg.modules.tablex.service.ITablexVoService; import org.jeecg.modules.tablex.vo.TablexVo; +import org.jeecg.modules.tablex.ws.WebSocketUtils; import org.jeecgframework.poi.excel.ExcelImportUtil; import org.jeecgframework.poi.excel.def.NormalExcelConstants; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.ImportParams; import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; import org.jeecg.common.system.base.controller.JeecgController; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -81,6 +83,9 @@ public class TablexController extends JeecgController { @Autowired private IRequirementEntityService requirementEntityService; + @Autowired + private WebSocketUtils webSocketUtils; + /** * 分页列表查询 * @@ -269,14 +274,23 @@ public class TablexController extends JeecgController { */ @RequestMapping(value = "/importExcel", method = RequestMethod.POST) public Result importExcel(MultipartFile file) { - try { - LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + 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); + + try { // 判断文件是否是表格 String originalFilename = file.getOriginalFilename(); if (StringUtils.isBlank(originalFilename) || (!originalFilename.endsWith("xls") && !originalFilename.endsWith("xlsx"))) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("文件格式不正确"); } @@ -286,17 +300,25 @@ public class TablexController extends JeecgController { params.setHeadRows(1);//表头行数,默认1 params.setNeedSave(true);//是否需要保存上传的Excel,默认为false List list = null; + message.put("status", "读取数据中"); + webSocketUtils.sendMessage(loginUser.getId(), message); try { //读取excel数据 list = ExcelImportUtil.importExcel(file.getInputStream(), TablexVo.class, params); } catch (Exception e) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("文件读取失败"); } //判断文件中是否存在数据 if (list == null || list.size() == 0) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("Excel数据为空"); } + message.put("status", "数据预读入"); + webSocketUtils.sendMessage(loginUser.getId(), message); for (TablexVo tablexVo : list) { //判断当前存入行是否为空值 if (tablexVo.getModuleId() == null && @@ -307,13 +329,17 @@ public class TablexController extends JeecgController { tablexVo.getStatus() == null && tablexVo.getVerisonStatus() == null && tablexVo.getVerison() == null) continue; + // 将总的记录数传递给前端 + message.put("records", String.valueOf(list.size())); + webSocketUtils.sendMessage(loginUser.getId(), message); //判断版本号长度 String verison = tablexVo.getVerison(); if (verison.length() > 5) { - return Result.error("导入失败,版本号格式错误"); + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.error("预读入失败,版本号格式错误"); } - //存入临时表中 tablexVoService.save(tablexVo); } @@ -324,20 +350,30 @@ public class TablexController extends JeecgController { tablexVoService.removeAll(voList); if (voList.size() == 0) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("导入失败,数据为空"); } - Tablex tablex = new Tablex(); + message.put("status", "开始数据校验"); + webSocketUtils.sendMessage(loginUser.getId(), message); for (int i = 0; i < voList.size(); i++) { + List tablexList = new ArrayList<>(); + Tablex tablex = new Tablex(); + String moduleId = voList.get(i).getModuleId(); if (moduleId == null || moduleId.equals("")){ + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("对应模块填写不能为空"); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Modulex::getId,moduleId); Modulex modulex = modulexService.getOne(queryWrapper); if(modulex == null){ + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("对应模块填写错误"); } String modulexId = modulex.getId(); @@ -346,9 +382,9 @@ public class TablexController extends JeecgController { String verisonStatus = voList.get(i).getVerisonStatus(); //判断实体状态 - int statusInt = status.equals("正常") ? 1 : status.equals("停用") ? 0 : status.equals("废弃") ? 9 : 3; + //int statusInt = status.equals("正常") ? 1 : status.equals("停用") ? 0 : status.equals("废弃") ? 9 : 3; //判断版本状态 - int verisonStatusInt = verisonStatus.equals("当前") ? 1 : verisonStatus.equals("历史") ? 0 : 3; + //int verisonStatusInt = verisonStatus.equals("当前") ? 1 : verisonStatus.equals("历史") ? 0 : 3; //判断对应模块 if (modulexId != null && voList.get(i).getModuleId() != null && !voList.get(i).getModuleId().equals("")) { @@ -357,47 +393,64 @@ public class TablexController extends JeecgController { //判断英文名称 if (voList.get(i).getTableEnName() != null && !voList.get(i).getTableEnName().equals("") && !voList.get(i).getTableEnName().equals(modulex.getModuleEnName())) { //判断实体状态 - if (statusInt == 1 || statusInt == 0 || statusInt == 9) { + if (status.equals("1") || status.equals("0") || status.equals("9")) { //判断版本状态 - if (verisonStatusInt == 1 || verisonStatusInt == 0) { + if (verisonStatus.equals("1") || verisonStatus.equals("0")) { //判断版本号 if (voList.get(i).getVerison() != null && !voList.get(i).getVerison().equals("")) { - tablex.setModuleId(voList.get(i).getModuleId()); - tablex.setTableName(voList.get(i).getTableName()); - tablex.setTableEnName(voList.get(i).getTableEnName()); - tablex.setTableStructure(voList.get(i).getTableStructure()); - tablex.setStructuralDiagram(voList.get(i).getStructuralDiagram()); - tablex.setCreateBy(loginUser.getRealname()); - tablex.setStatus(statusInt); - tablex.setVerisonStatus(verisonStatusInt); - tablex.setVerison(Integer.valueOf(voList.get(i).getVerison())); - - //保存到真实表中 - tablexService.save(tablex); + tablex.setModuleId(voList.get(i).getModuleId()); + tablex.setTableName(voList.get(i).getTableName()); + tablex.setTableEnName(voList.get(i).getTableEnName()); + tablex.setTableStructure(voList.get(i).getTableStructure()); + tablex.setStructuralDiagram(voList.get(i).getStructuralDiagram()); + tablex.setCreateBy(loginUser.getRealname()); + tablex.setStatus(Integer.valueOf(voList.get(i).getStatus())); + tablex.setVerisonStatus(Integer.valueOf(voList.get(i).getVerisonStatus())); + tablex.setVerison(Integer.valueOf(voList.get(i).getVerison())); + + tablexList.add(tablex); + + //单条保存到真实表中 + tablexService.saveSingleBatch(tablexList,loginUser,message); } else { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("导入失败,第" + i + 1 + "行的版本号填写错误!"); } } else { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("导入失败,第" + i + 1 + "行的版本状态填写错误!"); } } else { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("导入失败,第" + i + 1 + "行的实体状态填写错误!"); } } else { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("导入失败,第" + i + 1 + "行的英文名称填写错误!"); } } else { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("导入失败,第" + i + 1 + "行的中文名称填写错误!"); } } else { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("导入失败,第" + i + 1 + "行的对应模块填写错误!"); } } } catch (Exception e) { - + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); return Result.error("文件导入失败"); } - return Result.OK("文件导入成功!"); + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + return Result.ok("文件导入成功!"); } } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/service/ITablexService.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/service/ITablexService.java index 6ebabc4..2d7685d 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/service/ITablexService.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/service/ITablexService.java @@ -1,7 +1,12 @@ package org.jeecg.modules.tablex.service; +import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.tablex.entity.Tablex; import com.baomidou.mybatisplus.extension.service.IService; +import org.jeecg.modules.tablex.vo.TablexVo; + +import java.util.List; +import java.util.Map; /** * @Description: 实体表 @@ -15,4 +20,5 @@ public interface ITablexService extends IService { void updateVersion(String tableId, int i); + void saveSingleBatch(List tablexList, LoginUser loginUser, Map message); } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/service/impl/TablexServiceImpl.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/service/impl/TablexServiceImpl.java index 4fabd87..7b5b0ff 100644 --- a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/service/impl/TablexServiceImpl.java +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/service/impl/TablexServiceImpl.java @@ -1,13 +1,19 @@ package org.jeecg.modules.tablex.service.impl; +import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.tablex.entity.Tablex; import org.jeecg.modules.tablex.mapper.TablexMapper; import org.jeecg.modules.tablex.service.ITablexService; +import org.jeecg.modules.tablex.vo.TablexVo; +import org.jeecg.modules.tablex.ws.WebSocketUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import java.util.List; +import java.util.Map; + /** * @Description: 实体表 * @Author: jeecg-boot @@ -20,6 +26,9 @@ public class TablexServiceImpl extends ServiceImpl impleme @Autowired private TablexMapper tablexMapper; + @Autowired + private WebSocketUtils webSocketUtils; + @Override public void updateSql(String tableId, String sql) { tablexMapper.updateSql(tableId,sql); @@ -29,4 +38,22 @@ public class TablexServiceImpl extends ServiceImpl impleme public void updateVersion(String tableId, int i) { tablexMapper.updateVersion(tableId,i); } + + @Override + public void saveSingleBatch(List tablexList, LoginUser loginUser, Map message) { + for (int i = 0; i < tablexList.size(); i++){ + try { + Thread.sleep(1000L); + message.put("uploaded", String.valueOf(i + 1)); + this.save(tablexList.get(i)); + webSocketUtils.sendMessage(loginUser.getId(), message); + } catch (InterruptedException e) { + message.put("isVisible", "false"); + webSocketUtils.sendMessage(loginUser.getId(), message); + log.error(e.getMessage(), e); + } + } + } + + } diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/ws/MyWebSocket.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/ws/MyWebSocket.java new file mode 100644 index 0000000..9b93afd --- /dev/null +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/ws/MyWebSocket.java @@ -0,0 +1,63 @@ +package org.jeecg.modules.tablex.ws; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import javax.websocket.*; +import javax.websocket.server.PathParam; +import javax.websocket.server.ServerEndpoint; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +@Slf4j +@Component +@ServerEndpoint(value = "/uploadProcess/{val}") +public class MyWebSocket { + + + /** + * 已经建立连接的对话,ConcurrentHashMap是一个线程安全的Map + */ + private static final Map sessionPool = + new ConcurrentHashMap<>(); + + + /** + * 连接建立成功触发 + * + * @param session 会话 + */ + @OnOpen + public void onOpen(Session session, EndpointConfig endpointConfig, + @PathParam("val") String key) { + // 将session进行保存 + sessionPool.put(key, session); + log.info("创建一个连接,当前连接的连接数量是:{}", sessionPool.size()); + + } + + /** + * 发送消息 + * + * @param info 信息 + */ + @OnMessage + public void onMessage(String info) { + log.info("接受到的消息是:{}", info); + } + + public Map getSessionPool() { + return sessionPool; + } + + /** + * 关闭连接时触发 + * + * @param session 会话 + */ + @OnClose + public void onClose(Session session, @PathParam("val") String key) { + sessionPool.remove(key); + log.info("关闭一个连接,当前剩余连接数为:{}", sessionPool.size()); + } +} diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/ws/WebSocketUtils.java b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/ws/WebSocketUtils.java new file mode 100644 index 0000000..4d36280 --- /dev/null +++ b/jeecg-boot/jeecg-boot-module-system/src/main/java/org/jeecg/modules/tablex/ws/WebSocketUtils.java @@ -0,0 +1,53 @@ +package org.jeecg.modules.tablex.ws; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.websocket.Session; +import java.util.Map; + +@Slf4j +@Component +public class WebSocketUtils { + @Autowired + MyWebSocket webSocket; + + + private static Map sessionPool; + + + @PostConstruct + private void init() { + sessionPool = webSocket.getSessionPool(); + } + + + private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + + + public void sendMessage(String key, Map message) { + Session session = sessionPool.get(key); + try { + session.getBasicRemote() + .sendText(OBJECT_MAPPER + .writeValueAsString(message)); + } catch (Exception e) { + log.error(e.getMessage()); + } + } + + public void sendAllMessage(Map message) { + sessionPool.values().forEach(session -> { + try { + session.getBasicRemote() + .sendText(OBJECT_MAPPER + .writeValueAsString(message)); + } catch (Exception e) { + log.error(e.getMessage()); + } + }); + } +}