|
@@ -0,0 +1,386 @@
|
|
|
|
+/**
|
|
|
|
+ * Copyright © 2015-2020 <a href="http://www.jeeplus.org/">JeePlus</a> All rights reserved.
|
|
|
|
+ */
|
|
|
|
+package com.jeeplus.modules.projectAccessory.web;
|
|
|
|
+
|
|
|
|
+import com.google.common.collect.Lists;
|
|
|
|
+import com.google.common.collect.Maps;
|
|
|
|
+import com.jeeplus.common.config.Global;
|
|
|
|
+import com.jeeplus.common.persistence.Page;
|
|
|
|
+import com.jeeplus.common.utils.DateUtils;
|
|
|
|
+import com.jeeplus.common.utils.MyBeanUtils;
|
|
|
|
+import com.jeeplus.common.utils.StringUtils;
|
|
|
|
+import com.jeeplus.common.utils.excel.ExportExcel;
|
|
|
|
+import com.jeeplus.common.utils.excel.ImportExcel;
|
|
|
|
+import com.jeeplus.common.web.BaseController;
|
|
|
|
+import com.jeeplus.modules.projectAccessory.entity.ProjectAccessoryInfo;
|
|
|
|
+import com.jeeplus.modules.projectAccessory.entity.ProjectAccessoryTree;
|
|
|
|
+import com.jeeplus.modules.projectAccessory.service.ProjectAccessoryService;
|
|
|
|
+import com.jeeplus.modules.workclientinfo.entity.WorkClientAttachment;
|
|
|
|
+import org.apache.shiro.authz.annotation.Logical;
|
|
|
|
+import org.apache.shiro.authz.annotation.RequiresPermissions;
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
+import org.springframework.stereotype.Controller;
|
|
|
|
+import org.springframework.ui.Model;
|
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
|
|
|
+
|
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
|
+import javax.validation.ConstraintViolationException;
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
+import java.util.HashMap;
|
|
|
|
+import java.util.List;
|
|
|
|
+import java.util.Map;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 附件结构Controller
|
|
|
|
+ * @author 徐滕
|
|
|
|
+ * @version 2020-10-23
|
|
|
|
+ */
|
|
|
|
+@Controller
|
|
|
|
+@RequestMapping(value = "${adminPath}/projectAccessory/projectAccessory")
|
|
|
|
+public class ProjectAccessoryController extends BaseController {
|
|
|
|
+
|
|
|
|
+ @Autowired
|
|
|
|
+ private ProjectAccessoryService projectAccessoryService;
|
|
|
|
+
|
|
|
|
+ @ModelAttribute
|
|
|
|
+ public ProjectAccessoryInfo get(@RequestParam(required=false) String id) {
|
|
|
|
+ ProjectAccessoryInfo entity = null;
|
|
|
|
+ if (StringUtils.isNotBlank(id)){
|
|
|
|
+ entity = projectAccessoryService.get(id);
|
|
|
|
+ }
|
|
|
|
+ if (entity == null){
|
|
|
|
+ entity = new ProjectAccessoryInfo();
|
|
|
|
+ }
|
|
|
|
+ return entity;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 附件结构列表页面
|
|
|
|
+ * @param projectAccessoryInfo
|
|
|
|
+ * @param model
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions("projectAccessory:projectAccessory:list")
|
|
|
|
+ @RequestMapping(value = {"list", ""})
|
|
|
|
+ public String list(ProjectAccessoryInfo projectAccessoryInfo, Model model) {
|
|
|
|
+ List<ProjectAccessoryInfo> list = projectAccessoryService.findList(projectAccessoryInfo);
|
|
|
|
+ projectAccessoryService.queryProofread(list);
|
|
|
|
+ model.addAttribute("list", list);
|
|
|
|
+ return "modules/projectAccessory/projectAccessoryList";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 查看,增加,编辑附件结构表单页面
|
|
|
|
+ * @param projectAccessoryInfo
|
|
|
|
+ * @param model
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions(value={"projectAccessory:projectAccessory:view","projectAccessory:projectAccessory:add","projectAccessory:projectAccessory:edit"},logical=Logical.OR)
|
|
|
|
+ @RequestMapping(value = "form")
|
|
|
|
+ public String form(ProjectAccessoryInfo projectAccessoryInfo, Model model) {
|
|
|
|
+ if(projectAccessoryInfo!=null&&projectAccessoryInfo.getParent()!=null&&StringUtils.isNotBlank(projectAccessoryInfo.getParent().getId())){
|
|
|
|
+ ProjectAccessoryInfo parent = projectAccessoryService.get(projectAccessoryInfo.getParent().getId());
|
|
|
|
+ projectAccessoryInfo.setParent(parent);
|
|
|
|
+ List<ProjectAccessoryInfo> list = new ArrayList<>();
|
|
|
|
+ list.add(projectAccessoryInfo);
|
|
|
|
+ projectAccessoryService.queryProofread(list);
|
|
|
|
+ }
|
|
|
|
+ model.addAttribute("projectAccessoryInfo", projectAccessoryInfo);
|
|
|
|
+ return "modules/projectAccessory/projectAccessoryForm";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 查看
|
|
|
|
+ * @param projectAccessoryInfo
|
|
|
|
+ * @param model
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions(value={"projectAccessory:projectAccessory:view","projectAccessory:projectAccessory:add","projectAccessory:projectAccessory:edit"},logical=Logical.OR)
|
|
|
|
+ @RequestMapping(value = "view")
|
|
|
|
+ public String view(ProjectAccessoryInfo projectAccessoryInfo, Model model) {
|
|
|
|
+ if(projectAccessoryInfo!=null&&projectAccessoryInfo.getParent()!=null&&StringUtils.isNotBlank(projectAccessoryInfo.getParent().getId())){
|
|
|
|
+ ProjectAccessoryInfo parent = projectAccessoryService.get(projectAccessoryInfo.getParent().getId());
|
|
|
|
+ projectAccessoryInfo.setParent(parent);
|
|
|
|
+ List<ProjectAccessoryInfo> list = new ArrayList<>();
|
|
|
|
+ list.add(projectAccessoryInfo);
|
|
|
|
+ projectAccessoryService.queryProofread(list);
|
|
|
|
+ }
|
|
|
|
+ model.addAttribute("projectAccessoryInfo", projectAccessoryInfo);
|
|
|
|
+ return "modules/projectAccessory/projectAccessoryView";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 保存附件结构
|
|
|
|
+ * @param projectAccessoryInfo
|
|
|
|
+ * @param model
|
|
|
|
+ * @param redirectAttributes
|
|
|
|
+ * @return
|
|
|
|
+ * @throws Exception
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions(value={"projectAccessory:projectAccessory:add","projectAccessory:projectAccessory:edit"},logical=Logical.OR)
|
|
|
|
+ @RequestMapping(value = "save")
|
|
|
|
+ public String save(ProjectAccessoryInfo projectAccessoryInfo, Model model, RedirectAttributes redirectAttributes) throws Exception{
|
|
|
|
+ if (!beanValidator(model, projectAccessoryInfo)){
|
|
|
|
+ return form(projectAccessoryInfo, model);
|
|
|
|
+ }
|
|
|
|
+ if(!projectAccessoryInfo.getIsNewRecord()){//编辑表单保存
|
|
|
|
+ ProjectAccessoryInfo t = projectAccessoryService.get(projectAccessoryInfo.getId());//从数据库取出记录的值
|
|
|
|
+ MyBeanUtils.copyBeanNotNull2Bean(projectAccessoryInfo, t);//将编辑表单中的非NULL值覆盖数据库记录中的值
|
|
|
|
+ projectAccessoryService.save(t);//保存
|
|
|
|
+ }else{//新增表单保存
|
|
|
|
+ projectAccessoryService.save(projectAccessoryInfo);//保存
|
|
|
|
+ }
|
|
|
|
+ addMessage(redirectAttributes, "保存附件结构成功");
|
|
|
|
+ return "redirect:"+Global.getAdminPath()+"/projectAccessory/projectAccessory/?repage";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 删除附件结构
|
|
|
|
+ * @param projectAccessoryInfo
|
|
|
|
+ * @param redirectAttributes
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions("projectAccessory:projectAccessory:del")
|
|
|
|
+ @RequestMapping(value = "delete")
|
|
|
|
+ public String delete(ProjectAccessoryInfo projectAccessoryInfo, RedirectAttributes redirectAttributes) {
|
|
|
|
+ projectAccessoryService.delete(projectAccessoryInfo);
|
|
|
|
+ addMessage(redirectAttributes, "删除附件结构成功");
|
|
|
|
+ return "redirect:"+Global.getAdminPath()+"/projectAccessory/projectAccessory/?repage";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 批量删除附件结构
|
|
|
|
+ * @param ids
|
|
|
|
+ * @param redirectAttributes
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions("projectAccessory:projectAccessory:del")
|
|
|
|
+ @RequestMapping(value = "deleteAll")
|
|
|
|
+ public String deleteAll(String ids, RedirectAttributes redirectAttributes) {
|
|
|
|
+ String idArray[] =ids.split(",");
|
|
|
|
+ for(String id : idArray){
|
|
|
|
+ projectAccessoryService.delete(projectAccessoryService.get(id));
|
|
|
|
+ }
|
|
|
|
+ addMessage(redirectAttributes, "删除附件结构成功");
|
|
|
|
+ return "redirect:"+Global.getAdminPath()+"/projectAccessory/projectAccessory/?repage";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 导出excel文件
|
|
|
|
+ * @param projectAccessoryInfo
|
|
|
|
+ * @param request
|
|
|
|
+ * @param response
|
|
|
|
+ * @param redirectAttributes
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions("projectAccessory:projectAccessory:export")
|
|
|
|
+ @RequestMapping(value = "export", method=RequestMethod.POST)
|
|
|
|
+ public String exportFile(ProjectAccessoryInfo projectAccessoryInfo, HttpServletRequest request, HttpServletResponse response, RedirectAttributes redirectAttributes) {
|
|
|
|
+ try {
|
|
|
|
+ String fileName = "附件结构"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";
|
|
|
|
+ Page<ProjectAccessoryInfo> page = projectAccessoryService.findPage(new Page<ProjectAccessoryInfo>(request, response, -1), projectAccessoryInfo);
|
|
|
|
+ new ExportExcel("附件结构", ProjectAccessoryInfo.class).setDataList(page.getList()).write(response, fileName).dispose();
|
|
|
|
+ return null;
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ addMessage(redirectAttributes, "导出附件结构记录失败!失败信息:"+e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ return "redirect:"+Global.getAdminPath()+"/projectAccessory/projectAccessory/?repage";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 导入Excel数据
|
|
|
|
+ * @param file
|
|
|
|
+ * @param redirectAttributes
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions("projectAccessory:projectAccessory:import")
|
|
|
|
+ @RequestMapping(value = "import", method=RequestMethod.POST)
|
|
|
|
+ public String importFile(MultipartFile file, RedirectAttributes redirectAttributes) {
|
|
|
|
+ try {
|
|
|
|
+ int successNum = 0;
|
|
|
|
+ int failureNum = 0;
|
|
|
|
+ StringBuilder failureMsg = new StringBuilder();
|
|
|
|
+ ImportExcel ei = new ImportExcel(file, 1, 0);
|
|
|
|
+ List<ProjectAccessoryInfo> list = ei.getDataList(ProjectAccessoryInfo.class);
|
|
|
|
+ for (ProjectAccessoryInfo projectAccessoryInfo : list){
|
|
|
|
+ try{
|
|
|
|
+ projectAccessoryService.save(projectAccessoryInfo);
|
|
|
|
+ successNum++;
|
|
|
|
+ }catch(ConstraintViolationException ex){
|
|
|
|
+ failureNum++;
|
|
|
|
+ }catch (Exception ex) {
|
|
|
|
+ failureNum++;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ if (failureNum>0){
|
|
|
|
+ failureMsg.insert(0, ",失败 "+failureNum+" 条附件结构记录。");
|
|
|
|
+ }
|
|
|
|
+ addMessage(redirectAttributes, "已成功导入 "+successNum+" 条附件结构记录"+failureMsg);
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ addMessage(redirectAttributes, "导入附件结构失败!失败信息:"+e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ return "redirect:"+Global.getAdminPath()+"/projectAccessory/projectAccessory/?repage";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 下载导入附件结构数据模板
|
|
|
|
+ * @param response
|
|
|
|
+ * @param redirectAttributes
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions("projectAccessory:projectAccessory:import")
|
|
|
|
+ @RequestMapping(value = "import/template")
|
|
|
|
+ public String importFileTemplate(HttpServletResponse response, RedirectAttributes redirectAttributes) {
|
|
|
|
+ try {
|
|
|
|
+ String fileName = "附件结构数据导入模板.xlsx";
|
|
|
|
+ List<ProjectAccessoryInfo> list = Lists.newArrayList();
|
|
|
|
+ new ExportExcel("附件结构数据", ProjectAccessoryInfo.class, 1).setDataList(list).write(response, fileName).dispose();
|
|
|
|
+ return null;
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ addMessage(redirectAttributes, "导入模板下载失败!失败信息:"+e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ return "redirect:"+Global.getAdminPath()+"/projectAccessory/projectAccessory/?repage";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 获取机构JSON数据。
|
|
|
|
+ *
|
|
|
|
+ * @param extId 排除的ID
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequiresPermissions("user")
|
|
|
|
+ @ResponseBody
|
|
|
|
+ @RequestMapping(value = "treeData")
|
|
|
|
+ public List<Map<String, Object>> treeData(@RequestParam(required = false) String extId) {
|
|
|
|
+ List<Map<String, Object>> mapList = Lists.newArrayList();
|
|
|
|
+ List<ProjectAccessoryInfo> list = projectAccessoryService.findTreeList(new ProjectAccessoryInfo());
|
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
|
+ ProjectAccessoryInfo e = list.get(i);
|
|
|
|
+ if ((StringUtils.isBlank(extId) || (extId != null && !extId.equals(e.getId()) && e.getParentIds().indexOf("," + extId + ",") == -1)) ) {
|
|
|
|
+ Map<String, Object> map = Maps.newHashMap();
|
|
|
|
+ map.put("id", e.getId());
|
|
|
|
+ map.put("pId", e.getParentId());
|
|
|
|
+ map.put("pIds", e.getParentIds());
|
|
|
|
+ map.put("name", e.getStandardDetail());
|
|
|
|
+ map.put("grade", e.getGrade());
|
|
|
|
+ mapList.add(map);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return mapList;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ @ResponseBody
|
|
|
|
+ @RequestMapping(value = "jsonData")
|
|
|
|
+ public ProjectAccessoryInfo jsonData(@RequestParam(required = false) String id, HttpServletResponse response) {
|
|
|
|
+ ProjectAccessoryInfo entity = null;
|
|
|
|
+ if (StringUtils.isNotBlank(id)){
|
|
|
|
+ entity = projectAccessoryService.get(id);
|
|
|
|
+ }
|
|
|
|
+ if (entity == null){
|
|
|
|
+ entity = new ProjectAccessoryInfo();
|
|
|
|
+ }
|
|
|
|
+ List<ProjectAccessoryInfo> list = new ArrayList<>();
|
|
|
|
+ list.add(entity);
|
|
|
|
+ projectAccessoryService.queryProofread(list);
|
|
|
|
+ return entity;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 根据项目id查询工作内容信息Tree
|
|
|
|
+ * 将原列表变更为树形图结构
|
|
|
|
+ * @param projectId
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequestMapping("getProjectAccessoryTreeData")
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public Map<String,List> getProjectAccessoryTreeData(String projectId){
|
|
|
|
+ Map<String,List> map = new HashMap<>();
|
|
|
|
+ List<ProjectAccessoryTree> projectAccessorys = new ArrayList<>();
|
|
|
|
+ //根据项目id查询工作内容信息Tree(父节点信息)
|
|
|
|
+ List<ProjectAccessoryTree> projectAccessoryList = projectAccessoryService.projectAccessoryParentList();
|
|
|
|
+ if (null != projectAccessoryList) {
|
|
|
|
+ for (ProjectAccessoryTree accessoryInfo : projectAccessoryList) {
|
|
|
|
+ projectAccessorys.add(accessoryInfo);
|
|
|
|
+ List<ProjectAccessoryTree> projectAccessoryListByParentId = projectAccessoryService.projectAccessoryListByParentId(accessoryInfo.getId());
|
|
|
|
+ if(projectAccessoryListByParentId.size()>0){
|
|
|
|
+ for (ProjectAccessoryTree accessoryData: projectAccessoryListByParentId) {
|
|
|
|
+ List<WorkClientAttachment> workAttachments = projectAccessoryService.getWorkAttachments(accessoryData.getId(),projectId);
|
|
|
|
+ if(workAttachments.size()>0){
|
|
|
|
+ accessoryData.setWorkAttachments(workAttachments);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ projectAccessorys.addAll(projectAccessoryListByParentId);
|
|
|
|
+ }
|
|
|
|
+ //判断,只有子节点才会进行查询
|
|
|
|
+ if(!"0".equals(accessoryInfo.getPid())){
|
|
|
|
+ //根据id和项目id查询上传附件信息的名称集合
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ //将项目id带回去
|
|
|
|
+ for (ProjectAccessoryTree info: projectAccessorys) {
|
|
|
|
+ info.setProjectId(projectId);
|
|
|
|
+ }
|
|
|
|
+ map.put("data",projectAccessorys);
|
|
|
|
+ return map;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 跳转到附件页面
|
|
|
|
+ * @param attachmentId
|
|
|
|
+ * @param projectId
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequestMapping("workAttachmentForm")
|
|
|
|
+ public String workAttachmentForm(String attachmentId, String projectId, Model model){
|
|
|
|
+ ProjectAccessoryTree projectAccessory = new ProjectAccessoryTree();
|
|
|
|
+ List<WorkClientAttachment> workAttachments = projectAccessoryService.getWorkAttachments(attachmentId,projectId);
|
|
|
|
+ projectAccessory.setWorkAttachments(workAttachments);
|
|
|
|
+ projectAccessory.setProjectId(projectId);
|
|
|
|
+ projectAccessory.setId(attachmentId);
|
|
|
|
+ model.addAttribute("projectAccessory", projectAccessory);
|
|
|
|
+ return "modules/projectAccessory/workAttachmentForm";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 跳转到附件详情页面
|
|
|
|
+ * @param attachmentId
|
|
|
|
+ * @param projectId
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequestMapping("workAttachmentView")
|
|
|
|
+ public String workAttachmentView(String attachmentId, String projectId, Model model){
|
|
|
|
+ ProjectAccessoryTree projectAccessory = new ProjectAccessoryTree();
|
|
|
|
+ List<WorkClientAttachment> workAttachments = projectAccessoryService.getWorkAttachments(attachmentId,projectId);
|
|
|
|
+ projectAccessory.setWorkAttachments(workAttachments);
|
|
|
|
+ projectAccessory.setProjectId(projectId);
|
|
|
|
+ projectAccessory.setId(attachmentId);
|
|
|
|
+ model.addAttribute("projectAccessory", projectAccessory);
|
|
|
|
+ return "modules/projectAccessory/workAttachmentView";
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 新增修改删除附件信息并返回信息
|
|
|
|
+ * @param projectAccessory
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ @RequestMapping("saveWorkAttachment")
|
|
|
|
+ @ResponseBody
|
|
|
|
+ public Object saveWorkAttachment(ProjectAccessoryTree projectAccessory){
|
|
|
|
+ Map<String,Object> map = new HashMap<>();
|
|
|
|
+ //新增修改删除附件信息
|
|
|
|
+ projectAccessoryService.saveWorkAttachment(projectAccessory);
|
|
|
|
+ if(projectAccessory.getWorkAttachments().size()>0){
|
|
|
|
+ map.put("str","新增附件信息成功!");
|
|
|
|
+ }else{
|
|
|
|
+ map.put("str","");
|
|
|
|
+ }
|
|
|
|
+ return map;
|
|
|
|
+ }
|
|
|
|
+}
|