diff --git a/db/update.sql b/db/update.sql index 8cad7c6..6d186ae 100644 --- a/db/update.sql +++ b/db/update.sql @@ -19,4 +19,28 @@ ALTER TABLE huzhou_projectinfo ADD COLUMN update_plan_flag VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '项目计划修改标识 默认:0 审批中:1 审批通过:2"'; ALTER TABLE huzhou_sub_projectinfo - ADD COLUMN update_plan_flag VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '项目计划修改标识 默认:0 审批中:1 审批通过:2"'; \ No newline at end of file + ADD COLUMN update_plan_flag VARCHAR(1) NOT NULL DEFAULT '0' COMMENT '项目计划修改标识 默认:0 审批中:1 审批通过:2"'; + + +# 2025-03-16 新增菜单 +INSERT INTO `guoyan_huzhou`.`sys_permission`(`id`, `parent_id`, `type`, `title`, `name`, `code`, `icon`, `path`, `component`, `external`, `order_no`, `display`, `open_mode`, `status`, `remarks`, `version`, `create_user`, `create_date`, `edit_user`, `edit_date`) VALUES ('1899280234855800833', '1803680740161212418', 'menu', '机制建设', NULL, NULL, 'ant-design:book-filled', '/informationSub/mechanism/index', '/informationSub/mechanism/index', '0', 3, '1', '1', '1', NULL, 0, '1', '2025-03-11 10:04:29', '1', '2025-03-11 10:04:29'); +INSERT INTO `guoyan_huzhou`.`sys_permission`(`id`, `parent_id`, `type`, `title`, `name`, `code`, `icon`, `path`, `component`, `external`, `order_no`, `display`, `open_mode`, `status`, `remarks`, `version`, `create_user`, `create_date`, `edit_user`, `edit_date`) VALUES ('1899280498354561025', '1803680740161212418', 'menu', '标志性成果', NULL, NULL, 'ant-design:book-filled', '/informationSub/iconic/index', '/informationSub/iconic/index', '0', 4, '1', '1', '1', NULL, 0, '1', '2025-03-11 10:05:32', '1', '2025-03-11 10:05:32'); + +# 创建信息材料表 +CREATE TABLE `huzhou_informationmaterial` ( + `name` varchar(255) DEFAULT NULL COMMENT '期刊名称', + `publish_time` date DEFAULT NULL COMMENT '发布日期', + `id` varchar(255) NOT NULL COMMENT 'id', + `document_name` varchar(255) DEFAULT NULL COMMENT '文件名称', + `document_type` varchar(255) DEFAULT NULL COMMENT '文件类型', + `document_path` varchar(255) DEFAULT NULL COMMENT '文件位置', + `size` bigint(20) DEFAULT NULL COMMENT '文件尺寸', + `status` varchar(255) DEFAULT NULL COMMENT '文件状态', + `create_date` datetime DEFAULT NULL COMMENT '创建时间', + `create_user` varchar(255) DEFAULT NULL COMMENT '创建人', + `edit_date` datetime DEFAULT NULL COMMENT '更新时间', + `edit_user` varchar(255) DEFAULT NULL COMMENT '更新人', + `type` varchar(255) DEFAULT NULL COMMENT '类型', + `duty_workplace` varchar(255) DEFAULT NULL COMMENT '责任单位', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC; \ No newline at end of file diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouInformationMaterialController.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouInformationMaterialController.java new file mode 100644 index 0000000..b54a5cf --- /dev/null +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouInformationMaterialController.java @@ -0,0 +1,105 @@ +package com.easy.admin.modules.huzhou.controller; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.easy.admin.common.api.vo.Result; +import com.easy.admin.common.core.exception.EasyException; +import com.easy.admin.modules.huzhou.entity.HuzhouInformationMaterial; +import com.easy.admin.modules.huzhou.service.IHuzhouInformationMaterialService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @author gjh + */ +@RestController +@RequestMapping("/huzhouInformationMaterial") +public class HuzhouInformationMaterialController { + @Autowired + private IHuzhouInformationMaterialService informationMaterialService; + + /** + * 查询信息材料分页 + * @param informationMaterial 条件 + * @param pageNo 分页 + * @param pageSize 页码 + * @return + */ + @GetMapping("/informationMaterialPageList") + public Result informationMaterialPageList(HuzhouInformationMaterial informationMaterial, + @RequestParam(name="current", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize){ + + Page pageList = informationMaterialService.getInformationMaterialPageList(informationMaterial, pageNo, pageSize); + return Result.ok(pageList); + } + + /** + * 根据id获取详情信息材料 + * @param id + * @return + */ + @GetMapping("/getInformationMaterialById") + public Result getInformationMaterialById(String id){ + HuzhouInformationMaterial byId = informationMaterialService.getById(id); + return Result.ok(byId); + } + + /** + * 添加信息材料 + * @param file + * @param informationMaterial + * @return + * @throws IOException + */ + @PostMapping("/addInformationMaterial") + public Result addInformationMaterial(@RequestParam(value = "file") MultipartFile file, HuzhouInformationMaterial informationMaterial) throws IOException { + informationMaterialService.addInformationMaterial(file,informationMaterial); + return Result.ok("上传成功"); + } + + /** + * 修改信息材料 + * @param file + * @param informationMaterial + * @return + * @throws IOException + */ + @PostMapping("/modifyInformationMaterial") + public Result modifyInformationMaterial(@RequestParam(value = "file",required = false) MultipartFile file, HuzhouInformationMaterial informationMaterial) throws IOException { + Boolean aBoolean = informationMaterialService.modifyInformationMaterial(file, informationMaterial); + if(aBoolean){ + return Result.ok("修改成功"); + } + throw new EasyException("修改失败"); + } + + /** + * 删除信息材料 + * @param informationMaterial + * @return + * @throws IOException + */ + @PostMapping("/deleteInformationMaterial") + public Result deleteInformationMaterial(@RequestBody HuzhouInformationMaterial informationMaterial) throws IOException { + Boolean aBoolean = informationMaterialService.deleteInformationMaterial(informationMaterial); + if(aBoolean){ + return Result.ok("删除成功"); + } + throw new EasyException("删除失败"); + } + + /** + * 批量下载 + * @param informationMaterial + * @param response + */ + @GetMapping("/batchdownloadInformationMaterialFiles") + public void batchdownloadInformationMaterialFiles(HuzhouInformationMaterial informationMaterial, HttpServletResponse response){ + informationMaterialService.batchdownloadInformationMaterialFiles(informationMaterial,response); + } + +} diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouInformationMaterialMapper.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouInformationMaterialMapper.java new file mode 100644 index 0000000..eab5880 --- /dev/null +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/dao/HuzhouInformationMaterialMapper.java @@ -0,0 +1,13 @@ +package com.easy.admin.modules.huzhou.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.easy.admin.modules.huzhou.entity.HuzhouInformationMaterial; +import com.easy.admin.modules.huzhou.entity.HuzhouPeriodicallab; + +/** + * @author gjh + */ +public interface HuzhouInformationMaterialMapper extends BaseMapper { + + +} diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/InformationMaterials.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouInformationMaterial.java similarity index 92% rename from huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/InformationMaterials.java rename to huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouInformationMaterial.java index b4c13a4..e56ab0e 100644 --- a/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/InformationMaterials.java +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouInformationMaterial.java @@ -1,11 +1,16 @@ package com.easy.admin.modules.huzhou.entity; import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; -public class InformationMaterials { +/** + * @author gjh + */ +@Data +public class HuzhouInformationMaterial { private static final long serialVersionUID = -50005828024123796L; /** diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouInformationMaterialService.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouInformationMaterialService.java new file mode 100644 index 0000000..24ec6a6 --- /dev/null +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouInformationMaterialService.java @@ -0,0 +1,23 @@ +package com.easy.admin.modules.huzhou.service; + +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.IService; +import com.easy.admin.modules.huzhou.entity.HuzhouInformationMaterial; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +public interface IHuzhouInformationMaterialService extends IService { + Page getInformationMaterialPageList(HuzhouInformationMaterial informationMaterial, Integer pageNo, + Integer pageSize); + void addInformationMaterial(MultipartFile file,HuzhouInformationMaterial informationMaterial) throws IOException; + + Boolean modifyInformationMaterial(MultipartFile file, HuzhouInformationMaterial informationMaterial) throws IOException; + + Boolean deleteInformationMaterial(HuzhouInformationMaterial informationMaterial); + + void batchdownloadInformationMaterialFiles(HuzhouInformationMaterial informationMaterial,HttpServletResponse response); + + + } diff --git a/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouInformationMaterialServiceImpl.java b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouInformationMaterialServiceImpl.java new file mode 100644 index 0000000..a33f3d3 --- /dev/null +++ b/huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouInformationMaterialServiceImpl.java @@ -0,0 +1,160 @@ +package com.easy.admin.modules.huzhou.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.easy.admin.auth.model.SysUser; +import com.easy.admin.common.util.CommonUtils; +import com.easy.admin.modules.huzhou.dao.HuzhouInformationMaterialMapper; +import com.easy.admin.modules.huzhou.entity.HuzhouInformationMaterial; +import com.easy.admin.modules.huzhou.service.IHuzhouInformationMaterialService; +import com.easy.admin.util.ShiroUtil; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.FileCopyUtils; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; + +/** + * @author gjh + */ +@Service +@Transactional + +public class HuzhouInformationMaterialServiceImpl extends ServiceImpl implements IHuzhouInformationMaterialService { + @Value(value = "${jeecg.path.upload}") + private String uploadPath; + + @Autowired + HuzhouInformationMaterialMapper informationMaterialMapper; + + + @Override + public Page getInformationMaterialPageList(HuzhouInformationMaterial informationMaterial, + Integer pageNo, + Integer pageSize) { + String informationMaterialName = informationMaterial.getName(); + String type = informationMaterial.getType(); + Date publishTime = informationMaterial.getPublishTime(); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Page informationMaterialPage = new Page<>(pageNo, pageSize); + queryWrapper.like(StringUtils.isNotBlank(informationMaterialName),HuzhouInformationMaterial::getName,informationMaterialName); + queryWrapper.eq(StringUtils.isNotBlank(type),HuzhouInformationMaterial::getType,type); + if(publishTime!=null){ + queryWrapper.eq(HuzhouInformationMaterial::getPublishTime,publishTime); + } + + Page page = this.page(informationMaterialPage, queryWrapper); + return page; + } + + @Override + public void addInformationMaterial(MultipartFile file, HuzhouInformationMaterial informationMaterial) throws IOException { + addFile(file,informationMaterial); + this.save(informationMaterial); + } + + @Override + public Boolean modifyInformationMaterial(MultipartFile file,HuzhouInformationMaterial informationMaterial) throws IOException { + String documentPath = this.getById(informationMaterial.getId()).getDocumentPath(); + File informationMaterialFile = new File(documentPath); + if(file==null){ + this.updateById(informationMaterial); + return true; + } + if(informationMaterialFile.delete()){ + addFile(file,informationMaterial); + this.updateById(informationMaterial); + return true; + } + return false; + } + + @Override + public Boolean deleteInformationMaterial(HuzhouInformationMaterial informationMaterial) { + String id = informationMaterial.getId(); + informationMaterial = this.getById(id); + File file = new File(informationMaterial.getDocumentPath()); + if(file.delete()){ + this.removeById(id); + return Boolean.TRUE; + + } + return Boolean.FALSE; + } + + @Override + public void batchdownloadInformationMaterialFiles(HuzhouInformationMaterial informationMaterial, HttpServletResponse response) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + String informationMaterialName = informationMaterial.getName(); + String documentName = informationMaterial.getDocumentName(); + queryWrapper.like(StringUtils.isNotBlank(informationMaterialName),HuzhouInformationMaterial::getName,informationMaterialName); + queryWrapper.like(StringUtils.isNotBlank(documentName),HuzhouInformationMaterial::getDocumentName,documentName); + List list = this.list(queryWrapper); + List pathList = list.stream().map(HuzhouInformationMaterial::getDocumentPath).collect(Collectors.toList()); + response.addHeader("Content-Type", "application/zip"); + try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream()); ) { + for (String fileName : pathList) { //循环往zip中放入文件 + File file = new File(fileName); + FileInputStream fileIn = new FileInputStream(file); + ZipEntry zipEntry = new ZipEntry(file.getName()); + zipOut.putNextEntry(zipEntry); + byte[] buffer = new byte[1024]; + int len; + while ((len = fileIn.read(buffer)) > 0) { + zipOut.write(buffer, 0, len); + } + fileIn.close(); + zipOut.closeEntry(); + } + zipOut.finish(); + } catch (Exception e) { + throw new RuntimeException("文件批量下载有误.", e); + } + } + + + private void addFile(MultipartFile file,HuzhouInformationMaterial informationMaterial) throws IOException { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd"); + String currentDay = dateFormat.format(new Date()); + SysUser currentUser = ShiroUtil.getCurrentUser(); + String nickname = currentUser.getNickname(); + File filePath = new File(uploadPath +File.separator+"informationMaterial"+ File.separator+nickname+ File.separator+currentDay+File.separator); + //文件夹不存在则创建 + if (!filePath.exists()) { + // 创建文件根目录 + filePath.mkdirs(); + } + String fileName =null; + String originalFilename = file.getOriginalFilename(); + originalFilename = CommonUtils.getFileName(originalFilename); + if(originalFilename.indexOf(".")!=-1){ + fileName = originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "_" + System.currentTimeMillis() + originalFilename.substring(originalFilename.lastIndexOf(".")); + }else{ + fileName = originalFilename+ "_" + System.currentTimeMillis(); + } + String savePath = filePath.getPath() + File.separator + fileName; + File savefile = new File(savePath); + FileCopyUtils.copy(file.getBytes(), savefile);//保存文件 + informationMaterial.setDocumentName(originalFilename);//未加工过的文件名称 + informationMaterial.setDocumentType(file.getContentType()); + informationMaterial.setDocumentPath(savePath); + informationMaterial.setSize(file.getSize()); + informationMaterial.setStatus("1"); + informationMaterial.setDutyWorkplace(currentUser.getWorkplace()); + } +}