diff --git a/SynologyDrive/4.数据库变更记录/解鋆宇sql变更记录.sql b/SynologyDrive/4.数据库变更记录/解鋆宇sql变更记录.sql new file mode 100644 index 000000000..5729c7675 --- /dev/null +++ b/SynologyDrive/4.数据库变更记录/解鋆宇sql变更记录.sql @@ -0,0 +1,4 @@ +# 2022-5-24 +#标签内容增加排序字段 +ALTER TABLE `sys_dict` +ADD COLUMN `order_num` int(11) NOT NULL COMMENT '排序'; diff --git a/SynologyDrive/4.数据库变更记录/谢鋆宇sql变更记录.sql b/SynologyDrive/4.数据库变更记录/谢鋆宇sql变更记录.sql deleted file mode 100644 index e69de29bb..000000000 diff --git a/SynologyDrive/5.模板/1.模板说明.txt b/SynologyDrive/5.模板/1.模板说明.txt new file mode 100644 index 000000000..fa29afa71 --- /dev/null +++ b/SynologyDrive/5.模板/1.模板说明.txt @@ -0,0 +1 @@ +ComplianceReportTemplate.docx : 法规清单 - 导出报告模板 diff --git a/SynologyDrive/5.模板/ComplianceReportTemplate.docx b/SynologyDrive/5.模板/ComplianceReportTemplate.docx new file mode 100644 index 000000000..bb2ddeb81 Binary files /dev/null and b/SynologyDrive/5.模板/ComplianceReportTemplate.docx differ diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java index 3a67cbe3e..830910af5 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysCategoryController.java @@ -52,7 +52,7 @@ public class SysCategoryController { private ISysCategoryService sysCategoryService; /** - * 分页列表查询 + * 分页列表查询 * @param sysCategory * @param pageNo * @param pageSize @@ -62,9 +62,9 @@ public class SysCategoryController { // @RequiresPermissions("sys:category:list") @GetMapping(value = "/rootList") public Result> queryPageList(SysCategory sysCategory, - @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, - @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, - HttpServletRequest req) { + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { if(oConvertUtils.isEmpty(sysCategory.getPid())){ sysCategory.setPid("0"); } @@ -84,7 +84,7 @@ public class SysCategoryController { return result; } -// @RequiresPermissions("sys:category:list") + // @RequiresPermissions("sys:category:list") @GetMapping(value = "/childList") public Result> queryPageList(SysCategory sysCategory,HttpServletRequest req) { Result> result = new Result>(); @@ -95,11 +95,11 @@ public class SysCategoryController { return result; } - /**标签内容-树形结构列表 - * - * @param params - * @return - */ + /**标签内容-树形结构列表 + * + * @param params + * @return + */ @AutoLog(value = "标签内容-树形结构列表") @ApiOperation(value="标签内容-树形结构列表", notes="标签内容-树形结构列表") @PostMapping(value = "/queryPageList") @@ -110,7 +110,7 @@ public class SysCategoryController { } /** - * 添加 + * 添加 * @param sysCategory * @return */ @@ -118,19 +118,14 @@ public class SysCategoryController { @PostMapping(value = "/add") public Result add(@RequestBody SysCategory sysCategory) { Result result = new Result(); - try { - sysCategory.setName(sysCategory.getName().replace(" ","")); - sysCategoryService.addSysCategory(sysCategory); - result.success("添加成功!"); - } catch (Exception e) { - log.error(e.getMessage(),e); - result.error500("操作失败"); - } + sysCategory.setName(sysCategory.getName().replace(" ","")); + sysCategoryService.addSysCategory(sysCategory); + result.success("添加成功!"); return result; } /** - * 编辑 + * 编辑 * @param sysCategory * @return */ @@ -150,7 +145,7 @@ public class SysCategoryController { } /** - * 通过id删除 + * 通过id删除 * @param id * @return */ @@ -169,11 +164,11 @@ public class SysCategoryController { return result; } - /** - * 逻辑删除 - * @param id - * @return - */ + /** + * 逻辑删除 + * @param id + * @return + */ // @RequiresPermissions("sys:category:list") @GetMapping(value = "/logicDelete") public Result logicDelete(@RequestParam(name="id",required=true) String id) { @@ -235,7 +230,7 @@ public class SysCategoryController { } /** - * 通过id查询 + * 通过id查询 * @param id * @return */ @@ -253,126 +248,126 @@ public class SysCategoryController { return result; } - /** - * 导出excel - * - * @param request - */ - @RequiresPermissions("sys:category:export") - @RequestMapping(value = "/exportXls") - public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) { - // Step.1 组装查询条件查询数据 - QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, request.getParameterMap()); - List pageList = sysCategoryService.list(queryWrapper); - // Step.2 AutoPoi 导出Excel - ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); - // 过滤选中数据 - String selections = request.getParameter("selections"); - if(oConvertUtils.isEmpty(selections)) { - mv.addObject(NormalExcelConstants.DATA_LIST, pageList); - }else { - List selectionList = Arrays.asList(selections.split(",")); - List exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); - mv.addObject(NormalExcelConstants.DATA_LIST, exportList); - } - //导出文件名称 - mv.addObject(NormalExcelConstants.FILE_NAME, "分类字典列表"); - mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); - LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("分类字典列表数据", "导出人:"+user.getRealname(), "导出信息")); - return mv; - } + /** + * 导出excel + * + * @param request + */ + @RequiresPermissions("sys:category:export") + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, SysCategory sysCategory) { + // Step.1 组装查询条件查询数据 + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(sysCategory, request.getParameterMap()); + List pageList = sysCategoryService.list(queryWrapper); + // Step.2 AutoPoi 导出Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + // 过滤选中数据 + String selections = request.getParameter("selections"); + if(oConvertUtils.isEmpty(selections)) { + mv.addObject(NormalExcelConstants.DATA_LIST, pageList); + }else { + List selectionList = Arrays.asList(selections.split(",")); + List exportList = pageList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); + mv.addObject(NormalExcelConstants.DATA_LIST, exportList); + } + //导出文件名称 + mv.addObject(NormalExcelConstants.FILE_NAME, "分类字典列表"); + mv.addObject(NormalExcelConstants.CLASS, SysCategory.class); + LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("分类字典列表数据", "导出人:"+user.getRealname(), "导出信息")); + return mv; + } - /** - * 通过excel导入数据 - * - * @param request - * @param response - * @return - */ - @RequiresPermissions("sys:category:import") - @RequestMapping(value = "/importExcel", method = RequestMethod.POST) - public Result importExcel(HttpServletRequest request, HttpServletResponse response) { - MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; - Map fileMap = multipartRequest.getFileMap(); - for (Map.Entry entity : fileMap.entrySet()) { - MultipartFile file = entity.getValue();// 获取上传文件对象 - ImportParams params = new ImportParams(); - params.setTitleRows(2); - params.setHeadRows(1); - params.setNeedSave(true); - try { - List listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params); - //按照编码长度排序 - Collections.sort(listSysCategorys); - log.info("排序后的list====>",listSysCategorys); - for (SysCategory sysCategoryExcel : listSysCategorys) { - String code = sysCategoryExcel.getCode(); - if(code.length()>3){ - String pCode = sysCategoryExcel.getCode().substring(0,code.length()-3); - log.info("pCode====>",pCode); - String pId=sysCategoryService.queryIdByCode(pCode); - log.info("pId====>",pId); - if(StringUtils.isNotBlank(pId)){ - sysCategoryExcel.setPid(pId); - } - }else{ - sysCategoryExcel.setPid("0"); - } - sysCategoryService.save(sysCategoryExcel); - } - return Result.OK("文件导入成功!数据行数:" + listSysCategorys.size()); - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("文件导入失败:"+e.getMessage()); - } finally { - try { - file.getInputStream().close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - } - return Result.error("文件导入失败!"); - } + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequiresPermissions("sys:category:import") + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map fileMap = multipartRequest.getFileMap(); + for (Map.Entry entity : fileMap.entrySet()) { + MultipartFile file = entity.getValue();// 获取上传文件对象 + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + try { + List listSysCategorys = ExcelImportUtil.importExcel(file.getInputStream(), SysCategory.class, params); + //按照编码长度排序 + Collections.sort(listSysCategorys); + log.info("排序后的list====>",listSysCategorys); + for (SysCategory sysCategoryExcel : listSysCategorys) { + String code = sysCategoryExcel.getCode(); + if(code.length()>3){ + String pCode = sysCategoryExcel.getCode().substring(0,code.length()-3); + log.info("pCode====>",pCode); + String pId=sysCategoryService.queryIdByCode(pCode); + log.info("pId====>",pId); + if(StringUtils.isNotBlank(pId)){ + sysCategoryExcel.setPid(pId); + } + }else{ + sysCategoryExcel.setPid("0"); + } + sysCategoryService.save(sysCategoryExcel); + } + return Result.OK("文件导入成功!数据行数:" + listSysCategorys.size()); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("文件导入失败:"+e.getMessage()); + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("文件导入失败!"); + } - /** - * 加载单个数据 用于回显 - */ - @RequiresPermissions("sys:category:list") - @RequestMapping(value = "/loadOne", method = RequestMethod.GET) - public Result loadOne(@RequestParam(name="field") String field,@RequestParam(name="val") String val) { - Result result = new Result(); - try { - - QueryWrapper query = new QueryWrapper(); - query.eq(field, val); - List ls = this.sysCategoryService.list(query); - if(ls==null || ls.size()==0) { - result.setMessage("查询无果"); - result.setSuccess(false); - }else if(ls.size()>1) { - result.setMessage("查询数据异常,["+field+"]存在多个值:"+val); - result.setSuccess(false); - }else { - result.setSuccess(true); - result.setResult(ls.get(0)); - } - } catch (Exception e) { - e.printStackTrace(); - result.setMessage(e.getMessage()); - result.setSuccess(false); - } - return result; - } - - /** - * 加载节点的子数据 - */ + /** + * 加载单个数据 用于回显 + */ @RequiresPermissions("sys:category:list") - @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET) + @RequestMapping(value = "/loadOne", method = RequestMethod.GET) + public Result loadOne(@RequestParam(name="field") String field,@RequestParam(name="val") String val) { + Result result = new Result(); + try { + + QueryWrapper query = new QueryWrapper(); + query.eq(field, val); + List ls = this.sysCategoryService.list(query); + if(ls==null || ls.size()==0) { + result.setMessage("查询无果"); + result.setSuccess(false); + }else if(ls.size()>1) { + result.setMessage("查询数据异常,["+field+"]存在多个值:"+val); + result.setSuccess(false); + }else { + result.setSuccess(true); + result.setResult(ls.get(0)); + } + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } + + /** + * 加载节点的子数据 + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadTreeChildren", method = RequestMethod.GET) public Result> loadTreeChildren(@RequestParam(name="pid") String pid) { Result> result = new Result>(); try { @@ -387,51 +382,51 @@ public class SysCategoryController { return result; } - /** - * 加载一级节点/如果是同步 则所有数据 - */ + /** + * 加载一级节点/如果是同步 则所有数据 + */ @RequiresPermissions("sys:category:list") - @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) - public Result> loadTreeRoot(@RequestParam(name="async") Boolean async,@RequestParam(name="pcode") String pcode) { - Result> result = new Result>(); - try { - List ls = this.sysCategoryService.queryListByCode(pcode); - if(!async) { - loadAllCategoryChildren(ls); - } - result.setResult(ls); - result.setSuccess(true); - } catch (Exception e) { - e.printStackTrace(); - result.setMessage(e.getMessage()); - result.setSuccess(false); - } - return result; - } + @RequestMapping(value = "/loadTreeRoot", method = RequestMethod.GET) + public Result> loadTreeRoot(@RequestParam(name="async") Boolean async,@RequestParam(name="pcode") String pcode) { + Result> result = new Result>(); + try { + List ls = this.sysCategoryService.queryListByCode(pcode); + if(!async) { + loadAllCategoryChildren(ls); + } + result.setResult(ls); + result.setSuccess(true); + } catch (Exception e) { + e.printStackTrace(); + result.setMessage(e.getMessage()); + result.setSuccess(false); + } + return result; + } - /** - * 递归求子节点 同步加载用到 - */ + /** + * 递归求子节点 同步加载用到 + */ @RequiresPermissions("sys:category:list") - private void loadAllCategoryChildren(List ls) { - for (TreeSelectModel tsm : ls) { + private void loadAllCategoryChildren(List ls) { + for (TreeSelectModel tsm : ls) { List temp = this.sysCategoryService.queryListByPid(tsm.getKey()); if(temp!=null && temp.size()>0) { tsm.setChildren(temp); loadAllCategoryChildren(temp); } } - } + } - /** - * 校验编码 - * @param pid - * @param code - * @return - */ - @RequiresPermissions("sys:category:list") - @GetMapping(value = "/checkCode") - public Result checkCode(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="code",required = false) String code) { + /** + * 校验编码 + * @param pid + * @param code + * @return + */ + @RequiresPermissions("sys:category:list") + @GetMapping(value = "/checkCode") + public Result checkCode(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="code",required = false) String code) { if(oConvertUtils.isEmpty(code)){ return Result.error("错误,类型编码为空!"); } @@ -445,28 +440,28 @@ public class SysCategoryController { return Result.error("编码不符合规范,须以\""+parent.getCode()+"\"开头!"); } - } + } - /** - * 分类字典树控件 加载节点 - * @param pid - * @param pcode - * @param condition - * @return - */ - @RequiresPermissions("sys:category:list") - @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) - public Result> loadDict(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="pcode",required = false) String pcode, @RequestParam(name="condition",required = false) String condition) { - Result> result = new Result>(); - //pid如果传值了 就忽略pcode的作用 - if(oConvertUtils.isEmpty(pid)){ - if(oConvertUtils.isEmpty(pcode)){ + /** + * 分类字典树控件 加载节点 + * @param pid + * @param pcode + * @param condition + * @return + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadTreeData", method = RequestMethod.GET) + public Result> loadDict(@RequestParam(name="pid",required = false) String pid,@RequestParam(name="pcode",required = false) String pcode, @RequestParam(name="condition",required = false) String condition) { + Result> result = new Result>(); + //pid如果传值了 就忽略pcode的作用 + if(oConvertUtils.isEmpty(pid)){ + if(oConvertUtils.isEmpty(pcode)){ result.setSuccess(false); result.setMessage("加载分类字典树参数有误.[null]!"); return result; }else{ - if(ISysCategoryService.ROOT_PID_VALUE.equals(pcode)){ + if(ISysCategoryService.ROOT_PID_VALUE.equals(pcode)){ pid = ISysCategoryService.ROOT_PID_VALUE; }else{ pid = this.sysCategoryService.queryIdByCode(pcode); @@ -477,102 +472,102 @@ public class SysCategoryController { return result; } } - } - Map query = null; - if(oConvertUtils.isNotEmpty(condition)) { - query = JSON.parseObject(condition, Map.class); - } - List ls = sysCategoryService.queryListByPid(pid,query); - result.setSuccess(true); - result.setResult(ls); - return result; - } + } + Map query = null; + if(oConvertUtils.isNotEmpty(condition)) { + query = JSON.parseObject(condition, Map.class); + } + List ls = sysCategoryService.queryListByPid(pid,query); + result.setSuccess(true); + result.setResult(ls); + return result; + } - /** - * 分类字典控件数据回显[表单页面] - * - * @param ids - * @return - */ - @RequiresPermissions("sys:category:list") - @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) - public Result> loadDictItem(@RequestParam(name = "ids") String ids) { - Result> result = new Result<>(); - // 非空判断 - if (StringUtils.isBlank(ids)) { - result.setSuccess(false); - result.setMessage("ids 不能为空"); - return result; - } - String[] idArray = ids.split(","); - LambdaQueryWrapper query = new LambdaQueryWrapper<>(); - query.in(SysCategory::getId, Arrays.asList(idArray)); - // 查询数据 - List list = this.sysCategoryService.list(query); - // 取出name并返回 - List textList = list.stream().map(SysCategory::getName).collect(Collectors.toList()); - result.setSuccess(true); - result.setResult(textList); - return result; - } + /** + * 分类字典控件数据回显[表单页面] + * + * @param ids + * @return + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadDictItem", method = RequestMethod.GET) + public Result> loadDictItem(@RequestParam(name = "ids") String ids) { + Result> result = new Result<>(); + // 非空判断 + if (StringUtils.isBlank(ids)) { + result.setSuccess(false); + result.setMessage("ids 不能为空"); + return result; + } + String[] idArray = ids.split(","); + LambdaQueryWrapper query = new LambdaQueryWrapper<>(); + query.in(SysCategory::getId, Arrays.asList(idArray)); + // 查询数据 + List list = this.sysCategoryService.list(query); + // 取出name并返回 + List textList = list.stream().map(SysCategory::getName).collect(Collectors.toList()); + result.setSuccess(true); + result.setResult(textList); + return result; + } - /** - * [列表页面]加载分类字典数据 用于值的替换 - * @param code - * @return - */ - @RequiresPermissions("sys:category:list") - @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) - public Result> loadAllData(@RequestParam(name="code",required = true) String code) { - Result> result = new Result>(); - LambdaQueryWrapper query = new LambdaQueryWrapper(); - if(oConvertUtils.isNotEmpty(code) && !"0".equals(code)){ - query.likeRight(SysCategory::getCode,code); - } - List list = this.sysCategoryService.list(query); - if(list==null || list.size()==0) { - result.setMessage("无数据,参数有误.[code]"); - result.setSuccess(false); - return result; - } - List rdList = new ArrayList(); - for (SysCategory c : list) { - rdList.add(new DictModel(c.getId(),c.getName())); - } - result.setSuccess(true); - result.setResult(rdList); - return result; - } + /** + * [列表页面]加载分类字典数据 用于值的替换 + * @param code + * @return + */ + @RequiresPermissions("sys:category:list") + @RequestMapping(value = "/loadAllData", method = RequestMethod.GET) + public Result> loadAllData(@RequestParam(name="code",required = true) String code) { + Result> result = new Result>(); + LambdaQueryWrapper query = new LambdaQueryWrapper(); + if(oConvertUtils.isNotEmpty(code) && !"0".equals(code)){ + query.likeRight(SysCategory::getCode,code); + } + List list = this.sysCategoryService.list(query); + if(list==null || list.size()==0) { + result.setMessage("无数据,参数有误.[code]"); + result.setSuccess(false); + return result; + } + List rdList = new ArrayList(); + for (SysCategory c : list) { + rdList.add(new DictModel(c.getId(),c.getName())); + } + result.setSuccess(true); + result.setResult(rdList); + return result; + } - /** - * 根据父级id批量查询子节点 - * @param parentIds - * @return - */ - @RequiresPermissions("sys:category:list") - @GetMapping("/getChildListBatch") - public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { - try { - QueryWrapper queryWrapper = new QueryWrapper<>(); - List parentIdList = Arrays.asList(parentIds.split(",")); - queryWrapper.in("pid", parentIdList); - List list = sysCategoryService.list(queryWrapper); - IPage pageList = new Page<>(1, 10, list.size()); - pageList.setRecords(list); - return Result.OK(pageList); - } catch (Exception e) { - log.error(e.getMessage(), e); - return Result.error("批量查询子节点失败:" + e.getMessage()); - } - } + /** + * 根据父级id批量查询子节点 + * @param parentIds + * @return + */ + @RequiresPermissions("sys:category:list") + @GetMapping("/getChildListBatch") + public Result getChildListBatch(@RequestParam("parentIds") String parentIds) { + try { + QueryWrapper queryWrapper = new QueryWrapper<>(); + List parentIdList = Arrays.asList(parentIds.split(",")); + queryWrapper.in("pid", parentIdList); + List list = sysCategoryService.list(queryWrapper); + IPage pageList = new Page<>(1, 10, list.size()); + pageList.setRecords(list); + return Result.OK(pageList); + } catch (Exception e) { + log.error(e.getMessage(), e); + return Result.error("批量查询子节点失败:" + e.getMessage()); + } + } /** * 只查询技术领域的树形数据字典 * @return */ @GetMapping("/getSysCategoryTree") - public Result getSysCategoryTree() { - return Result.OK(sysCategoryService.getSysCategoryTree()); - } + public Result getSysCategoryTree() { + return Result.OK(sysCategoryService.getSysCategoryTree()); + } } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java index 5b3375a33..064aa382c 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/controller/SysDictController.java @@ -387,6 +387,8 @@ public class SysDictController { @RequiresPermissions("dict:add") public Result add(@RequestBody SysDict sysDict) { Result result = new Result(); + + sysDictService.setAddOrdderNum(sysDict); //校验--不能重复数据 QueryWrapper queryWrapper = new QueryWrapper<>(); //查询同一模块下,同名数据 @@ -434,6 +436,7 @@ public class SysDictController { @RequiresPermissions("dict:edit") public Result edit(@RequestBody SysDict sysDict) { Result result = new Result(); + sysDictService.setEditOrdderNum(sysDict); SysDict sysdict = sysDictService.getById(sysDict.getId()); if (sysdict == null) { result.error500("未找到对应实体"); diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDict.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDict.java index 798fc8cff..09cd55f04 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDict.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/entity/SysDict.java @@ -125,4 +125,7 @@ public class SysDict implements Serializable { @Dict(dictTable = "sys_dict_item", dicText = "en_name", dicCode ="en_name") @ApiModelProperty(value = "属性类型英文名") private java.lang.String attributeTypeEnName; + + /**排序*/ + private java.lang.Integer orderNum; } \ No newline at end of file diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictMapper.xml b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictMapper.xml index 7d9a4f9e2..6dd95fb32 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictMapper.xml +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/mapper/xml/SysDictMapper.xml @@ -135,7 +135,7 @@ diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java index c53063576..3deed8b29 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/ISysDictService.java @@ -169,4 +169,8 @@ public interface ISysDictService extends IService { String queryDictItemByName(String code, String itemName, String cut); String queryDictItemByValue(String code, String itemName, String cut); + + void setAddOrdderNum(SysDict sysDict); + + void setEditOrdderNum(SysDict sysDict); } diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java index c14d6b8b1..5868d597d 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/system/service/impl/SysCategoryServiceImpl.java @@ -10,10 +10,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.common.constant.CommonConstant; -import com.jero.common.constant.FillRuleConstant; import com.jero.common.constant.enums.CutEnum; import com.jero.common.exception.JeroBootException; -import com.jero.common.util.FillRuleUtil; import com.jero.common.util.oConvertUtils; import com.jero.modules.system.entity.SysCategory; import com.jero.modules.system.entity.SysCategoryTreeVO; @@ -64,16 +62,16 @@ public class SysCategoryServiceImpl extends ServiceImpl impl return dictItemValue; } + + @Override + public void setAddOrdderNum(SysDict sysDict) { + Integer inputOrderNum = sysDict.getOrderNum(); + if(inputOrderNum != null) { + //查询展示顺序相同的 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0) + .orderByAsc("order_num"); + queryWrapper.eq("order_num", inputOrderNum); + Integer orderNumCount = sysDictMapper.selectCount(queryWrapper); + if (orderNumCount > 0) {//有重复展示顺序的,后面的号全+1 + //设置排序 + QueryWrapper orderNumQueryWrapper = new QueryWrapper<>(); + orderNumQueryWrapper.ge("order_num", inputOrderNum) + .eq("del_flag", CommonConstant.DEL_FLAG_0) + .orderByAsc("order_num"); + List geOrderNumList = list(orderNumQueryWrapper); + + //判断相邻的序号,去掉不邻的 + for (int i = 0; i < geOrderNumList.size(); i++) { + if (geOrderNumList.size() == 1) { + break; + } else if (geOrderNumList.get(i + 1).getOrderNum() - geOrderNumList.get(i).getOrderNum() > 1) { + int deleteStart = geOrderNumList.get(i + 1).getOrderNum(); + geOrderNumList = geOrderNumList.stream().filter(e -> e.getOrderNum() < deleteStart).collect(Collectors.toList()); + break; + } + } + + geOrderNumList.stream().forEach(e -> e.setOrderNum(e.getOrderNum() + 1)); + saveOrUpdateBatch(geOrderNumList); + } + } + } + + @Override + public void setEditOrdderNum(SysDict sysDict) { + Integer inputOrderNum = sysDict.getOrderNum(); + if(inputOrderNum != null) { + //查询展示顺序相同的 + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("del_flag", CommonConstant.DEL_FLAG_0) + .orderByAsc("order_num"); + Integer orderNumData = list(queryWrapper).stream().filter(e -> e.getId().equals(sysDict.getId())) + .map(e -> e.getOrderNum()).collect(Collectors.toList()).get(0); + queryWrapper.eq("order_num", inputOrderNum); + Integer orderNumCount = sysDictMapper.selectCount(queryWrapper); + if (orderNumCount > 0 && !orderNumData.equals(inputOrderNum)) {//有重复展示顺序的,后面的号全+1 + //设置排序 + QueryWrapper orderNumQueryWrapper = new QueryWrapper<>(); + orderNumQueryWrapper.ge("order_num", inputOrderNum) + .eq("del_flag", CommonConstant.DEL_FLAG_0) + .orderByAsc("order_num"); + List geOrderNumList = list(orderNumQueryWrapper); + + //判断相邻的序号,去掉不邻的 + for (int i = 0; i < geOrderNumList.size(); i++) { + if (geOrderNumList.size() == 1) { + break; + } else if (geOrderNumList.get(i + 1).getOrderNum() - geOrderNumList.get(i).getOrderNum() > 1) { + int deleteStart = geOrderNumList.get(i + 1).getOrderNum(); + geOrderNumList = geOrderNumList.stream().filter(e -> e.getOrderNum() < deleteStart).collect(Collectors.toList()); + break; + } + } + + geOrderNumList.stream().forEach(e -> e.setOrderNum(e.getOrderNum() + 1)); + saveOrUpdateBatch(geOrderNumList); + } + } + } } diff --git a/jero-boot/jero-boot-modules/pom.xml b/jero-boot/jero-boot-modules/pom.xml index 01f3ad0e8..5e22036fc 100644 --- a/jero-boot/jero-boot-modules/pom.xml +++ b/jero-boot/jero-boot-modules/pom.xml @@ -166,6 +166,41 @@ fastjson 1.2.62 + + + + + org.docx4j + docx4j + 6.0.1 + + + + org.springframework + spring + + + org.slf4j + slf4j-log4j12 + + + + + org.docx4j + docx4j-export-fo + 6.0.1 + + + + org.springframework + spring + + + org.slf4j + slf4j-log4j12 + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java index 94b450587..f62a5ea3d 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java @@ -38,6 +38,8 @@ import com.jero.modules.document.utils.ReadWordUtil; import com.jero.modules.document.vo.QueryConditionVO; import com.jero.modules.domain.service.DomainUserRelService; import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.home.entity.HomeDocumentDynamicEO; +import com.jero.modules.home.service.IHomeDocumentDynamicEOService; import com.jero.modules.log.entity.BussLogEO; import com.jero.modules.log.service.IBussLogEOService; import com.jero.modules.message.websocket.WebSocket; @@ -163,6 +165,8 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl userIdList = domainUserRelService.queryDomainUserRelInfo(mapTemp); + String title = (String) map.get("title"); + String serialNumber = (String) map.get("serial_number"); + String href = "" + serialNumber + ""; + //文档动态, 文档库中新增了标准XXXX homeDocumentDynamicEOService + HomeDocumentDynamicEO homeDocumentDynamicEO = new HomeDocumentDynamicEO(); + homeDocumentDynamicEO.setMsgContent("文档库中新增了标准" + href); + homeDocumentDynamicEOService.save(homeDocumentDynamicEO); + + //给发送消息的用户 if(userIdList.size() == 0){ return; @@ -1967,10 +1982,10 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl sysUsers = sysUserService.listByIds(userIdList); List thirdIdList = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); if (userIdList.size() != 0) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); - String title = (String) map.get("title"); - String serialNumber = (String) map.get("serial_number"); - String href = backUrl + "/docManage/library/detail?id=" + idTemp; + + String hrefTemp = backUrl + "/docManage/library/detail?id=" + idTemp; String content = sysUser.getUsername() + " add " + serialNumber + ",Please pay attention to check."; String contentInfo = sysUser.getUsername() + " add " + href + ",Please pay attention to check."; //封装消息的实体类 @@ -1979,11 +1994,12 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl { + @Autowired + private IHomeDocumentDynamicEOService homeDocumentDynamicEOService; + + /** + * 分页列表查询 + * + * @param homeDocumentDynamicEO + * @param pageNo + * @param pageSize + * @param req + * @return + */ + @AutoLog(value = "文档动态-分页列表查询") + @ApiOperation(value="文档动态-分页列表查询", notes="文档动态-分页列表查询") + @GetMapping(value = "/page") + public Result queryPageList(HomeDocumentDynamicEO homeDocumentDynamicEO, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize, + HttpServletRequest req) { + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(homeDocumentDynamicEO, req.getParameterMap()); + Page page = new Page(pageNo, pageSize); + IPage pageList = homeDocumentDynamicEOService.page(page, queryWrapper); + return Result.OK(pageList); + } + + /** + * 列表查询 + * + * @return + */ + @AutoLog(value = "文档动态-列表查询") + @ApiOperation(value="文档动态-列表查询", notes="文档动态-列表查询") + @GetMapping(value = "/list") + public Result> queryList() { + List list = homeDocumentDynamicEOService.queryList(); + return Result.OK(list); + } + + /** + * 添加 + * + * @param homeDocumentDynamicEO + * @return + */ + @AutoLog(value = "文档动态-添加") + @ApiOperation(value="文档动态-添加", notes="文档动态-添加") + @PostMapping(value = "/add") + public Result add(@Validated @RequestBody HomeDocumentDynamicEO homeDocumentDynamicEO) { + homeDocumentDynamicEOService.add(homeDocumentDynamicEO); + return Result.OK("添加成功!"); + } + + /** + * 编辑 + * + * @param homeDocumentDynamicEO + * @return + */ + @AutoLog(value = "文档动态-编辑") + @ApiOperation(value="文档动态-编辑", notes="文档动态-编辑") + @PutMapping(value = "/edit") + public Result edit(@Validated @RequestBody HomeDocumentDynamicEO homeDocumentDynamicEO) { + homeDocumentDynamicEOService.editById(homeDocumentDynamicEO); + 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) { + homeDocumentDynamicEOService.deleteById(id); + return Result.OK("删除成功!"); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @AutoLog(value = "文档动态-批量删除") + @ApiOperation(value="文档动态-批量删除", notes="文档动态-批量删除") + @GetMapping(value = "/deleteBatch") + public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { + this.homeDocumentDynamicEOService.deleteByIds(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) { + HomeDocumentDynamicEO homeDocumentDynamicEO = homeDocumentDynamicEOService.queryById(id); + if(homeDocumentDynamicEO==null) { + return Result.error("未找到对应数据"); + } + return Result.OK(homeDocumentDynamicEO); + } + + /** + * 导出excel + * + * @param request + * @param homeDocumentDynamicEO + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request, HomeDocumentDynamicEO homeDocumentDynamicEO) { + return super.exportXls(request, homeDocumentDynamicEO, HomeDocumentDynamicEO.class, "文档动态"); + } + + /** + * 通过excel导入数据 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result importExcel(HttpServletRequest request, HttpServletResponse response) { + return super.importExcel(request, response, HomeDocumentDynamicEO.class); + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/entity/HomeDocumentDynamicEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/entity/HomeDocumentDynamicEO.java new file mode 100644 index 000000000..077f40a52 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/entity/HomeDocumentDynamicEO.java @@ -0,0 +1,69 @@ +package com.jero.modules.home.entity; + +import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.math.BigDecimal; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import com.fasterxml.jackson.annotation.JsonFormat; +import org.springframework.format.annotation.DateTimeFormat; +import org.jeecgframework.poi.excel.annotation.Excel; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + + +/** + * @Description: 文档动态 + * @Author: jero-boot + * @Date: 2022-05-24 + * @Version: V1.0 + */ +@Data +@TableName("home_document_dynamic") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="home_document_dynamic对象", description="文档动态") +public class HomeDocumentDynamicEO implements Serializable { + private static final long serialVersionUID = 1L; + + /**主键*/ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "主键") + private java.lang.String id; + + /**创建人*/ + @ApiModelProperty(value = "创建人") + private java.lang.String createBy; + + /**创建日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") + private java.util.Date createTime; + + /**更新人*/ + @ApiModelProperty(value = "更新人") + private java.lang.String updateBy; + + /**更新日期*/ + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "更新日期") + private java.util.Date updateTime; + + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private java.lang.String sysOrgCode; + + /**消息内容*/ + @Excel(name = "消息内容", width = 15) + @ApiModelProperty(value = "消息内容") + private java.lang.String msgContent; + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/mapper/HomeDocumentDynamicEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/mapper/HomeDocumentDynamicEOMapper.java new file mode 100644 index 000000000..fb77860f9 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/mapper/HomeDocumentDynamicEOMapper.java @@ -0,0 +1,17 @@ +package com.jero.modules.home.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; +import com.jero.modules.home.entity.HomeDocumentDynamicEO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * @Description: 文档动态 + * @Author: jero-boot + * @Date: 2022-05-24 + * @Version: V1.0 + */ +public interface HomeDocumentDynamicEOMapper extends BaseMapper { + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/mapper/xml/HomeDocumentDynamicEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/mapper/xml/HomeDocumentDynamicEOMapper.xml new file mode 100644 index 000000000..91d88a77e --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/mapper/xml/HomeDocumentDynamicEOMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/service/IHomeDocumentDynamicEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/service/IHomeDocumentDynamicEOService.java new file mode 100644 index 000000000..020087bfc --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/service/IHomeDocumentDynamicEOService.java @@ -0,0 +1,61 @@ +package com.jero.modules.home.service; + +import com.jero.modules.home.entity.HomeDocumentDynamicEO; +import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + +/** + * @Description: 文档动态 + * @Author: jero-boot + * @Date: 2022-05-24 + * @Version: V1.0 + */ +public interface IHomeDocumentDynamicEOService extends IService { + + /** + * 保存 + * + * @param homeDocumentDynamicEO + * @return + */ + void add(HomeDocumentDynamicEO homeDocumentDynamicEO); + + /** + * 更新 + * + * @param homeDocumentDynamicEO + * @return + */ + void editById(HomeDocumentDynamicEO homeDocumentDynamicEO); + + /** + * 通过id删除 + * + * @param id + * @return + */ + void deleteById(String id); + + /** + * 批量删除 + * + * @param ids + * @return + */ + void deleteByIds(List ids); + + /** + * 通过id查询 + * + * @param id + * @return + */ + HomeDocumentDynamicEO queryById(String id); + + /** + * 列表查询 + * + * @return + */ + List queryList(); +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/service/impl/HomeDocumentDynamicEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/service/impl/HomeDocumentDynamicEOServiceImpl.java new file mode 100644 index 000000000..f0c60149b --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/home/service/impl/HomeDocumentDynamicEOServiceImpl.java @@ -0,0 +1,89 @@ +package com.jero.modules.home.service.impl; + +import com.jero.modules.home.entity.HomeDocumentDynamicEO; +import com.jero.modules.home.mapper.HomeDocumentDynamicEOMapper; +import com.jero.modules.home.service.IHomeDocumentDynamicEOService; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Date; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +/** + * @Description: 文档动态 + * @Author: jero-boot + * @Date: 2022-05-24 + * @Version: V1.0 + */ +@Service +public class HomeDocumentDynamicEOServiceImpl extends ServiceImpl implements IHomeDocumentDynamicEOService { + + /** + * 保存 + * + * @param homeDocumentDynamicEO + * @return + */ + @Override + public void add(HomeDocumentDynamicEO homeDocumentDynamicEO) { + Date now = new Date(); + homeDocumentDynamicEO.setCreateTime(now); + homeDocumentDynamicEO.setUpdateTime(now); + save(homeDocumentDynamicEO); + } + + /** + * 更新 + * + * @param homeDocumentDynamicEO + * @return + */ + @Override + public void editById(HomeDocumentDynamicEO homeDocumentDynamicEO) { + Date now = new Date(); + homeDocumentDynamicEO.setUpdateTime(now); + saveOrUpdate(homeDocumentDynamicEO); + } + + /** + * 通过id删除 + * + * @param id + * @return + */ + @Override + public void deleteById(String id) { + removeById(id); + } + + /** + * 批量删除 + * + * @param ids + * @return + */ + @Override + public void deleteByIds(List ids) { + removeByIds(ids); + } + + /** + * 通过id查询 + * + * @param id + * @return + */ + @Override + public HomeDocumentDynamicEO queryById(String id) { + return getById(id); + } + + /** + * 列表查询 + * + * @return + */ + @Override + public List queryList() { + return list(); + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectCertificationDirectoryEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectCertificationDirectoryEOController.java index ef8da523f..72be05f10 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectCertificationDirectoryEOController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectCertificationDirectoryEOController.java @@ -159,4 +159,14 @@ public class ProjectCertificationDirectoryEOController extends JeroController queryUserPremissionByProjectLibraryId(@RequestParam(name="projectLibraryId",required=true) String projectLibraryId) { + return projectCertificationDirectoryEOService.queryUserPremissionByProjectLibraryId(projectLibraryId); + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectLawsInventoryEOController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectLawsInventoryEOController.java index f5caa0ca2..7a9038e63 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectLawsInventoryEOController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectLawsInventoryEOController.java @@ -380,12 +380,7 @@ public class ProjectLawsInventoryEOController extends JeroController params, HttpServletRequest req, HttpServletResponse resp) throws DocumentException { - public void downloadReport(@RequestParam("cut")String cut,@RequestParam("id")String id, HttpServletRequest req, HttpServletResponse resp) throws DocumentException { - Map params = new HashMap<>(); - params.put("cut",cut); - params.put("id",id); - + public void downloadReport(@RequestParam Map params, HttpServletRequest req, HttpServletResponse resp) throws DocumentException { this.projectLawsInventoryEOService.downloadReport(params,req,resp); } @@ -415,4 +410,20 @@ public class ProjectLawsInventoryEOController extends JeroController params, HttpServletRequest req, HttpServletResponse resp) throws DocumentException { + this.projectLawsInventoryEOService.downloadDocxReport(params,req,resp); + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectCertificationDirectoryEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectCertificationDirectoryEOService.java index 62aec1d0a..3e10e3510 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectCertificationDirectoryEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectCertificationDirectoryEOService.java @@ -71,4 +71,11 @@ public interface IProjectCertificationDirectoryEOService extends IService queryPageList(ProjectCertificationDirectoryEO projectCertificationDirectoryEO, Integer pageNo, Integer pageSize, HttpServletRequest req); + + /** + * 根据项目库id 查询当前登陆人在该项目中是什么角色 + * @param projectLibraryId + * @return + */ + Result queryUserPremissionByProjectLibraryId(String projectLibraryId); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryEOService.java index 61c7b047e..aba210a76 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectLawsInventoryEOService.java @@ -121,5 +121,20 @@ public interface IProjectLawsInventoryEOService extends IService change(Map parmas); + /** + * 下载pdf报告 + * @param params + * @param req + * @param resp + * @throws DocumentException + */ void downloadReport(Map params,HttpServletRequest req, HttpServletResponse resp)throws DocumentException; + + /** + * 下载docx报告 + * @param params + * @param req + * @param resp + */ + void downloadDocxReport(Map params, HttpServletRequest req, HttpServletResponse resp); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectCertificationDirectoryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectCertificationDirectoryEOServiceImpl.java index 8a4fcb5d0..4cf873edf 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectCertificationDirectoryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectCertificationDirectoryEOServiceImpl.java @@ -145,38 +145,48 @@ public class ProjectCertificationDirectoryEOServiceImpl extends ServiceImpl queryUserPremissionByProjectLibraryId(String projectLibraryId) { + int roleCode = checkUserRole(projectLibraryId); + return Result.OK(roleCode); + } + public int checkUserRole(String projectLibraryId){ int result = -1; LoginUser currentUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); try{ + QueryWrapper inventoryEOQueryWrapperRZ = new QueryWrapper<>(); + inventoryEOQueryWrapperRZ.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId); + inventoryEOQueryWrapperRZ.lambda().eq(ProjectLawsInventoryEO::getHomologationEngineerId,currentUser.getId()); + Integer lawsInventoryCountRZ = projectLawsInventoryEOMapper.selectCount(inventoryEOQueryWrapperRZ); + if(lawsInventoryCountRZ > 0){ + result = Integer.parseInt(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); + return result; + } + + QueryWrapper projectLibraryBaseQueryWrapper = new QueryWrapper<>(); projectLibraryBaseQueryWrapper.lambda().eq(ProjectLibraryBase::getId,projectLibraryId); projectLibraryBaseQueryWrapper.lambda().eq(ProjectLibraryBase::getStudioEngineer,currentUser.getId()); Integer projectLibrayBaseCount = projectLibraryBaseMapper.selectCount(projectLibraryBaseQueryWrapper); if(projectLibrayBaseCount > 0){ result = Integer.parseInt(ProjectRoleEnum.STUDIO_ENGINEER.getValue()); - }else { - QueryWrapper inventoryEOQueryWrapperFG = new QueryWrapper<>(); - inventoryEOQueryWrapperFG.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId); - inventoryEOQueryWrapperFG.lambda().eq(ProjectLawsInventoryEO::getRegulationOwnerId,currentUser.getId()); - Integer lawsInventoryCountFG = projectLawsInventoryEOMapper.selectCount(inventoryEOQueryWrapperFG); - if(lawsInventoryCountFG > 0){ - result = Integer.parseInt(ProjectRoleEnum.REGULATI_ENGINEER.getValue()); - } + return result; + } - QueryWrapper inventoryEOQueryWrapperRZ = new QueryWrapper<>(); - inventoryEOQueryWrapperRZ.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId); - inventoryEOQueryWrapperRZ.lambda().eq(ProjectLawsInventoryEO::getHomologationEngineerId,currentUser.getId()); - Integer lawsInventoryCountRZ = projectLawsInventoryEOMapper.selectCount(inventoryEOQueryWrapperRZ); - if(lawsInventoryCountRZ > 0){ - result = Integer.parseInt(ProjectRoleEnum.HOMOLOGATION_ENGINEER.getValue()); - } + QueryWrapper inventoryEOQueryWrapperFG = new QueryWrapper<>(); + inventoryEOQueryWrapperFG.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,projectLibraryId); + inventoryEOQueryWrapperFG.lambda().eq(ProjectLawsInventoryEO::getRegulationOwnerId,currentUser.getId()); + Integer lawsInventoryCountFG = projectLawsInventoryEOMapper.selectCount(inventoryEOQueryWrapperFG); + if(lawsInventoryCountFG > 0){ + result = Integer.parseInt(ProjectRoleEnum.REGULATI_ENGINEER.getValue()); + return result; } }catch (Exception ex){ log.error("验证用户在该项目中的角色失败:" + ex.getMessage()); throw new JeroBootException("验证用户在该项目中的角色失败!"); } - return result; + return -1; } /** diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLawsInventoryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLawsInventoryEOServiceImpl.java index 0f33d185e..c92412abc 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLawsInventoryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLawsInventoryEOServiceImpl.java @@ -1,11 +1,12 @@ package com.jero.modules.project.service.impl; import cn.hutool.core.util.ZipUtil; +//import com.jero.modules.project.util.WordUtil; +import cn.hutool.poi.word.DocUtil; import com.itextpdf.text.*; import com.itextpdf.text.Font; import com.itextpdf.text.pdf.*; import com.jero.modules.dummy.entity.DummyInventoryBaseEO; -import com.jero.modules.dummy.entity.DummyInventoryInfoEOEn; import com.jero.modules.dummy.enums.DummyInventoryBaseFieldEnum; import com.jero.modules.dummy.service.impl.DummyInventoryBaseEOServiceImpl; import com.alibaba.fastjson.JSON; @@ -26,11 +27,8 @@ import com.jero.common.system.vo.LoginUser; import com.jero.common.util.DateUtils; import com.jero.modules.document.entity.BussDocumentLibraryEO; import com.jero.modules.document.service.IBussDocumentLibraryEOService; -import com.jero.modules.dummy.entity.DummyInventoryBaseEO; import com.jero.modules.dummy.entity.DummyInventoryInfoEO; -import com.jero.modules.dummy.enums.DummyInventoryBaseFieldEnum; import com.jero.modules.dummy.service.IDummyInventoryInfoEOService; -import com.jero.modules.dummy.service.impl.DummyInventoryBaseEOServiceImpl; import com.jero.modules.dummy.util.ListDiff; import com.jero.modules.feishu.service.IFeishuService; import com.jero.modules.message.websocket.WebSocket; @@ -43,6 +41,7 @@ import com.jero.modules.project.mapper.ProjectLibraryBaseMapper; import com.jero.modules.project.mapper.ProjectNameInfoEOMapper; import com.jero.modules.project.mapper.ProjectRelatedPersonnelMapper; import com.jero.modules.project.service.*; +import com.jero.modules.project.util.WordUtil; import com.jero.modules.split.common.FileUnZip; import com.jero.modules.system.entity.SysAnnouncement; import com.jero.modules.system.entity.SysCategory; @@ -54,6 +53,9 @@ import com.jero.modules.system.service.ISysAnnouncementService; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.impl.SysCategoryServiceImpl; import com.jero.modules.system.service.impl.SysDictItemServiceImpl; +import com.jero.modules.wkflow.entity.ProcessHistoryEO; +import com.jero.modules.wkflow.service.IProcessHistoryEOService; +import com.jero.modules.wkflow.service.impl.ProcessHistoryEOServiceImpl; import lombok.SneakyThrows; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -66,6 +68,18 @@ import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.aspectj.util.FileUtil; +import org.docx4j.Docx4J; +import org.docx4j.TraversalUtil; +import org.docx4j.XmlUtils; +import org.docx4j.finders.ClassFinder; +import org.docx4j.finders.RangeFinder; +import org.docx4j.openpackaging.exceptions.Docx4JException; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; +import org.docx4j.wml.Body; +import org.docx4j.wml.CTBookmark; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Tr; import org.jeecgframework.poi.excel.ExcelExportUtil; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.enmus.ExcelType; @@ -75,6 +89,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.ServletOutputStream; @@ -166,6 +181,12 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl change(Map parmas) { List idList = Arrays.asList(parmas.get("ids").toString().split(",")); if(CollectionUtils.isNotEmpty(idList)){ @@ -2394,7 +2416,29 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl taskInventoryQueryWrapper = new QueryWrapper<>(); + taskInventoryQueryWrapper.lambda().in(ProjectTaskInventoryEO::getProjectLawsInventoryId,idList); + List projectTaskInventoryList = this.projectTaskInventoryEOService.getBaseMapper().selectList(taskInventoryQueryWrapper); + + //删除流程历史 + if(CollectionUtils.isNotEmpty(projectTaskInventoryList)){ + List actiProcInstIdList = new ArrayList<>(); + List verifyPIdList = projectTaskInventoryList.stream().map(ProjectTaskInventoryEO::getVerifyPId).distinct().collect(Collectors.toList()); + List prehomoPIdList = projectTaskInventoryList.stream().map(ProjectTaskInventoryEO::getPrehomoPId).distinct().collect(Collectors.toList()); + List designPIdList = projectTaskInventoryList.stream().map(ProjectTaskInventoryEO::getDesignPId).distinct().collect(Collectors.toList()); + + actiProcInstIdList.addAll(verifyPIdList); + actiProcInstIdList.addAll(prehomoPIdList); + actiProcInstIdList.addAll(designPIdList); + + actiProcInstIdList = actiProcInstIdList.stream().distinct().collect(Collectors.toList());; + if(CollectionUtils.isNotEmpty(actiProcInstIdList)){ + QueryWrapper processHistoryDeleteWrapper = new QueryWrapper<>(); + processHistoryDeleteWrapper.lambda().in(ProcessHistoryEO::getActiProcInstId,actiProcInstIdList); + processHistoryEOService.remove(processHistoryDeleteWrapper); + } + } + List projectTaskInventoryEOList = new ArrayList<>(); idList.forEach(id -> { ProjectTaskInventoryEO projectTaskInventoryEO = new ProjectTaskInventoryEO(); @@ -2403,6 +2447,7 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl deleteConditionAssessmentWrapper = new QueryWrapper<>(); + deleteConditionAssessmentWrapper.lambda().in(ConditionAssessmentEO::getProjectLawsInventoryId,idList); + this.conditionAssessmentEOService.remove(deleteConditionAssessmentWrapper); } return Result.OK("变更成功!"); } @@ -4118,4 +4167,327 @@ public class ProjectLawsInventoryEOServiceImpl extends ServiceImpl params, HttpServletRequest req, HttpServletResponse resp) { + File templateFile = null; + File exportFile = null; + InputStream fin = null; + ServletOutputStream out = null; + + String id = (String) params.get("id"); + String cut = (String) params.get("cut"); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + //查询数据 + QueryWrapper lawsInventoryQueryWrapper = new QueryWrapper<>(); + lawsInventoryQueryWrapper.lambda().eq(ProjectLawsInventoryEO::getId,id); + ProjectLawsInventoryEO projectLawsInventoryEO = this.baseMapper.selectOne(lawsInventoryQueryWrapper); + params.put("projectLawsInventoryEO",projectLawsInventoryEO); + + QueryWrapper taskInventoryQueryWrapper = new QueryWrapper<>(); + taskInventoryQueryWrapper.lambda().eq(ProjectTaskInventoryEO::getProjectLawsInventoryId,id); + ProjectTaskInventoryEO projectTaskInventoryEO = projectTaskInventoryEOService.getBaseMapper().selectOne(taskInventoryQueryWrapper); + params.put("projectTaskInventoryEO",projectTaskInventoryEO); + + QueryWrapper libraryBaseQueryWrapper = new QueryWrapper<>(); + libraryBaseQueryWrapper.lambda().eq(ProjectLibraryBase::getId,projectLawsInventoryEO.getProjectLibraryId()); + ProjectLibraryBase projectLibraryBase = projectLibraryBaseMapper.selectOne(libraryBaseQueryWrapper); + params.put("projectLibraryBase",projectLibraryBase); + + QueryWrapper projectNameQueryWrapper = new QueryWrapper<>(); + projectNameQueryWrapper.lambda().eq(ProjectNameInfoEO::getId,projectLibraryBase.getProjectNameId()); + ProjectNameInfoEO projectNameInfoEO = projectNameInfoEOMapper.selectOne(projectNameQueryWrapper); + params.put("projectNameInfoEO",projectNameInfoEO); + + + final Map dataMap = new HashMap<>(); + //对应 CR No + dataMap.put("crNo", String.valueOf(new SimpleDateFormat("yyyyMMddHHmmssSSSS").format(new Date()))); + + String flowStatus = ""; + if(StringUtils.isNotEmpty(projectTaskInventoryEO.getVerifyStatus())){ + flowStatus = projectTaskInventoryEO.getVerifyStatus() + ","; + } + if(StringUtils.isNotEmpty(projectTaskInventoryEO.getPrehomoStatus())){ + flowStatus += projectTaskInventoryEO.getPrehomoStatus() + ","; + } + if(StringUtils.isNotEmpty(projectTaskInventoryEO.getVerifyStatus())){ + flowStatus += projectTaskInventoryEO.getVerifyStatus() + ","; + } + if(StringUtils.isNotEmpty(flowStatus)){ + flowStatus = flowStatus.substring(0,flowStatus.length() - 1); + } + + //对应 crStatus + dataMap.put("FLOW_STATUS", StringUtils.isNotEmpty(flowStatus) ? flowStatus : ""); + //对应 Regulation + dataMap.put("REGULATION", StringUtils.isNotEmpty(projectLawsInventoryEO.getSerialNumber()) ? projectLawsInventoryEO.getSerialNumber() : ""); + //对应 Subject + dataMap.put("SUBJECT", StringUtils.isNotEmpty(projectLawsInventoryEO.getTitle()) ? projectLawsInventoryEO.getTitle() : ""); + //对应 Project + dataMap.put("PROJECT_NAME", StringUtils.isNotEmpty(projectNameInfoEO.getProjectName()) ? projectNameInfoEO.getProjectName() : ""); + + List regionDictList = sysDictItemServiceImpl.selectItemsByDictCode("region"); + String market = ""; + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + market = regionDictList.stream() + .filter(e -> projectLibraryBase.getTargetMarket().contains(e.getItemValue())) + .map(SysDictItem::getItemText) + .collect(Collectors.joining(",")); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + market = regionDictList.stream() + .filter(e -> projectLibraryBase.getTargetMarket().contains(e.getItemValue())) + .map(SysDictItem::getEnName) + .collect(Collectors.joining(",")); + } + //对应 Market + dataMap.put("MARKET", StringUtils.isNotEmpty(market) ? market : ""); + //对应 nt 数字平台 + dataMap.put("NT", StringUtils.isNotEmpty(projectNameInfoEO.getDigitalPlatform()) ? projectNameInfoEO.getDigitalPlatform() : ""); + //对应 np 车型平台 + dataMap.put("NP", StringUtils.isNotEmpty(projectNameInfoEO.getVehiclePlatform()) ? projectNameInfoEO.getVehiclePlatform() : ""); + String processEndTimeStr = ""; + if(projectTaskInventoryEO.getProcessEndTime() != null){ + processEndTimeStr = sdf.format(projectTaskInventoryEO.getProcessEndTime()); + } + dataMap.put("COMPLETION_DATE", StringUtils.isNotEmpty(processEndTimeStr) ? processEndTimeStr : ""); + + String dutyTerritory = projectLawsInventoryEO.getDutyTerritory(); + String finalDutyTerritory = dutyTerritory; + List dutyTerritoryDictItemList = sysDictItemServiceImpl.selectItemsByDictCode("duty_territory"); + String dutyTerritoryName = ""; + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + dutyTerritoryName = dutyTerritoryDictItemList.stream() + .filter(e -> finalDutyTerritory.contains(e.getItemValue())) + .map(SysDictItem::getItemText) + .collect(Collectors.joining(",")); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + dutyTerritoryName = dutyTerritoryDictItemList.stream() + .filter(e -> finalDutyTerritory.contains(e.getItemValue())) + .map(SysDictItem::getEnName) + .collect(Collectors.joining(",")); + } + dataMap.put("RESPONSIBLE_FIELD", StringUtils.isNotEmpty(dutyTerritoryName) ? dutyTerritoryName : ""); + + String studioEngineer = projectLibraryBase.getStudioEngineer(); + QueryWrapper queryStudioUserWrapper = new QueryWrapper<>(); + queryStudioUserWrapper.lambda().eq(SysUser::getId,studioEngineer); + SysUser studioUserInfo = sysUserMapper.selectOne(queryStudioUserWrapper); + dataMap.put("STUDIO", StringUtils.isNotEmpty(studioUserInfo.getUsername()) ? studioUserInfo.getUsername() : ""); + + String engineeringInterfacePerson = projectLawsInventoryEO.getEngineeringInterfacePerson(); + QueryWrapper queryEngineeringInterfaceUserWrapper = new QueryWrapper<>(); + queryEngineeringInterfaceUserWrapper.lambda().eq(SysUser::getId,engineeringInterfacePerson); + SysUser engineeringInterfaceInfo = sysUserMapper.selectOne(queryEngineeringInterfaceUserWrapper); + dataMap.put("ENGINEERING", StringUtils.isNotEmpty(engineeringInterfaceInfo.getUsername()) ? engineeringInterfaceInfo.getUsername() : ""); + + String homologationEngineerId = projectLawsInventoryEO.getHomologationEngineerId(); + QueryWrapper queryHomologationEngineerUserWrapper = new QueryWrapper<>(); + queryHomologationEngineerUserWrapper.lambda().eq(SysUser::getId,homologationEngineerId); + SysUser homologationEngineerInfo = sysUserMapper.selectOne(queryHomologationEngineerUserWrapper); + dataMap.put("HOMOLOGATION", StringUtils.isNotEmpty(homologationEngineerInfo.getUsername()) ? homologationEngineerInfo.getUsername() : ""); + + String regulationOwnerId = projectLawsInventoryEO.getRegulationOwnerId(); + QueryWrapper queryRegulationOwnerUserWrapper = new QueryWrapper<>(); + queryRegulationOwnerUserWrapper.lambda().eq(SysUser::getId,regulationOwnerId); + SysUser regulationOwnerInfo = sysUserMapper.selectOne(queryRegulationOwnerUserWrapper); + dataMap.put("REGULATION", StringUtils.isNotEmpty(regulationOwnerInfo.getUsername()) ? regulationOwnerInfo.getUsername() : ""); + + templateFile = new File(exportPdfTempPath + "temp/ComplianceReportTemplate.docx"); + if(templateFile != null){ + try { + String uuid = UUID.randomUUID().toString(); + //final String TEMP_FILE_PATH = System.getProperty("os.name").toLowerCase().contains("windows") ? System.getProperty("user.dir") + File.separator : "/home/admin/tempfile/"; + final String TEMP_FILE_PATH = exportPdfTempPath + "exportFile/"; + + File pathFile = new File(TEMP_FILE_PATH); + if (!pathFile.exists()) { + pathFile.mkdirs(); + } + String outFile = TEMP_FILE_PATH + uuid + ".docx"; + exportFile = new File(outFile); + FileOutputStream os = new FileOutputStream(outFile); + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new FileInputStream(templateFile)); + + //验证符合性流程实例id + String verifyPId = projectTaskInventoryEO.getVerifyPId(); + //Compliance Attachments 验证符合性流程里最后通过审批的“工程确认”中的附件 + setTableContent(1,wordMLPackage,params,verifyPId); + //Validation Compliance Check Approvals(验证符合性确认的审批历史数据) + setTableContent(4,wordMLPackage,params,verifyPId); + + //设计符合性流程实例id + String designPId = projectTaskInventoryEO.getDesignPId(); + //Design Compliance Check Approvals (设计符合性确认的审批历史数据) + setTableContent(3,wordMLPackage,params,designPId); + + WordUtil.replaceVariable(wordMLPackage, dataMap); + Docx4J.save(wordMLPackage, os); + + //将替换后的文档输出出去。 + fin = new FileInputStream(outFile); + resp.setCharacterEncoding("utf-8"); + resp.setContentType("application/docx"); + + String filename = ""; + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + filename = "法规清单报告"; + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + filename = "Compliance List report"; + } + // 设置浏览器以下载的方式处理该文件 + if (req.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) { + filename = URLEncoder.encode(filename, "UTF-8"); + } else { + filename = new String(filename.getBytes("UTF-8"), "ISO8859-1"); + } + resp.setHeader("Content-Disposition", "attachment;filename=" + filename + ".docx"); + out = resp.getOutputStream(); + + // 缓冲区 + byte[] buffer = new byte[512]; + int bytesToRead = -1; + + // 通过循环将读入的Word文件的内容输出到浏览器中 + while ((bytesToRead = fin.read(buffer)) != -1) { + out.write(buffer, 0, bytesToRead); + } + } catch (IOException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (fin != null){ + fin.close(); + } + if (out != null){ + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + + if (exportFile != null){ + // 删除导出去的文件 + exportFile.delete(); + } + } + }else { + throw new JeroBootException("路径 :" + exportPdfTempPath + "temp/ComplianceReportTemplate.docx" + " 中没有找到文件"); + } + } + + /** + * 设置表内容 + * @param tableIndex 表的下标 + * @param wordMLPackage + * @param params + * @param pId 流程实例id + */ + public void setTableContent(int tableIndex,WordprocessingMLPackage wordMLPackage, Map params,String pId){ + try{ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + List> dataList = new ArrayList<>(); + // 设置数据 + if(StringUtils.isNotEmpty(pId)){ + if(tableIndex == 1){ + QueryWrapper taskFeedbackQueryWrapper = new QueryWrapper<>(); + taskFeedbackQueryWrapper.lambda().eq(ProjectTaskInventoryFeedbackEO::getActiProcInstId,pId); + List projectTaskInventoryFeedbackEOList = projectTaskInventoryFeedbackEOService.getBaseMapper().selectList(taskFeedbackQueryWrapper); + if(CollectionUtils.isNotEmpty(projectTaskInventoryFeedbackEOList)){ + List fileIdList = projectTaskInventoryFeedbackEOList.stream().map(ProjectTaskInventoryFeedbackEO::getFileId).distinct().collect(Collectors.toList()); + String fileId = StringUtils.join(fileIdList,","); + List fileList = iOSSFileService.getFileInfos(fileId); + if(CollectionUtils.isNotEmpty(fileList)){ + fileList.forEach(file -> { + Map fileMap = new HashMap<>(); + fileMap.put("item.fileName", StringUtils.isNotEmpty(file.getFileName()) ? file.getFileName() : ""); + fileMap.put("item.filePath", StringUtils.isNotEmpty(file.getUrl()) ? file.getUrl() : ""); + /*fileMap.put("item.fileName", file.getFileName()); + fileMap.put("item.filePath", file.getUrl());*/ + dataList.add(fileMap); + }); + } + } + }else if(tableIndex == 3){ + params.put("actiProcInstId",pId); + List processHistoryEOList = processHistoryEOService.queryList(params); + if(CollectionUtils.isNotEmpty(processHistoryEOList)){ + processHistoryEOList.forEach(processHistory -> { + String createTime = sdf.format(processHistory.getCreateTime()); + + Map designMap = new HashMap<>(); + designMap.put("design.result", StringUtils.isNotEmpty(processHistory.getReviewResult()) ? processHistory.getReviewResult() : ""); + designMap.put("design.opinion", StringUtils.isNotEmpty(processHistory.getApprovalOpinion()) ? processHistory.getApprovalOpinion() : ""); + designMap.put("design.node", StringUtils.isNotEmpty(processHistory.getName()) ? processHistory.getName() : ""); + designMap.put("design.operator", StringUtils.isNotEmpty(processHistory.getAssignee()) ? processHistory.getAssignee() :""); + designMap.put("design.dateTime", StringUtils.isNotEmpty(createTime) ? createTime : ""); + + /*designMap.put("design.result", processHistory.getReviewResult()); + designMap.put("design.opinion", processHistory.getApprovalOpinion()); + designMap.put("design.node", processHistory.getName()); + designMap.put("design.operator", processHistory.getAssignee()); + designMap.put("design.dateTime", createTime);*/ + dataList.add(designMap); + }); + } + }else if(tableIndex == 4){ + params.put("actiProcInstId",pId); + List processHistoryEOList = processHistoryEOService.queryList(params); + if(CollectionUtils.isNotEmpty(processHistoryEOList)){ + processHistoryEOList.forEach(processHistory -> { + String createTime = sdf.format(processHistory.getCreateTime()); + + Map verifyMap = new HashMap<>(); + verifyMap.put("verify.result", StringUtils.isNotEmpty(processHistory.getReviewResult()) ? processHistory.getReviewResult() : ""); + verifyMap.put("verify.opinion", StringUtils.isNotEmpty(processHistory.getApprovalOpinion()) ? processHistory.getApprovalOpinion() : ""); + verifyMap.put("verify.node", StringUtils.isNotEmpty(processHistory.getName()) ? processHistory.getName() : ""); + verifyMap.put("verify.operator", StringUtils.isNotEmpty(processHistory.getAssignee()) ? processHistory.getAssignee() :""); + verifyMap.put("verify.dateTime", StringUtils.isNotEmpty(createTime) ? createTime : ""); + + /*verifyMap.put("verify.result", processHistory.getReviewResult()); + verifyMap.put("verify.opinion", processHistory.getApprovalOpinion()); + verifyMap.put("verify.node", processHistory.getName()); + verifyMap.put("verify.operator", processHistory.getAssignee()); + verifyMap.put("verify.dateTime", createTime);*/ + dataList.add(verifyMap); + }); + } + } + } + + //构造循环列表的数据 + ClassFinder find = new ClassFinder(Tbl.class); + new TraversalUtil(wordMLPackage.getMainDocumentPart().getContent(), find); + Tbl table = (Tbl) find.results.get(tableIndex); + //第二行约定为模板 + Tr dynamicTr = (Tr) table.getContent().get(1); + //获取模板行的xml数据 + String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr); + + for (Map mapList : dataList) { + Tr newTr = (Tr) XmlUtils.unmarshallFromTemplate(dynamicTrXml, mapList);//填充模板行数据 + table.getContent().add(newTr); + } + //删除模板行的占位行 + table.getContent().remove(1); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + + public static WordprocessingMLPackage getTemplate(String name)throws Docx4JException,FileNotFoundException { + WordprocessingMLPackage template = WordprocessingMLPackage.load(new FileInputStream(new File(name))); + return template; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLibraryBaseServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLibraryBaseServiceImpl.java index e2c2b8bcd..cef4706ae 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLibraryBaseServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectLibraryBaseServiceImpl.java @@ -109,7 +109,10 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); - queryWrapper.eq("project_name_id",projectNameId).eq("year_name_id",yearNameId).eq("target_market",targetMarket); + queryWrapper.eq("project_name_id",projectNameId) + .eq("year_name_id",yearNameId) + .eq("target_market",targetMarket) + .ne("id",projectLibraryBase.getId()); Integer count = projectLibraryBaseMapper.selectCount(queryWrapper); if (count > 0) { if(CutEnum.CN.getValue().equals(projectLibraryBase.getCut())) { @@ -258,6 +261,16 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl certificationProgressMap = new HashMap<>(); + //清单确认统计 + List> listingToConfirmMapList = this.projectLawsInventoryEOMapper.getlistingToConfirmStatistics(id); + listingToConfirmMap.put("listingToConfirmMapList",listingToConfirmMapList); + result.put("listingToConfirmMap",listingToConfirmMap); + + //任务确认统计 + List> taskToConfirmMapList = this.projectLawsInventoryEOMapper.getTaskToConfirmStatistics(id); + taskToConfirmMap.put("taskToConfirmMapList",taskToConfirmMapList); + result.put("taskToConfirmMap",taskToConfirmMap); + QueryWrapper lawsInventoryEOQueryWrapper = new QueryWrapper<>(); lawsInventoryEOQueryWrapper.lambda().eq(ProjectLawsInventoryEO::getProjectLibraryId,id); lawsInventoryEOQueryWrapper.lambda().eq(ProjectLawsInventoryEO::getInventoryAffirmStatus, InventoryAffirmStatusEnum.ACCEPTED.getValue()); @@ -292,16 +305,6 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl> listingToConfirmMapList = this.projectLawsInventoryEOMapper.getlistingToConfirmStatistics(id); - listingToConfirmMap.put("listingToConfirmMapList",listingToConfirmMapList); - result.put("listingToConfirmMap",listingToConfirmMap); - - //任务确认统计 - List> taskToConfirmMapList = this.projectLawsInventoryEOMapper.getTaskToConfirmStatistics(id); - taskToConfirmMap.put("taskToConfirmMapList",taskToConfirmMapList); - result.put("taskToConfirmMap",taskToConfirmMap); - //设计符合性 List> designComplianceMapList = this.projectTaskInventoryEOMapper.getDesignComplianceStatistice(projectLawsInventoryIdList); designComplianceMap.put("designComplianceMapList",designComplianceMapList); @@ -523,14 +526,34 @@ public class ProjectLibraryBaseServiceImpl extends ServiceImpl> datas,String cut){ - List dictItemList = sysDictItemServiceImpl.selectItemsByDictCode("duty_territory"); + List dutyTerritoryList = sysDictItemServiceImpl.selectItemsByDictCode("duty_territory"); if(CollectionUtils.isNotEmpty(datas)){ for (Map data : datas) { - List dutyTerritory = dictItemList.stream().filter(dict -> StringUtils.equals(dict.getItemValue(), data.get("dutyTerritory").toString())).collect(Collectors.toList()); - if(StringUtils.equals(cut,CutEnum.CN.getValue())){ - data.put("dutyTerritory",dutyTerritory.get(0).getItemText()); - }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ - data.put("dutyTerritory",dutyTerritory.get(0).getEnName()); + if(data.get("dutyTerritory") != null){ + String[] dutyTerritorieArr = data.get("dutyTerritory").toString().split(","); + String dutyTerritories = ""; + for (String dutyTerritorie : dutyTerritorieArr) { + List collect = new ArrayList<>(); + if(StringUtils.equals(cut,CutEnum.CN.getValue())){ + collect = dutyTerritoryList.stream() + .filter(e -> StringUtils.equals(dutyTerritorie, e.getItemValue())) + .map(SysDictItem::getItemText) + .collect(Collectors.toList()); + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + collect = dutyTerritoryList.stream() + .filter(e -> StringUtils.equals(dutyTerritorie, e.getItemValue())) + .map(SysDictItem::getEnName) + .collect(Collectors.toList()); + } + if(CollectionUtils.isNotEmpty(collect)){ + dutyTerritories += collect.get(0) + ","; + } + } + + if(StringUtils.isNotEmpty(dutyTerritories)){ + dutyTerritories = dutyTerritories.substring(0,dutyTerritories.length()-1); + } + data.put("dutyTerritory",dutyTerritories); } } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/Docx4jUtils.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/Docx4jUtils.java new file mode 100644 index 000000000..6f58696cb --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/Docx4jUtils.java @@ -0,0 +1,246 @@ +package com.jero.modules.project.util; + + +import org.docx4j.XmlUtils; +import org.docx4j.jaxb.Context; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; +import org.docx4j.wml.Document; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.servlet.http.HttpServletResponse; +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +/** + * 关于文件操作的工具类 + * + * @author kaizen + * @date 2018-10-23 17:21:36 + */ +public final class Docx4jUtils { + + private static final Logger logger = LoggerFactory.getLogger(Docx4jUtils.class); + + /** + * 替换变量并下载word文档 + * + * @param inputStream + * @param map + * @param response + * @param fileName + */ + public static void downloadDocUseDoc4j(InputStream inputStream, Map map, + HttpServletResponse response, String fileName) { + + try { + // 设置响应头 + fileName = URLEncoder.encode(fileName, "UTF-8"); + response.setContentType("application/octet-stream;charset=UTF-8"); + response.setCharacterEncoding("utf-8"); + response.setHeader("Content-Disposition", "attachment; filename=" + fileName + ".docx"); + response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); + + OutputStream outs = response.getOutputStream(); + Docx4jUtils.replaceDocUseDoc4j(inputStream,map,outs); + + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } + + /** + * 替换变量并输出word文档 + * @param inputStream + * @param map + * @param outputStream + */ + public static void replaceDocUseDoc4j(InputStream inputStream, Map map, + OutputStream outputStream) { + try { + WordprocessingMLPackage doc = WordprocessingMLPackage.load(inputStream); + MainDocumentPart mainDocumentPart = doc.getMainDocumentPart(); + if (null != map && !map.isEmpty()) { + // 将${}里的内容结构层次替换为一层 + Docx4jUtils .cleanDocumentPart(mainDocumentPart); + // 替换文本内容 + mainDocumentPart.variableReplace((HashMap) map); + } + + // 输出word文件 + doc.save(outputStream); + outputStream.flush(); + } catch (Exception e) { + logger.error(e.getMessage(), e); + } + } + + + /** + * cleanDocumentPart + * + * @param documentPart + */ + public static boolean cleanDocumentPart(MainDocumentPart documentPart) throws Exception { + if (documentPart == null) { + return false; + } + Document document = documentPart.getContents(); + String wmlTemplate = + XmlUtils.marshaltoString(document, true, false, Context.jc); + document = (Document) XmlUtils.unwrap(DocxVariableClearUtils.doCleanDocumentPart(wmlTemplate, Context.jc)); + documentPart.setContents(document); + return true; + } + + /** + * 清扫 docx4j 模板变量字符,通常以${variable}形式 + *

+ * XXX: 主要在上传模板时处理一下, 后续 + * + * @author liliang + * @since 2018-11-07 + */ + private static class DocxVariableClearUtils { + + + /** + * 去任意XML标签 + */ + private static final Pattern XML_PATTERN = Pattern.compile("<[^>]*>"); + + private DocxVariableClearUtils() { + } + + /** + * start符号 + */ + private static final char PREFIX = '$'; + + /** + * 中包含 + */ + private static final char LEFT_BRACE = '{'; + + /** + * 结尾 + */ + private static final char RIGHT_BRACE = '}'; + + /** + * 未开始 + */ + private static final int NONE_START = -1; + + /** + * 未开始 + */ + private static final int NONE_START_INDEX = -1; + + /** + * 开始 + */ + private static final int PREFIX_STATUS = 1; + + /** + * 左括号 + */ + private static final int LEFT_BRACE_STATUS = 2; + + /** + * 右括号 + */ + private static final int RIGHT_BRACE_STATUS = 3; + + + /** + * doCleanDocumentPart + * + * @param wmlTemplate + * @param jc + * @return + * @throws JAXBException + */ + private static Object doCleanDocumentPart(String wmlTemplate, JAXBContext jc) throws JAXBException { + // 进入变量块位置 + int curStatus = NONE_START; + // 开始位置 + int keyStartIndex = NONE_START_INDEX; + // 当前位置 + int curIndex = 0; + char[] textCharacters = wmlTemplate.toCharArray(); + StringBuilder documentBuilder = new StringBuilder(textCharacters.length); + documentBuilder.append(textCharacters); + // 新文档 + StringBuilder newDocumentBuilder = new StringBuilder(textCharacters.length); + // 最后一次写位置 + int lastWriteIndex = 0; + for (char c : textCharacters) { + switch (c) { + case PREFIX: + // TODO 不管其何状态直接修改指针,这也意味着变量名称里面不能有PREFIX + keyStartIndex = curIndex; + curStatus = PREFIX_STATUS; + break; + case LEFT_BRACE: + if (curStatus == PREFIX_STATUS) { + curStatus = LEFT_BRACE_STATUS; + } + break; + case RIGHT_BRACE: + if (curStatus == LEFT_BRACE_STATUS) { + // 接上之前的字符 + newDocumentBuilder.append(documentBuilder.substring(lastWriteIndex, keyStartIndex)); + // 结束位置 + int keyEndIndex = curIndex + 1; + // 替换 + String rawKey = documentBuilder.substring(keyStartIndex, keyEndIndex); + // 干掉多余标签 + String mappingKey = XML_PATTERN.matcher(rawKey).replaceAll(""); + if (!mappingKey.equals(rawKey)) { + char[] rawKeyChars = rawKey.toCharArray(); + // 保留原格式 + StringBuilder rawStringBuilder = new StringBuilder(rawKey.length()); + // 去掉变量引用字符 + for (char rawChar : rawKeyChars) { + if (rawChar == PREFIX || rawChar == LEFT_BRACE || rawChar == RIGHT_BRACE) { + continue; + } + rawStringBuilder.append(rawChar); + } + // FIXME 要求变量连在一起 + String variable = mappingKey.substring(2, mappingKey.length() - 1); + int variableStart = rawStringBuilder.indexOf(variable); + if (variableStart > 0) { + rawStringBuilder = rawStringBuilder.replace(variableStart, variableStart + variable.length(), mappingKey); + } + newDocumentBuilder.append(rawStringBuilder.toString()); + } else { + newDocumentBuilder.append(mappingKey); + } + lastWriteIndex = keyEndIndex; + + curStatus = NONE_START; + keyStartIndex = NONE_START_INDEX; + } + default: + break; + } + curIndex++; + } + // 余部 + if (lastWriteIndex < documentBuilder.length()) { + newDocumentBuilder.append(documentBuilder.substring(lastWriteIndex)); + } + return XmlUtils.unmarshalString(newDocumentBuilder.toString(), jc); + } + + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java new file mode 100644 index 000000000..3872677ca --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java @@ -0,0 +1,315 @@ +package com.jero.modules.project.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import org.apache.commons.io.IOUtils; +import org.docx4j.Docx4J; +import org.docx4j.TraversalUtil; +import org.docx4j.XmlUtils; +import org.docx4j.convert.out.FOSettings; +import org.docx4j.convert.out.HTMLSettings; +import org.docx4j.dml.wordprocessingDrawing.Inline; +import org.docx4j.finders.ClassFinder; +import org.docx4j.finders.RangeFinder; +import org.docx4j.fonts.IdentityPlusMapper; +import org.docx4j.fonts.Mapper; +import org.docx4j.fonts.PhysicalFonts; +import org.docx4j.openpackaging.packages.WordprocessingMLPackage; +import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage; +import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart; +import org.docx4j.wml.Body; +import org.docx4j.wml.CTBookmark; +import org.docx4j.wml.Document; +import org.docx4j.wml.Drawing; +import org.docx4j.wml.ObjectFactory; +import org.docx4j.wml.P; +import org.docx4j.wml.R; +import org.docx4j.wml.Tbl; +import org.docx4j.wml.Text; +import org.docx4j.wml.Tr; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.util.FileCopyUtils; + +public class WordUtil { + private static final Logger log = LoggerFactory.getLogger(WordUtil.class); + + public WordUtil() { + } + + public static void replaceVariable(String templatePath, Map map, String outPath) throws Exception { + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File(templatePath)); + MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); + Docx4jUtils.cleanDocumentPart(documentPart); + documentPart.variableReplace((HashMap) map); + Docx4J.save(wordMLPackage, new File(outPath)); + } + + public static void replaceVariable(InputStream inputStream, Map map, OutputStream outputStream) throws Exception { + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(inputStream); + MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); + Docx4jUtils.cleanDocumentPart(documentPart); + documentPart.variableReplace((HashMap) map); + Docx4J.save(wordMLPackage, outputStream); + } + + public static void replaceVariable(WordprocessingMLPackage wordMLPackage, Map map) throws Exception { + MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); + Docx4jUtils.cleanDocumentPart(documentPart); + documentPart.variableReplace((HashMap) map); + } + + public static void replaceTable(String templatePath, int tableNum, int rowNum, List> dataList, String outPath) throws Exception { + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File(templatePath)); + MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); + Docx4jUtils.cleanDocumentPart(mainDocumentPart); + ClassFinder find = new ClassFinder(Tbl.class); + new TraversalUtil(mainDocumentPart.getContent(), find); + Tbl table = (Tbl)find.results.get(tableNum - 1); + Tr dynamicTr = (Tr)table.getContent().get(rowNum - 1); + String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr); + Iterator var11 = dataList.iterator(); + + while(var11.hasNext()) { + Map dataMap = (Map)var11.next(); + Tr newTr = (Tr)XmlUtils.unmarshallFromTemplate(dynamicTrXml, dataMap); + table.getContent().add(newTr); + } + + table.getContent().remove(rowNum - 1); + Docx4J.save(wordMLPackage, new File(outPath)); + } + + public static void replaceTable(InputStream inputStream, int tableNum, int rowNum, List> dataList, OutputStream outputStream) throws Exception { + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(inputStream); + MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); + Docx4jUtils.cleanDocumentPart(mainDocumentPart); + ClassFinder find = new ClassFinder(Tbl.class); + new TraversalUtil(mainDocumentPart.getContent(), find); + Tbl table = (Tbl)find.results.get(tableNum - 1); + Tr dynamicTr = (Tr)table.getContent().get(rowNum - 1); + String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr); + Iterator var11 = dataList.iterator(); + + while(var11.hasNext()) { + Map dataMap = (Map)var11.next(); + Tr newTr = (Tr)XmlUtils.unmarshallFromTemplate(dynamicTrXml, dataMap); + table.getContent().add(newTr); + } + + table.getContent().remove(rowNum - 1); + Docx4J.save(wordMLPackage, outputStream); + } + + public static void replaceTable(WordprocessingMLPackage wordMLPackage, int tableNum, int rowNum, List> dataList) throws Exception { + MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); + Docx4jUtils.cleanDocumentPart(mainDocumentPart); + ClassFinder find = new ClassFinder(Tbl.class); + new TraversalUtil(mainDocumentPart.getContent(), find); + Tbl table = (Tbl)find.results.get(tableNum - 1); + Tr dynamicTr = (Tr)table.getContent().get(rowNum - 1); + String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr); + Iterator var9 = dataList.iterator(); + + while(var9.hasNext()) { + Map dataMap = (Map)var9.next(); + Tr newTr = (Tr)XmlUtils.unmarshallFromTemplate(dynamicTrXml, dataMap); + table.getContent().add(newTr); + } + + table.getContent().remove(rowNum - 1); + } + + public static void replacePicture(WordprocessingMLPackage wordMLPackage, String bookmarkName, InputStream inputStream) throws Exception { + try { + MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); + Document wmlDoc = (Document)mainDocumentPart.getJaxbElement(); + Body body = wmlDoc.getBody(); + List paragraphs = body.getContent(); + RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange"); + new TraversalUtil(paragraphs, rt); + Iterator var8 = rt.getStarts().iterator(); + + while(var8.hasNext()) { + CTBookmark bm = (CTBookmark)var8.next(); + if (bm.getName().equals(bookmarkName)) { + byte[] bytes = IOUtils.toByteArray(inputStream); + BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes); + Inline inline = imagePart.createImageInline("", "", 0, 1, true); + P p = (P)((P)bm.getParent()); + ObjectFactory factory = new ObjectFactory(); + R run = factory.createR(); + Drawing drawing = factory.createDrawing(); + drawing.getAnchorOrInline().add(inline); + run.getContent().add(drawing); + p.getContent().add(run); + } + } + } catch (Exception var17) { + } + + } + + public static void replaceForTemplate(String templatePath, Map map, int tableNum, List> dataList, String outPath) throws Exception { + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new File(templatePath)); + MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); + Docx4jUtils.cleanDocumentPart(mainDocumentPart); + ClassFinder find = new ClassFinder(Tbl.class); + new TraversalUtil(mainDocumentPart.getContent(), find); + Tbl table = (Tbl)find.results.get(tableNum - 1); + Tr dynamicTr = (Tr)table.getContent().get(1); + String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr); + Iterator var11 = dataList.iterator(); + + while(var11.hasNext()) { + Map dataMap = (Map)var11.next(); + Tr newTr = (Tr)XmlUtils.unmarshallFromTemplate(dynamicTrXml, dataMap); + table.getContent().add(newTr); + } + + table.getContent().remove(1); + wordMLPackage.getMainDocumentPart().variableReplace((HashMap) map); + Docx4J.save(wordMLPackage, new File(outPath)); + } + + public static void replaceForTemplate(InputStream inputStream, Map map, int tableNum, List> dataList, OutputStream outputStream) throws Exception { + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(inputStream); + MainDocumentPart mainDocumentPart = wordMLPackage.getMainDocumentPart(); + Docx4jUtils.cleanDocumentPart(mainDocumentPart); + ClassFinder find = new ClassFinder(Tbl.class); + new TraversalUtil(mainDocumentPart.getContent(), find); + Tbl table = (Tbl)find.results.get(tableNum - 1); + Tr dynamicTr = (Tr)table.getContent().get(1); + String dynamicTrXml = XmlUtils.marshaltoString(dynamicTr); + Iterator var11 = dataList.iterator(); + + while(var11.hasNext()) { + Map dataMap = (Map)var11.next(); + Tr newTr = (Tr)XmlUtils.unmarshallFromTemplate(dynamicTrXml, dataMap); + table.getContent().add(newTr); + } + + table.getContent().remove(1); + wordMLPackage.getMainDocumentPart().variableReplace((HashMap) map); + Docx4J.save(wordMLPackage, outputStream); + } + + public static void toPDF(InputStream inputStream, OutputStream outputStream) throws Exception { + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(inputStream); + Mapper fontMapper = new IdentityPlusMapper(); + wordMLPackage.setFontMapper(fontMapper); + fontMapper.put("隶书", PhysicalFonts.get("LiSu")); + fontMapper.put("宋体", PhysicalFonts.get("SimSun")); + fontMapper.put("微软雅黑", PhysicalFonts.get("Microsoft Yahei")); + fontMapper.put("黑体", PhysicalFonts.get("SimHei")); + fontMapper.put("楷体", PhysicalFonts.get("KaiTi")); + fontMapper.put("新宋体", PhysicalFonts.get("NSimSun")); + fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai")); + fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong")); + fontMapper.put("宋体扩展", PhysicalFonts.get("simsun-extB")); + fontMapper.put("仿宋", PhysicalFonts.get("FangSong")); + fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312")); + fontMapper.put("幼圆", PhysicalFonts.get("YouYuan")); + fontMapper.put("华文宋体", PhysicalFonts.get("STSong")); + fontMapper.put("华文中宋", PhysicalFonts.get("STZhongsong")); + FOSettings foSettings = Docx4J.createFOSettings(); + foSettings.setWmlPackage(wordMLPackage); + Docx4J.toFO(foSettings, outputStream, 1); + } + + public static void toPDF(WordprocessingMLPackage wordMLPackage, OutputStream outputStream) throws Exception { + Mapper fontMapper = new IdentityPlusMapper(); + wordMLPackage.setFontMapper(fontMapper); + fontMapper.put("隶书", PhysicalFonts.get("LiSu")); + fontMapper.put("宋体", PhysicalFonts.get("SimSun")); + fontMapper.put("微软雅黑", PhysicalFonts.get("Microsoft Yahei")); + fontMapper.put("黑体", PhysicalFonts.get("SimHei")); + fontMapper.put("楷体", PhysicalFonts.get("KaiTi")); + fontMapper.put("新宋体", PhysicalFonts.get("NSimSun")); + fontMapper.put("华文行楷", PhysicalFonts.get("STXingkai")); + fontMapper.put("华文仿宋", PhysicalFonts.get("STFangsong")); + fontMapper.put("宋体扩展", PhysicalFonts.get("simsun-extB")); + fontMapper.put("仿宋", PhysicalFonts.get("FangSong")); + fontMapper.put("仿宋_GB2312", PhysicalFonts.get("FangSong_GB2312")); + fontMapper.put("幼圆", PhysicalFonts.get("YouYuan")); + fontMapper.put("华文宋体", PhysicalFonts.get("STSong")); + fontMapper.put("华文中宋", PhysicalFonts.get("STZhongsong")); + FOSettings foSettings = Docx4J.createFOSettings(); + foSettings.setWmlPackage(wordMLPackage); + Docx4J.toFO(foSettings, outputStream, 1); + } + + public static void toHTML(InputStream inputStream, OutputStream outputStream) throws Exception { + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(inputStream); + HTMLSettings htmlSettings = Docx4J.createHTMLSettings(); + String folder = "optimages"; + htmlSettings.setImageDirPath(folder); + htmlSettings.setImageTargetUri("images"); + htmlSettings.setWmlPackage(wordMLPackage); + Docx4J.toHTML(htmlSettings, outputStream, 0); + } + + public static void toHTML(WordprocessingMLPackage wordMLPackage, OutputStream outputStream) throws Exception { + HTMLSettings htmlSettings = Docx4J.createHTMLSettings(); + String folder = "optimages"; + htmlSettings.setImageDirPath(folder); + htmlSettings.setImageTargetUri("images"); + htmlSettings.setWmlPackage(wordMLPackage); + Docx4J.toHTML(htmlSettings, outputStream, 0); + } + + private static void addImageInlineToPackage(WordprocessingMLPackage wordMLPackage, byte[] bytes) throws Exception { + BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes); + int docPrId = 1; + int cNvPrId = 2; + Inline inline = imagePart.createImageInline("Filename hint", "Alternative text", docPrId, cNvPrId, false); + ObjectFactory factory = new ObjectFactory(); + P paragraph = factory.createP(); + R run = factory.createR(); + paragraph.getContent().add(run); + Drawing drawing = factory.createDrawing(); + run.getContent().add(drawing); + drawing.getAnchorOrInline().add(inline); + wordMLPackage.getMainDocumentPart().addObject(paragraph); + } + + private static void addImageInlineAndTextToPackage(WordprocessingMLPackage wordMLPackage, byte[] bytes, String text) throws Exception { + BinaryPartAbstractImage imagePart = BinaryPartAbstractImage.createImagePart(wordMLPackage, bytes); + int docPrId = 1; + int cNvPrId = 2; + Inline inline = imagePart.createImageInline("Filename hint", "Alternative text", docPrId, cNvPrId, false); + ObjectFactory factory = new ObjectFactory(); + P paragraph = factory.createP(); + R run = factory.createR(); + paragraph.getContent().add(run); + if (text != null) { + Text txt = factory.createText(); + txt.setValue(text); + txt.setSpace("preserve"); + run.getContent().add(txt); + } + + Drawing drawing = factory.createDrawing(); + run.getContent().add(drawing); + drawing.getAnchorOrInline().add(inline); + wordMLPackage.getMainDocumentPart().addObject(paragraph); + } + + public static void main(String[] args) throws Exception { + File file = new File("d:" + File.separator + "opt" + File.separator + "template" + File.separator + "请假条_template.docx"); + InputStream is = new FileInputStream(file); + WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(is); + File png = new File("d:" + File.separator + "opt" + File.separator + "template" + File.separator + "badge.png"); + byte[] bytes = FileCopyUtils.copyToByteArray(new FileInputStream(png)); + addImageInlineToPackage(wordMLPackage, bytes); + addImageInlineAndTextToPackage(wordMLPackage, bytes, "这是图3,name.png,看图片的嵌入方式"); + wordMLPackage.save(new File("d:/opt/测试" + System.currentTimeMillis() + ".docx")); + } +} + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/mapper/OnlCgformAreaMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/mapper/OnlCgformAreaMapper.java index a2ce6e0fc..5ac7cbe61 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/mapper/OnlCgformAreaMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/mapper/OnlCgformAreaMapper.java @@ -25,6 +25,6 @@ public interface OnlCgformAreaMapper extends BaseMapper { "a.is_model,i.item_text as is_model_name,i.en_name as is_model_en_name,a.show_area,a.sort,a.en_name\n" + "from onl_cgform_area as a left join sys_dict_item as i \n" + "on a.is_model=i.item_value \n" + - "where i.dict_id=1493096744092102657 order by a.create_time desc") + "where i.dict_id=1493096744092102657 order by a.sort desc") IPage queryPageList(IPage page, @Param("params") Map params); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/mapper/xml/OnlCgformTagMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/mapper/xml/OnlCgformTagMapper.xml index 71fa8a590..83e7e67e5 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/mapper/xml/OnlCgformTagMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/mapper/xml/OnlCgformTagMapper.xml @@ -70,6 +70,6 @@ and f.show_area like concat('%',#{params.showArea},'%') - order by f.create_time desc + order by f.order_num desc \ No newline at end of file diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/service/impl/OnlCgformAreaServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/service/impl/OnlCgformAreaServiceImpl.java index 749239246..175831514 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/service/impl/OnlCgformAreaServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/service/impl/OnlCgformAreaServiceImpl.java @@ -17,6 +17,7 @@ import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @Description: 区域管理表 @@ -43,6 +44,34 @@ public class OnlCgformAreaServiceImpl extends ServiceImpl queryWrapper= new QueryWrapper<>(); + queryWrapper.orderByAsc("sort"); + queryWrapper.eq("sort", inputSort); + Integer orderNumCount = onlCgformAreaMapper.selectCount(queryWrapper); + if(orderNumCount > 0) {//有重复展示顺序的,后面的号全+1 + //设置排序 + QueryWrapper orderNumQueryWrapper = new QueryWrapper<>(); + orderNumQueryWrapper.ge("sort", inputSort) + .orderByAsc("sort"); + List geSortList = list(orderNumQueryWrapper); + + //判断相邻的序号,去掉不邻的 + for(int i = 0 ; i <= geSortList.size() ; i++) { + if (geSortList.size()==1){ + break; + }else if (geSortList.get(i + 1).getSort() - geSortList.get(i).getSort() > 1) { + int deleteStart = geSortList.get(i+1).getSort(); + geSortList = geSortList.stream().filter(e->e.getSort() < deleteStart).collect(Collectors.toList()); + break; + } + } + + geSortList.stream().forEach(e -> e.setSort(e.getSort() + 1)); + saveOrUpdateBatch(geSortList); + } + Date now = new Date(); onlCgformArea.setCreateTime(now); onlCgformArea.setUpdateTime(now); @@ -71,6 +100,35 @@ public class OnlCgformAreaServiceImpl extends ServiceImpl queryWrapper= new QueryWrapper<>(); + queryWrapper.orderByAsc("sort"); + Integer orderNumData = list(queryWrapper).stream().filter(e->e.getId().equals(onlCgformArea.getId())) + .map(e -> e.getSort()).collect(Collectors.toList()).get(0); + queryWrapper.eq("sort", inputSort); + Integer orderNumCount = onlCgformAreaMapper.selectCount(queryWrapper); + if(orderNumCount > 0 && !orderNumData.equals(inputSort)) {//有重复展示顺序的,后面的号全+1 + //设置排序 + QueryWrapper orderNumQueryWrapper = new QueryWrapper<>(); + orderNumQueryWrapper.ge("sort", inputSort) + .orderByAsc("sort"); + List geSortList = list(orderNumQueryWrapper); + + //判断相邻的序号,去掉不邻的 + for(int i = 0 ; i <= geSortList.size() ; i++) { + if (geSortList.size()==1){ + break; + }else if (geSortList.get(i + 1).getSort() - geSortList.get(i).getSort() > 1) { + int deleteStart = geSortList.get(i+1).getSort(); + geSortList = geSortList.stream().filter(e->e.getSort() < deleteStart).collect(Collectors.toList()); + break; + } + } + + geSortList.stream().forEach(e -> e.setSort(e.getSort() + 1)); + saveOrUpdateBatch(geSortList); + } Date now = new Date(); onlCgformArea.setUpdateTime(now); saveOrUpdate(onlCgformArea); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/service/impl/OnlCgformTagServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/service/impl/OnlCgformTagServiceImpl.java index 303c81a94..21d1de081 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/service/impl/OnlCgformTagServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/tag/service/impl/OnlCgformTagServiceImpl.java @@ -2,6 +2,7 @@ package com.jero.modules.tag.service.impl; import cn.hutool.core.lang.Validator; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -28,6 +29,7 @@ import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @Description: 标签管理 @@ -57,11 +59,43 @@ public class OnlCgformTagServiceImpl extends ServiceImpl 0) { onlCgformTag.setIsDelete(CommonConstant.DEL_FLAG_0); } else { + Integer inputOrderNum = onlCgformTag.getOrderNum(); + //查询展示顺序相同的 + QueryWrapper queryWrapper= new QueryWrapper<>(); + queryWrapper.eq("is_model",onlCgformTag.getIsModel()) + .eq("is_delete",CommonConstant.DEL_FLAG_0) + .orderByAsc("order_num"); + queryWrapper.eq("order_num", inputOrderNum); + Integer orderNumCount = onlCgformTagMapper.selectCount(queryWrapper); + if(orderNumCount > 0) {//有重复展示顺序的,后面的号全+1 + //设置排序 + QueryWrapper orderNumQueryWrapper = new QueryWrapper<>(); + orderNumQueryWrapper.ge("order_num", inputOrderNum) + .eq("is_model", onlCgformTag.getIsModel()) + .eq("is_delete", CommonConstant.DEL_FLAG_0) + .orderByAsc("order_num"); + List geOrderNumList = list(orderNumQueryWrapper); + + //判断相邻的序号,去掉不邻的 + for(int i = 0 ; i < geOrderNumList.size() ; i++) { + if (geOrderNumList.size() == 1){ + break; + }else if (geOrderNumList.get(i + 1).getOrderNum() - geOrderNumList.get(i).getOrderNum() > 1) { + int deleteStart = geOrderNumList.get(i+1).getOrderNum(); + geOrderNumList = geOrderNumList.stream().filter(e->e.getOrderNum() < deleteStart).collect(Collectors.toList()); + break; + } + } + + geOrderNumList.stream().forEach(e -> e.setOrderNum(e.getOrderNum() + 1)); + saveOrUpdateBatch(geOrderNumList); + } //处理DBLength为null的情况,默认为100 if (onlCgformTag.getDbLength() == null){ onlCgformTag.setDbLength(100); @@ -112,6 +146,7 @@ public class OnlCgformTagServiceImpl extends ServiceImpl queryWrapper= new QueryWrapper<>(); + queryWrapper.eq("is_model",onlCgformTag.getIsModel()) + .eq("is_delete",CommonConstant.DEL_FLAG_0) + .orderByAsc("order_num"); + Integer orderNumData = list(queryWrapper).stream().filter(e->e.getId().equals(onlCgformTag.getId())) + .map(e -> e.getOrderNum()).collect(Collectors.toList()).get(0); + queryWrapper.eq("order_num", inputOrderNum); + Integer orderNumCount = onlCgformTagMapper.selectCount(queryWrapper); + if(orderNumCount > 0 && !orderNumData.equals(inputOrderNum)) {//有重复展示顺序的,后面的号全+1 + //设置排序 + QueryWrapper orderNumQueryWrapper = new QueryWrapper<>(); + orderNumQueryWrapper.ge("order_num", inputOrderNum) + .eq("is_model", onlCgformTag.getIsModel()) + .eq("is_delete", CommonConstant.DEL_FLAG_0) + .orderByAsc("order_num"); + List geOrderNumList = list(orderNumQueryWrapper); + + //判断相邻的序号,去掉不邻的 + for(int i = 0 ; i < geOrderNumList.size() ; i++) { + if (geOrderNumList.size()==1){ + break; + }else if (geOrderNumList.get(i + 1).getOrderNum() - geOrderNumList.get(i).getOrderNum() > 1) { + int deleteStart = geOrderNumList.get(i+1).getOrderNum(); + geOrderNumList = geOrderNumList.stream().filter(e->e.getOrderNum() < deleteStart).collect(Collectors.toList()); + break; + } + } + + geOrderNumList.stream().forEach(e -> e.setOrderNum(e.getOrderNum() + 1)); + saveOrUpdateBatch(geOrderNumList); + } + //字段名称设置成拼音+下划线,存入数据库 String pinYin = HanYuPinYinUtil.changeToNumberPinYin(onlCgformTag.getDbFieldTxt()); onlCgformTag.setDbFieldName(pinYin.replace(" ","_")); diff --git a/jero-web/src/common/lang/en-us.js b/jero-web/src/common/lang/en-us.js index 30eb171e4..aed6f2ffe 100644 --- a/jero-web/src/common/lang/en-us.js +++ b/jero-web/src/common/lang/en-us.js @@ -887,4 +887,7 @@ module.exports = { myNews:'My News', monthlyReportRegulations:'Monthly report regulations', Pending:'Pending', + custom:'Custom', + notSelected:'Not selected', + ExportReport:'Export Report', } \ No newline at end of file diff --git a/jero-web/src/common/lang/zh-cn.js b/jero-web/src/common/lang/zh-cn.js index 79cfaced8..ea9be36ef 100644 --- a/jero-web/src/common/lang/zh-cn.js +++ b/jero-web/src/common/lang/zh-cn.js @@ -892,4 +892,7 @@ module.exports = { myNews:'我的消息', monthlyReportRegulations:'法规月报', Pending:'待处理', + custom:'自定义', + notSelected:'未选择', + ExportReport:'导出报告', } \ No newline at end of file diff --git a/jero-web/src/components/layouts/TabLayout.vue b/jero-web/src/components/layouts/TabLayout.vue index e76180cd4..e4681ca78 100644 --- a/jero-web/src/components/layouts/TabLayout.vue +++ b/jero-web/src/components/layouts/TabLayout.vue @@ -95,6 +95,7 @@ this.$route.path == '/handshakeProcess' || this.$route.path == '/historicalVersion' || this.$route.path == '/dashboard/analysis' || + this.$route.path == '/customContentList' || this.$route.path == '/processDetails') { return false } else { diff --git a/jero-web/src/views/dashboard/components/customContent.vue b/jero-web/src/views/dashboard/components/customContent.vue index 170c1698e..850a76df2 100644 --- a/jero-web/src/views/dashboard/components/customContent.vue +++ b/jero-web/src/views/dashboard/components/customContent.vue @@ -12,16 +12,116 @@
我的收藏
-
+
-
自定义
+
{{$t('custom')}}
+ +
{{$t('selected')}}:
+
+
+
+
+ +
{{item.iconName}}
+
+
+
+
+
+
{{$t('notSelected')}}:
+
+
+
+
+ +
{{item.iconName}}
+
+
+
+
+
@@ -34,6 +134,8 @@ text-align: center; display: inline-block; margin-right: 30px; + cursor: pointer; + .img { width: 44px; height: 44px; @@ -48,4 +150,45 @@ } } } + + .selected { + font-size: 16px; + font-family: Blue Sky Noto; + font-weight: 400; + color: #040B29; + margin-bottom: 20px; + } + + .box-model { + width: 100%; + + .box-top { + text-align: center; + display: inline-block; + margin-right: 30px; + cursor: pointer; + margin-bottom: 30px; + + .img { + width: 44px; + height: 44px; + } + + .text { + font-size: 16px; + font-family: Blue Sky Noto; + font-weight: 400; + color: #040B29; + margin-top: 8px; + } + } + } + + .xian { + width: 100%; + height: 2px; + background: #CED0D8; + margin-top: 10px; + margin-bottom: 30px; + } \ No newline at end of file diff --git a/jero-web/src/views/dashboard/components/documentDynamics.vue b/jero-web/src/views/dashboard/components/documentDynamics.vue index f1b55c04b..487bfa134 100644 --- a/jero-web/src/views/dashboard/components/documentDynamics.vue +++ b/jero-web/src/views/dashboard/components/documentDynamics.vue @@ -2,26 +2,78 @@
{{this.$t('documentDynamics')}}
-
+
{{$t('more')}}
-
-
+
+
-
文档库中新增了新的标准 GB 7258 机动车文件
- -
2022-04-04 12:00:00
+
{{item.msgContent}}
+ +
{{item.createTime}}
+
+ +
+ {{$t('dataLoading')}}
@@ -45,6 +97,7 @@ font-weight: 400; color: #9B9DA9; margin-top: 6px; + cursor: pointer; } } diff --git a/jero-web/src/views/dashboard/customContentList.vue b/jero-web/src/views/dashboard/customContentList.vue new file mode 100644 index 000000000..d32189063 --- /dev/null +++ b/jero-web/src/views/dashboard/customContentList.vue @@ -0,0 +1,199 @@ + + + + + + \ No newline at end of file diff --git a/jero-web/src/views/projectManagement/ParameterItemCollection/ProjectDetails/index.vue b/jero-web/src/views/projectManagement/ParameterItemCollection/ProjectDetails/index.vue index dc15a49ad..15d6a4cec 100644 --- a/jero-web/src/views/projectManagement/ParameterItemCollection/ProjectDetails/index.vue +++ b/jero-web/src/views/projectManagement/ParameterItemCollection/ProjectDetails/index.vue @@ -52,7 +52,7 @@
- +
@@ -73,6 +73,7 @@ import updateLog from '@/components/UpdateLog/index' import historicalVersionList from '@/views/projectManagement/components/historicalVersionList' import commentList from '@/views/projectManagement/components/commentList' + import { getAction, postAction, deleteAction, downloadFile } from '@/api/manage' export default { name: 'ProjectDetails', @@ -90,15 +91,18 @@ return { title: this.$t('projectDetails'), textTitle: '认证参数收集', + isDisplayNum: '', url: { logList: '/project/projectLawsInventoryLogEO/page', - historicalVersionUrl: '' + historicalVersionUrl: '', + queryUserPremissionByProjectLibraryId: '/project/projectCertificationDirectoryEO/queryUserPremissionByProjectLibraryId' }, paramsManifest: {} } }, mounted() { this.textColor() + this.getTaskId() // 清单信息 this.paramsManifest = JSON.parse(localStorage.getItem('paramsManifest')) }, @@ -130,6 +134,16 @@ }, commentClick() { this.$refs.commentListRef.getData() + }, + getTaskId() { + let query = { + projectLibraryId: this.$route.query.id + } + getAction(this.url.queryUserPremissionByProjectLibraryId, query).then((res) => { + if (res.success) { + this.isDisplayNum = res.result + } + }) } } } diff --git a/jero-web/src/views/projectManagement/ProjectDetails/index.vue b/jero-web/src/views/projectManagement/ProjectDetails/index.vue index e4c4eac73..027c97496 100644 --- a/jero-web/src/views/projectManagement/ProjectDetails/index.vue +++ b/jero-web/src/views/projectManagement/ProjectDetails/index.vue @@ -2,9 +2,9 @@
- - - + + + {{this.title}} @@ -51,7 +51,7 @@
- +
@@ -72,6 +72,7 @@ import updateLog from '@/components/UpdateLog/index' import historicalVersionList from '../components/historicalVersionList' import commentList from '../components/commentList' + import { getAction, postAction, deleteAction, downloadFile } from '@/api/manage' export default { name: 'ProjectDetails', @@ -88,15 +89,18 @@ data() { return { title: this.$t('projectDetails'), + isDisplayNum:'', textTitle: '项目详情', url: { logList: '/project/projectLawsInventoryLogEO/page', - historicalVersionUrl: '' + historicalVersionUrl: '', + queryUserPremissionByProjectLibraryId: '/project/projectCertificationDirectoryEO/queryUserPremissionByProjectLibraryId' } } }, mounted() { this.textColor() + this.getTaskId() }, methods: { textColor() { @@ -119,13 +123,23 @@ text[num].classList.add('Virtual-detail-left-text-color') }, UpdateLogClick() { - this.$refs.updateLogRef.getList({projectLibraryId: this.$route.query.id}) + this.$refs.updateLogRef.getList({ projectLibraryId: this.$route.query.id }) }, historicalVersionClick() { this.$refs.historicalVersionListRef.getList() }, commentClick() { this.$refs.commentListRef.getData() + }, + getTaskId() { + let query = { + projectLibraryId: this.$route.query.id + } + getAction(this.url.queryUserPremissionByProjectLibraryId, query).then((res) => { + if (res.success) { + this.isDisplayNum = res.result + } + }) } } } diff --git a/jero-web/src/views/projectManagement/components/TaskList.vue b/jero-web/src/views/projectManagement/components/TaskList.vue index bcac01a40..50c4584c2 100644 --- a/jero-web/src/views/projectManagement/components/TaskList.vue +++ b/jero-web/src/views/projectManagement/components/TaskList.vue @@ -124,7 +124,7 @@
- + @@ -141,6 +141,7 @@ certificationDirectory, TaskListModel }, + props:['isDisplayNum'], data() { return { columns: [ diff --git a/jero-web/src/views/projectManagement/components/certificationDirectory.vue b/jero-web/src/views/projectManagement/components/certificationDirectory.vue index fdcb2c933..ec6e90de3 100644 --- a/jero-web/src/views/projectManagement/components/certificationDirectory.vue +++ b/jero-web/src/views/projectManagement/components/certificationDirectory.vue @@ -11,7 +11,7 @@ style="height: 100%;overflow: auto;padding-bottom: 53px;">
-
+
{{$t('add')}}
@@ -73,13 +73,14 @@ certificationDirectoryAdd, viewFileModel }, + props: ['isDisplayNum'], data() { return { visible: false, queryParam: {}, confirmLoading: false, selectedRowKeys: [], - columns: [ + columnsAll: [ { title: this.$t('directoryName'), dataIndex: 'directoryName', @@ -143,6 +144,20 @@ } } }, + computed: { + columns() { + let columnResult = JSON.parse(JSON.stringify(this.columnsAll)) + if (this.isDisplayNum != 2) { + for (var i = 0; i < columnResult.length; i++) { + if (columnResult[i].title === this.$t('operation')) { + columnResult.splice(i, 1) + i-- + } + } + } + return columnResult + } + }, mounted() { }, diff --git a/jero-web/src/views/projectManagement/components/certificationProgressEchart.vue b/jero-web/src/views/projectManagement/components/certificationProgressEchart.vue index 36acb5923..bed58d4bd 100644 --- a/jero-web/src/views/projectManagement/components/certificationProgressEchart.vue +++ b/jero-web/src/views/projectManagement/components/certificationProgressEchart.vue @@ -78,9 +78,11 @@ getData() { getAction(this.url.getProjectDetailsStatistics, { id: this.$route.query.id }).then((res) => { if (res.success) { - let certificationProgressMap = res.result.certificationProgressMap.certificationProgressMapList || [] - this.certificationProgressTotal = res.result.certificationProgressMap.certificationProgressTotal - this.dataEcharts(certificationProgressMap) + if (res.result) { + let certificationProgressMap = res.result.certificationProgressMap ? res.result.certificationProgressMap.certificationProgressMapList : [] + this.certificationProgressTotal = res.result.certificationProgressMap ? res.result.certificationProgressMap.certificationProgressTotal : 0 + this.dataEcharts(certificationProgressMap) + } } }) }, diff --git a/jero-web/src/views/projectManagement/components/currentStatusOfTheProjectEcharts.vue b/jero-web/src/views/projectManagement/components/currentStatusOfTheProjectEcharts.vue index 271ab0c35..d83b48662 100644 --- a/jero-web/src/views/projectManagement/components/currentStatusOfTheProjectEcharts.vue +++ b/jero-web/src/views/projectManagement/components/currentStatusOfTheProjectEcharts.vue @@ -79,10 +79,11 @@ getData() { getAction(this.url.getProjectDetailsStatistics, { id: this.$route.query.id }).then((res) => { if (res.success) { - this.dataSource = [{}] - let dataSource = res.result.currentProjectStatusMap.currentProjectStatusMapList || [] - this.mainLeftEcharts(dataSource) - this.currentProjectStatusTotal = res.result.currentProjectStatusMap.currentProjectStatusTotal + if (res.result) { + let dataSource = res.result.currentProjectStatusMap ? res.result.currentProjectStatusMap.currentProjectStatusMapList : [] + this.mainLeftEcharts(dataSource) + this.currentProjectStatusTotal = res.result.currentProjectStatusMap ? res.result.currentProjectStatusMap.currentProjectStatusTotal : 0 + } } }) }, @@ -125,8 +126,8 @@ let query = { title: params.seriesName, projectLibraryId: this.$route.query.id, - operatorType:'queryCurrentProjectStatusStatistics', - conditionAssessment:params.data.value + operatorType: 'queryCurrentProjectStatusStatistics', + conditionAssessment: params.data.color } this.$refs.responsibilityListRef.getData(query) }) @@ -135,32 +136,37 @@ let data = [] let color = [] if (dataSource && dataSource.length > 0) { + this.dataSource = [{}] dataSource.forEach(res => { if (res.color == '4') { data.push({ value: res.conditionAssessmentCount, - name: this.$t('blue') + name: this.$t('blue'), + color: res.color }) color.push('#00B3BE') this.dataSource[0].blueCount = res.conditionAssessmentCount } else if (res.color == '1') { data.push({ value: res.conditionAssessmentCount, - name: this.$t('red') + name: this.$t('red'), + color: res.color }) color.push('#E83030') this.dataSource[0].redCount = res.conditionAssessmentCount } else if (res.color == '2') { data.push({ value: res.conditionAssessmentCount, - name: this.$t('yellow') + name: this.$t('yellow'), + color: res.color }) color.push('#FDA71C') this.dataSource[0].yellowCount = res.conditionAssessmentCount } else if (res.color == '3') { data.push({ value: res.conditionAssessmentCount, - name: this.$t('green') + name: this.$t('green'), + color: res.color }) this.dataSource[0].greenCount = res.conditionAssessmentCount color.push('#26BD4B') diff --git a/jero-web/src/views/projectManagement/components/deliverableStatusEchart.vue b/jero-web/src/views/projectManagement/components/deliverableStatusEchart.vue index 04f4dd81b..6c120bd6a 100644 --- a/jero-web/src/views/projectManagement/components/deliverableStatusEchart.vue +++ b/jero-web/src/views/projectManagement/components/deliverableStatusEchart.vue @@ -54,16 +54,20 @@ getData() { getAction(this.url.getProjectDetailsStatistics, { id: this.$route.query.id }).then((res) => { if (res.success) { - let listingToConfirmMap = res.result.listingToConfirmMap.listingToConfirmMapList || [] - let taskToConfirmMap = res.result.taskToConfirmMap.taskToConfirmMapList || [] - let designComplianceMap = res.result.designComplianceMap.designComplianceMapList || [] - let prehomoMap = res.result.prehomoMap.prehomoMapList || [] - let verifyComplianceMap = res.result.verifyComplianceMap.verifyComplianceMapList || [] - this.dataEcharts(listingToConfirmMap, 1) - this.dataEcharts(taskToConfirmMap, 2) - this.dataEchartsOne(designComplianceMap, 1) - this.dataEchartsOne(prehomoMap, 2) - this.dataEchartsOne(verifyComplianceMap, 3) + if (res.result){ + + let listingToConfirmMap = res.result.listingToConfirmMap ? res.result.listingToConfirmMap.listingToConfirmMapList : [] + let taskToConfirmMap = res.result.taskToConfirmMap ? res.result.taskToConfirmMap.taskToConfirmMapList : [] + let designComplianceMap = res.result.designComplianceMap ? res.result.designComplianceMap.designComplianceMapList : [] + let prehomoMap = res.result.prehomoMap ? res.result.prehomoMap.prehomoMapList : [] + let verifyComplianceMap = res.result.verifyComplianceMap ? res.result.verifyComplianceMap.verifyComplianceMapList : [] + this.dataEcharts(listingToConfirmMap, 1) + this.dataEcharts(taskToConfirmMap, 2) + this.dataEchartsOne(designComplianceMap, 1) + this.dataEchartsOne(prehomoMap, 2) + this.dataEchartsOne(verifyComplianceMap, 3) + } + } }) }, diff --git a/jero-web/src/views/projectManagement/components/listOfRegulations.vue b/jero-web/src/views/projectManagement/components/listOfRegulations.vue index 015f896d9..ac1624006 100644 --- a/jero-web/src/views/projectManagement/components/listOfRegulations.vue +++ b/jero-web/src/views/projectManagement/components/listOfRegulations.vue @@ -5,35 +5,35 @@
- - -
-
- {{ $t('standard') }} + + +
+
+ {{ $t('standard') }} +
+
- -
- - -
-
- {{ $t('title') }} + + +
+
+ {{ $t('title') }} +
+
- -
- - -
-
- {{ $t('subtitle') }} + + +
+
+ {{ $t('subtitle') }} +
+
- -
- - + + {{ $t('reset') }} - +
@@ -88,6 +88,10 @@ {{ $t('bringInRelevantPersonnel') }}
+
+ + {{ $t('ExportReport') }} +
...{{ $t('more') }} @@ -653,7 +657,7 @@ queryParam: {}, url: { addModelList: '/project/projectLawsInventoryEO/queryPageDummy', - queryConditionInventory:'/project/projectLawsInventoryEO/queryConditionInventory', + queryConditionInventory: '/project/projectLawsInventoryEO/queryConditionInventory', list: '/project/projectLawsInventoryEO/list', addModel: 'project/projectLawsInventoryEO/add', editModel: '/project/projectLawsInventoryEO/edit', @@ -667,7 +671,8 @@ exportData: '/project/projectLawsInventoryEO/exportData', setBatch: '/project/projectLawsInventoryEO/setBatch',//批量设置 copyUrl: '/project/projectLawsInventoryEO/copyInfoByIds',//复制 - transferUrl: '/project/projectLawsInventoryEO/getPageInfoDummy'//调取 + transferUrl: '/project/projectLawsInventoryEO/getPageInfoDummy',//调取 + ExportReportUrl: '/project/projectLawsInventoryEO/downloadDocxReport' }, downLoadFileUrl: window._CONFIG['domianPreviewURL'] + '/sys/common/download', loading: false, @@ -735,6 +740,16 @@ handleModule() { downloadFile(this.url.exportTemplate, this.$t('listOfRegulations') + this.$t('importTemplate') + '.xls', {}) }, + ExportReportClick() { + let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys)) + if (selectedRowKeys && selectedRowKeys.length == 0) { + this.$message.warning(this.$t('pleaseSelectData')) + } else if (selectedRowKeys.length > 1) { + this.$message.warning(this.$t('OnlyOneSelected')) + } else { + downloadFile(this.url.ExportReportUrl, this.$t('listOfRegulations') + this.$t('ExportReport') + '.docx', { id: selectedRowKeys.join(',') }) + } + }, handleExport() { let selectedRowKeys = JSON.parse(JSON.stringify(this.selectedRowKeys)) let query = { @@ -824,7 +839,7 @@ changeInterface() { let _this = this this.$confirm({ - width:760, + width: 760, content: _this.$t('NoteConfirmTheChange'), onOk() { let idList = JSON.parse(JSON.stringify(_this.selectedRowKeys)) diff --git a/jero-web/src/views/system/UserAnnouncementList.vue b/jero-web/src/views/system/UserAnnouncementList.vue index ea9320e79..34f963452 100644 --- a/jero-web/src/views/system/UserAnnouncementList.vue +++ b/jero-web/src/views/system/UserAnnouncementList.vue @@ -228,7 +228,6 @@ background-color: #ffffff } - z .ant-modal-cust-warp { height: 100% } diff --git a/jero-web/src/views/system/UserList.vue b/jero-web/src/views/system/UserList.vue index e774203ae..ca08b72d2 100644 --- a/jero-web/src/views/system/UserList.vue +++ b/jero-web/src/views/system/UserList.vue @@ -125,7 +125,7 @@ - + @@ -251,16 +251,15 @@ }, methods: { onSelectChange(val,value) { - console.log(val) - console.log(value) this.selectedRowKeys = val this.selectedRowKeysvalue = value }, - rolehandleOk() { - console.log('角色配置得弹框控制') - }, RoleAssignment: function(){ - this.rolevisible = true + if(this.selectedRowKeys.length == 0) { + this.$message.warning(this.$t('selectLeastOne')) + } else { + this.rolevisible = true + } }, getAvatarView: function(avatar) { return getFileAccessHttpUrl(avatar) diff --git a/jero-web/src/views/system/modules/RoleAssignment.vue b/jero-web/src/views/system/modules/RoleAssignment.vue index e60dfd480..c4e24e2b6 100644 --- a/jero-web/src/views/system/modules/RoleAssignment.vue +++ b/jero-web/src/views/system/modules/RoleAssignment.vue @@ -12,15 +12,11 @@ - - - {{ role.roleName }} + + + + {{ role.roleName }} + @@ -54,7 +50,7 @@ export default { loading: false, editId: '', newVisible: false, - selectedRole: '', + selectedRole: undefined, labelCol: { xs: { span: 24 }, sm: { span: 7 } @@ -71,12 +67,13 @@ export default { confirmLoading: false, selectedRowKeys: [], roleList: [], + defaultValue: undefined } }, props: { selectedRowKeysArray: { - type: String, - default: '', + type: Array, + default: [], require: true } }, @@ -86,8 +83,7 @@ export default { methods: { loadData() { this.loading = true - let params = {} - getAction(`sys/role/queryall`, params).then(res => { + getAction(`sys/role/queryall`, {}).then(res => { if (res.success) { this.roleList = [...res.result] } @@ -95,24 +91,13 @@ export default { this.loading = false }) }, - searchQuery() { - this.loadData() - }, - searchReset() { - this.form = {} - this.loadData() - }, handleCancel() { this.$emit('areaVisibleTaskCutOffTimeflag', false) }, - handleTableChange(val) { - }, //保存 handleSubmit() { - console.log(this.selectedRole,'llllllll') - let _this = this - let param = {ids: this.selectedRowKeysArray, deadline: `${this.pickerDate}`, } - postAction('/params/collectManifest/updateDeadlineBatch', param).then((res) => { + let param = {ids: this.selectedRowKeysArray.join(','), selectedroles: `${this.selectedRole.join(',')}` } + postAction('/sys/user/setRole', param).then((res) => { if (res.success) { this.$emit('areaVisibleTaskCutOffTimeflag', false) this.$message.success(res.message) @@ -120,13 +105,7 @@ export default { this.$message.warning(res.message) } }) - }, - onChange(val) { - this.pickerDate = moment(val).format('YYYY-MM-DD HH:mm:ss') - }, - onOk(val) { - this.pickerDate = moment(val).format('YYYY-MM-DD HH:mm:ss') - }, + } } }