Merge branch 'dev' of https://github.com/Vetti-AI/Vetti-Service into dev
This commit is contained in:
@@ -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<MultipartFile> 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<MultipartFile> files, HotakeSysNotice hotakeSysNotice) {
|
||||
return toAjax(hotakeSysNoticeService.updateHotakeSysNotice(files, hotakeSysNotice));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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<String> imgs;
|
||||
//
|
||||
//
|
||||
// public static HotakeSysNoticeTypeDto build(List<String> urls, HotakeSysNoticeType data) {
|
||||
// HotakeSysNoticeTypeDto dto = new HotakeSysNoticeTypeDto();
|
||||
// BeanUtils.copyBeanProp(dto, data);
|
||||
// dto.setImgs(urls);
|
||||
// return dto;
|
||||
// }
|
||||
//
|
||||
//}
|
||||
@@ -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<HotakeSysNoticeDto> list;
|
||||
|
||||
// public static List<HotakeSysNoticeTypeNameDto> build(List<HotakeSysNoticeDto> list) {
|
||||
// List<HotakeSysNoticeTypeNameDto> reList = new ArrayList<>();
|
||||
// Map<String, List<HotakeSysNoticeDto>> 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<HotakeSysNoticeTypeNameDto> build(List<HotakeSysNoticeDto> 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());
|
||||
}
|
||||
}
|
||||
@@ -14,9 +14,15 @@ import java.util.List;
|
||||
public class HotakeSysNoticeViewDto {
|
||||
|
||||
@ApiModelProperty("未查看")
|
||||
private List<HotakeSysNoticeDto> unreadList;
|
||||
private List<HotakeSysNoticeTypeNameDto> unreadList;
|
||||
|
||||
@ApiModelProperty("归档")
|
||||
private List<HotakeSysNoticeDto> archiveList;
|
||||
private List<HotakeSysNoticeTypeNameDto> archiveList;
|
||||
|
||||
@ApiModelProperty("未查看数量")
|
||||
private Integer unreadNum;
|
||||
|
||||
@ApiModelProperty("归档数量")
|
||||
private Integer archiveNum;
|
||||
|
||||
}
|
||||
|
||||
@@ -31,6 +31,8 @@ public interface IHotakeSysFileService {
|
||||
*/
|
||||
public List<HotakeSysFileDto> selectHotakeSysFileList(HotakeSysFile hotakeSysFile);
|
||||
|
||||
public HotakeSysFile uploadFile(MultipartFile file,String minioBucketName);
|
||||
|
||||
/**
|
||||
* 新增文件管理
|
||||
*
|
||||
|
||||
@@ -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<MultipartFile> files, HotakeSysNotice hotakeSysNotice);
|
||||
|
||||
/**
|
||||
* 修改通知
|
||||
@@ -43,7 +44,7 @@ public interface IHotakeSysNoticeService
|
||||
* @param hotakeSysNotice 通知
|
||||
* @return 结果
|
||||
*/
|
||||
public int updateHotakeSysNotice(HotakeSysNotice hotakeSysNotice);
|
||||
public int updateHotakeSysNotice(List<MultipartFile> files,HotakeSysNotice hotakeSysNotice);
|
||||
|
||||
/**
|
||||
* 批量删除通知
|
||||
|
||||
@@ -78,6 +78,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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增文件管理
|
||||
*
|
||||
|
||||
@@ -5,11 +5,14 @@ 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;
|
||||
import com.vetti.hotake.service.IHotakeSysFileService;
|
||||
import com.vetti.system.service.ISysDictDataService;
|
||||
@@ -22,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;
|
||||
|
||||
@@ -43,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 类型下的
|
||||
|
||||
/**
|
||||
* 查询通知
|
||||
*
|
||||
@@ -75,8 +81,16 @@ public class HotakeSysNoticeServiceImpl extends BaseServiceImpl implements IHota
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public int insertHotakeSysNotice(HotakeSysNotice hotakeSysNotice) {
|
||||
public int insertHotakeSysNotice(List<MultipartFile> files, HotakeSysNotice hotakeSysNotice) {
|
||||
fill(FillTypeEnum.INSERT.getCode(), hotakeSysNotice);
|
||||
if (CollectionUtil.isNotEmpty(files)) {
|
||||
List<String> 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);
|
||||
}
|
||||
|
||||
@@ -88,8 +102,16 @@ public class HotakeSysNoticeServiceImpl extends BaseServiceImpl implements IHota
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public int updateHotakeSysNotice(HotakeSysNotice hotakeSysNotice) {
|
||||
public int updateHotakeSysNotice(List<MultipartFile> files, HotakeSysNotice hotakeSysNotice) {
|
||||
fill(FillTypeEnum.UPDATE.getCode(), hotakeSysNotice);
|
||||
if (CollectionUtil.isNotEmpty(files)) {//传附件就更新,不传不更新,传一个更新之前的所有
|
||||
List<String> 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);
|
||||
}
|
||||
|
||||
@@ -149,8 +171,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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user