From 5e80cb9f6b0047bedec428dd93bd31ae20b00bdc Mon Sep 17 00:00:00 2001 From: ID <304930518@qq.com> Date: Sun, 2 Nov 2025 11:44:23 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/dto/HotakeSysNoticeTypeDto.java | 26 ------- .../dto/HotakeSysNoticeTypeNameDto.java | 72 +++++++++++++++++++ .../domain/dto/HotakeSysNoticeViewDto.java | 10 ++- .../impl/HotakeSysNoticeServiceImpl.java | 7 +- 4 files changed, 85 insertions(+), 30 deletions(-) delete mode 100644 vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeTypeDto.java create mode 100644 vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeTypeNameDto.java diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeTypeDto.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeTypeDto.java deleted file mode 100644 index efb3aa9..0000000 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeTypeDto.java +++ /dev/null @@ -1,26 +0,0 @@ -//package com.vetti.hotake.domain.dto; -// -//import com.vetti.common.utils.bean.BeanUtils; -//import com.vetti.hotake.domain.HotakeSysNoticeType; -//import lombok.Data; -// -//import java.util.List; -// -///** -// * @author ID -// * @date 2025/11/1 11:54 -// */ -//@Data -//public class HotakeSysNoticeTypeDto extends HotakeSysNoticeType { -// -// private List imgs; -// -// -// public static HotakeSysNoticeTypeDto build(List urls, HotakeSysNoticeType data) { -// HotakeSysNoticeTypeDto dto = new HotakeSysNoticeTypeDto(); -// BeanUtils.copyBeanProp(dto, data); -// dto.setImgs(urls); -// return dto; -// } -// -//} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeTypeNameDto.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeTypeNameDto.java new file mode 100644 index 0000000..b686a11 --- /dev/null +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeTypeNameDto.java @@ -0,0 +1,72 @@ +package com.vetti.hotake.domain.dto; + +import com.vetti.common.utils.bean.BeanUtils; +import com.vetti.hotake.domain.HotakeSysNotice; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * @author ID + * @date 2025/11/1 16:50 + */ +@Data +public class HotakeSysNoticeTypeNameDto { + + @ApiModelProperty("通知类型名称") + private String noticeTypeName; + + @ApiModelProperty("数量") + private Integer num; + + @ApiModelProperty("通知") + private List list; + +// public static List build(List list) { +// List reList = new ArrayList<>(); +// Map> map = new HashMap<>(); +// list.forEach(e -> { +// String typeName = e.getNoticeTypeName(); +// if (!map.containsKey(typeName)) { +// map.put(typeName, new ArrayList<>()); +// } +// map.get(typeName).add(e); +// }); +// map.forEach((k, v) -> { +// HotakeSysNoticeTypeNameDto dto = new HotakeSysNoticeTypeNameDto(); +// dto.setNoticeTypeName(k); +// dto.setList(v); +// reList.add(dto); +// }); +// return reList; +// } + + // 优化后的分组转换方法 + public static List build(List list) { + // 处理空集合,避免NPE + if (list == null) { + return new ArrayList<>(); + } + // 1. 分组:按 noticeTypeName 分组,自动处理键不存在的情况 + // 2. 转换:将分组结果映射为 HotakeSysNoticeTypeNameDto 列表 + return list.stream() + // 分组:key为noticeTypeName,value为对应的HotakeSysNoticeDto列表 + .collect(Collectors.groupingBy(HotakeSysNoticeDto::getNoticeTypeName)) + // 遍历分组后的Map,转换为目标DTO + .entrySet().stream() + .map(entry -> { + HotakeSysNoticeTypeNameDto dto = new HotakeSysNoticeTypeNameDto(); + dto.setNoticeTypeName(entry.getKey()); + dto.setList(entry.getValue()); + dto.setNum(entry.getValue().size()); + return dto; + }) + // 收集为List返回 + .collect(Collectors.toList()); + } +} diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeViewDto.java b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeViewDto.java index b9aaee8..dbeeb08 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeViewDto.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/domain/dto/HotakeSysNoticeViewDto.java @@ -14,9 +14,15 @@ import java.util.List; public class HotakeSysNoticeViewDto { @ApiModelProperty("未查看") - private List unreadList; + private List unreadList; @ApiModelProperty("归档") - private List archiveList; + private List archiveList; + + @ApiModelProperty("未查看数量") + private Integer unreadNum; + + @ApiModelProperty("归档数量") + private Integer archiveNum; } diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysNoticeServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysNoticeServiceImpl.java index 7ab72d2..aa3928c 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysNoticeServiceImpl.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysNoticeServiceImpl.java @@ -10,6 +10,7 @@ import com.vetti.common.core.service.BaseServiceImpl; import com.vetti.common.enums.FillTypeEnum; import com.vetti.common.utils.DateUtils; import com.vetti.hotake.domain.dto.HotakeSysNoticeDto; +import com.vetti.hotake.domain.dto.HotakeSysNoticeTypeNameDto; import com.vetti.hotake.domain.dto.HotakeSysNoticeViewDto; import com.vetti.hotake.service.IHotakeSysFileService; import com.vetti.system.service.ISysDictDataService; @@ -149,8 +150,10 @@ public class HotakeSysNoticeServiceImpl extends BaseServiceImpl implements IHota archiveList.add(HotakeSysNoticeDto.build(e, typeNameMap, url(e))); } }); - data.setUnreadList(unreadList); - data.setArchiveList(archiveList); + data.setUnreadList(HotakeSysNoticeTypeNameDto.build(unreadList)); + data.setArchiveList(HotakeSysNoticeTypeNameDto.build(archiveList)); + data.setUnreadNum(unreadList.size()); + data.setArchiveNum(archiveList.size()); return data; } From 79daf16dc6e28d9bcd8d7e637f66f98243008b7c Mon Sep 17 00:00:00 2001 From: ID <304930518@qq.com> Date: Sun, 2 Nov 2025 15:29:09 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=80=9A=E7=9F=A5=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BF=AE=E6=94=B9=E4=B8=8A=E4=BC=A0=E9=99=84?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hotake/HotakeSysNoticeController.java | 20 ++++++--------- .../hotake/service/IHotakeSysFileService.java | 2 ++ .../service/IHotakeSysNoticeService.java | 5 ++-- .../impl/HotakeSysFileServiceImpl.java | 9 +++++++ .../impl/HotakeSysNoticeServiceImpl.java | 25 +++++++++++++++++-- 5 files changed, 45 insertions(+), 16 deletions(-) diff --git a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeSysNoticeController.java b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeSysNoticeController.java index aa623fd..489a4a7 100644 --- a/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeSysNoticeController.java +++ b/vetti-admin/src/main/java/com/vetti/web/controller/hotake/HotakeSysNoticeController.java @@ -4,14 +4,7 @@ import java.util.List; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import com.vetti.common.annotation.Log; import com.vetti.common.core.controller.BaseController; import com.vetti.common.core.domain.AjaxResult; @@ -22,6 +15,7 @@ import com.vetti.hotake.domain.HotakeSysNotice; import com.vetti.hotake.service.IHotakeSysNoticeService; import com.vetti.common.utils.poi.ExcelUtil; import com.vetti.common.core.page.TableDataInfo; +import org.springframework.web.multipart.MultipartFile; /** * 通知Controller @@ -45,6 +39,7 @@ public class HotakeSysNoticeController extends BaseController { public AjaxResult listView(HotakeSysNotice hotakeSysNotice) { return AjaxResult.success(hotakeSysNoticeService.selectHotakeSysNoticeViewList(hotakeSysNotice)); } + /** * 获取通知详细信息 */ @@ -54,6 +49,7 @@ public class HotakeSysNoticeController extends BaseController { public AjaxResult viewInfo(@PathVariable("id") Long id) { return AjaxResult.success(hotakeSysNoticeService.selectHotakeSysNoticeViewById(id)); } + @ApiOperation("全部已读") @PreAuthorize("@ss.hasPermi('hotake:sysNotice:query')") @GetMapping(value = "/allread") @@ -101,8 +97,8 @@ public class HotakeSysNoticeController extends BaseController { @PreAuthorize("@ss.hasPermi('hotake:sysNotice:add')") @Log(title = "通知", businessType = BusinessType.INSERT) @PostMapping - public AjaxResult add(@RequestBody HotakeSysNotice hotakeSysNotice) { - return toAjax(hotakeSysNoticeService.insertHotakeSysNotice(hotakeSysNotice)); + public AjaxResult add(@RequestPart(value = "files", required = false) List files, HotakeSysNotice hotakeSysNotice) { + return toAjax(hotakeSysNoticeService.insertHotakeSysNotice(files, hotakeSysNotice)); } /** @@ -112,8 +108,8 @@ public class HotakeSysNoticeController extends BaseController { @PreAuthorize("@ss.hasPermi('hotake:sysNotice:edit')") @Log(title = "通知", businessType = BusinessType.UPDATE) @PutMapping - public AjaxResult edit(@RequestBody HotakeSysNotice hotakeSysNotice) { - return toAjax(hotakeSysNoticeService.updateHotakeSysNotice(hotakeSysNotice)); + public AjaxResult edit(@RequestPart(value = "files", required = false) List files, HotakeSysNotice hotakeSysNotice) { + return toAjax(hotakeSysNoticeService.updateHotakeSysNotice(files, hotakeSysNotice)); } /** diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysFileService.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysFileService.java index c088162..4754477 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysFileService.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysFileService.java @@ -30,6 +30,8 @@ public interface IHotakeSysFileService { */ public List selectHotakeSysFileList(HotakeSysFile hotakeSysFile); + public HotakeSysFile uploadFile(MultipartFile file,String minioBucketName); + /** * 新增文件管理 * diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysNoticeService.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysNoticeService.java index bc43209..7089691 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysNoticeService.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/IHotakeSysNoticeService.java @@ -4,6 +4,7 @@ import java.util.List; import com.vetti.hotake.domain.HotakeSysNotice; import com.vetti.hotake.domain.dto.HotakeSysNoticeDto; import com.vetti.hotake.domain.dto.HotakeSysNoticeViewDto; +import org.springframework.web.multipart.MultipartFile; /** * 通知Service接口 @@ -35,7 +36,7 @@ public interface IHotakeSysNoticeService * @param hotakeSysNotice 通知 * @return 结果 */ - public int insertHotakeSysNotice(HotakeSysNotice hotakeSysNotice); + public int insertHotakeSysNotice(List files, HotakeSysNotice hotakeSysNotice); /** * 修改通知 @@ -43,7 +44,7 @@ public interface IHotakeSysNoticeService * @param hotakeSysNotice 通知 * @return 结果 */ - public int updateHotakeSysNotice(HotakeSysNotice hotakeSysNotice); + public int updateHotakeSysNotice(List files,HotakeSysNotice hotakeSysNotice); /** * 批量删除通知 diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysFileServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysFileServiceImpl.java index 406b7f6..545eb6e 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysFileServiceImpl.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysFileServiceImpl.java @@ -75,6 +75,15 @@ public class HotakeSysFileServiceImpl extends BaseServiceImpl implements IHotake return l; } + @Transactional(rollbackFor = Exception.class) + @Override + public HotakeSysFile uploadFile(MultipartFile file, String minioBucketName) { + HotakeSysFile hotakeSysFile = new HotakeSysFile(); + hotakeSysFile.setCode(System.currentTimeMillis() + ""); + hotakeSysFile.setMinioBucketName(minioBucketName); + return insertHotakeSysFile(file, hotakeSysFile); + } + /** * 新增文件管理 * diff --git a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysNoticeServiceImpl.java b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysNoticeServiceImpl.java index aa3928c..3b293f8 100644 --- a/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysNoticeServiceImpl.java +++ b/vetti-hotakes/src/main/java/com/vetti/hotake/service/impl/HotakeSysNoticeServiceImpl.java @@ -5,10 +5,12 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import cn.hutool.core.collection.CollectionUtil; import com.vetti.common.core.domain.entity.SysDictData; import com.vetti.common.core.service.BaseServiceImpl; import com.vetti.common.enums.FillTypeEnum; import com.vetti.common.utils.DateUtils; +import com.vetti.hotake.domain.HotakeSysFile; import com.vetti.hotake.domain.dto.HotakeSysNoticeDto; import com.vetti.hotake.domain.dto.HotakeSysNoticeTypeNameDto; import com.vetti.hotake.domain.dto.HotakeSysNoticeViewDto; @@ -23,6 +25,7 @@ import org.springframework.transaction.annotation.Transactional; import com.vetti.hotake.mapper.HotakeSysNoticeMapper; import com.vetti.hotake.domain.HotakeSysNotice; import com.vetti.hotake.service.IHotakeSysNoticeService; +import org.springframework.web.multipart.MultipartFile; import static com.vetti.common.utils.SecurityUtils.getLoginUser; @@ -44,6 +47,8 @@ public class HotakeSysNoticeServiceImpl extends BaseServiceImpl implements IHota private final String DICT_DATA_TYPE_KEY = "hotake_sys_notice_type"; + private final String MINIO_BUCKET_NAME = "noticetype-fs";//数据字典minio_bucket_name 类型下的 + /** * 查询通知 * @@ -76,8 +81,16 @@ public class HotakeSysNoticeServiceImpl extends BaseServiceImpl implements IHota */ @Transactional(rollbackFor = Exception.class) @Override - public int insertHotakeSysNotice(HotakeSysNotice hotakeSysNotice) { + public int insertHotakeSysNotice(List files, HotakeSysNotice hotakeSysNotice) { fill(FillTypeEnum.INSERT.getCode(), hotakeSysNotice); + if (CollectionUtil.isNotEmpty(files)) { + List l = new ArrayList(); + for (MultipartFile file : files) { + HotakeSysFile sf = hotakeSysFileService.uploadFile(file, MINIO_BUCKET_NAME); + l.add(sf.getId() + ""); + } + hotakeSysNotice.setImagePath(l); + } return hotakeSysNoticeMapper.insertHotakeSysNotice(hotakeSysNotice); } @@ -89,8 +102,16 @@ public class HotakeSysNoticeServiceImpl extends BaseServiceImpl implements IHota */ @Transactional(rollbackFor = Exception.class) @Override - public int updateHotakeSysNotice(HotakeSysNotice hotakeSysNotice) { + public int updateHotakeSysNotice(List files, HotakeSysNotice hotakeSysNotice) { fill(FillTypeEnum.UPDATE.getCode(), hotakeSysNotice); + if (CollectionUtil.isNotEmpty(files)) {//传附件就更新,不传不更新,传一个更新之前的所有 + List l = new ArrayList(); + for (MultipartFile file : files) { + HotakeSysFile sf = hotakeSysFileService.uploadFile(file, MINIO_BUCKET_NAME); + l.add(sf.getId() + ""); + } + hotakeSysNotice.setImagePath(l); + } return hotakeSysNoticeMapper.updateHotakeSysNotice(hotakeSysNotice); }