|
|
|
|
package com.bs.ct.controller;
|
|
|
|
|
|
|
|
|
|
import java.awt.image.BufferedImage;
|
|
|
|
|
import java.io.File;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
|
|
|
|
import com.bs.cm.domain.CmAttach;
|
|
|
|
|
import com.bs.cm.service.ICmAttachService;
|
|
|
|
|
import com.bs.common.config.BsConfig;
|
|
|
|
|
import com.bs.common.core.domain.entity.SysDept;
|
|
|
|
|
import com.bs.common.core.domain.model.LoginUser;
|
|
|
|
|
import com.bs.common.utils.StringUtils;
|
|
|
|
|
import com.bs.common.utils.file.FileUploadUtils;
|
|
|
|
|
import com.bs.common.utils.file.FileUtils;
|
|
|
|
|
import com.bs.ct.domain.*;
|
|
|
|
|
import com.bs.ct.service.*;
|
|
|
|
|
import com.bs.ct.utils.ExifUtils;
|
|
|
|
|
import com.bs.ct.utils.OperateImageUtils;
|
|
|
|
|
import com.bs.ct.utils.UUIDUtils;
|
|
|
|
|
import com.bs.framework.config.ServerConfig;
|
|
|
|
|
import com.bs.system.service.ISysDeptService;
|
|
|
|
|
import com.drew.imaging.ImageMetadataReader;
|
|
|
|
|
import com.drew.imaging.ImageProcessingException;
|
|
|
|
|
import com.drew.metadata.Directory;
|
|
|
|
|
import com.drew.metadata.Metadata;
|
|
|
|
|
import com.drew.metadata.Tag;
|
|
|
|
|
import com.drew.metadata.exif.ExifSubIFDDirectory;
|
|
|
|
|
import io.swagger.annotations.Api;
|
|
|
|
|
import io.swagger.annotations.ApiOperation;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
|
|
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 com.bs.common.annotation.Log;
|
|
|
|
|
import com.bs.common.core.controller.BaseController;
|
|
|
|
|
import com.bs.common.core.domain.AjaxResult;
|
|
|
|
|
import com.bs.common.core.page.TableDataInfo;
|
|
|
|
|
import com.bs.common.enums.BusinessType;
|
|
|
|
|
import com.bs.common.utils.poi.ExcelUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
import cn.hutool.core.lang.Validator;
|
|
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
|
|
|
|
|
import static com.bs.common.config.BsConfig.getProfile;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 图库图片Controller
|
|
|
|
|
*
|
|
|
|
|
* @author bs
|
|
|
|
|
* @date 2025-02-22
|
|
|
|
|
*/
|
|
|
|
|
@Api(tags = "图库图片")
|
|
|
|
|
@RestController
|
|
|
|
|
@RequestMapping("/gallery/images")
|
|
|
|
|
public class CtGalleryImagesController extends BaseController {
|
|
|
|
|
@Value("${bs.profile}")
|
|
|
|
|
private String profile;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtGalleryImagesService ctGalleryImagesService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private ServerConfig serverConfig;
|
|
|
|
|
@Autowired
|
|
|
|
|
private ICmAttachService cmAttachService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtTaskTagService ctTaskTagService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtGalleryImagesTagService ctGalleryImagesTagService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtTagService ctTagService;
|
|
|
|
|
@Autowired
|
|
|
|
|
private ISysDeptService deptService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtTaskBranchService ctTaskBranchService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtTaskInfoService ctTaskInfoService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtImagesFeedbackRefService ctImagesFeedbackRefService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtGalleryCataService ctGalleryCataService;
|
|
|
|
|
@Resource
|
|
|
|
|
private ICtTaskFeedbackService ctTaskFeedbackService;
|
|
|
|
|
/**
|
|
|
|
|
* 分页查询图库图片列表
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("分页查询图库图片列表")
|
|
|
|
|
@GetMapping("/pageList")
|
|
|
|
|
public TableDataInfo pageList(CtGalleryImages ctGalleryImages) {
|
|
|
|
|
Integer pageNum = ctGalleryImages.getPageNum() != null ? ctGalleryImages.getPageNum() : 1;
|
|
|
|
|
Integer pageSize = ctGalleryImages.getPageSize() != null ? ctGalleryImages.getPageSize() : 10;
|
|
|
|
|
LambdaQueryWrapper<CtGalleryImages> queryWrapper = new LambdaQueryWrapper();
|
|
|
|
|
if (Validator.isEmpty(ctGalleryImages.getImageTitle())) {
|
|
|
|
|
condition(queryWrapper,ctGalleryImages);
|
|
|
|
|
}
|
|
|
|
|
List<CtGalleryImages> list = ctGalleryImagesService.list(queryWrapper);
|
|
|
|
|
setAll(list);
|
|
|
|
|
setFile(list);
|
|
|
|
|
if (Validator.isNotEmpty(ctGalleryImages.getImageTitle())) {
|
|
|
|
|
list = filterByImageTitle(list,ctGalleryImages.getImageTitle());
|
|
|
|
|
}
|
|
|
|
|
Integer start = (pageNum - 1) * pageSize;
|
|
|
|
|
List<CtGalleryImages> result = list.stream()
|
|
|
|
|
.skip(start) // 跳过前4条数据
|
|
|
|
|
.limit(pageSize) // 最多取6条数据
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
TableDataInfo data = getDataTable(result);
|
|
|
|
|
data.setTotal(list.size());
|
|
|
|
|
return data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 过滤方法
|
|
|
|
|
public static List<CtGalleryImages> filterByImageTitle(List<CtGalleryImages> list, String filterText) {
|
|
|
|
|
return list.stream()
|
|
|
|
|
.filter(image -> {
|
|
|
|
|
boolean matchImageName = image.getImageName() != null && image.getImageName().contains(filterText);
|
|
|
|
|
boolean matchImageTitle = image.getImageTitle() != null && image.getImageTitle().contains(filterText);
|
|
|
|
|
boolean matchKeyWords = image.getKeyWords() != null && image.getKeyWords().contains(filterText);
|
|
|
|
|
boolean matchCataName = image.getCataName() != null && image.getCataName().contains(filterText);
|
|
|
|
|
boolean matchTagNames = image.getTagNames() != null && image.getTagNames().stream().anyMatch(tag -> tag.contains(filterText));
|
|
|
|
|
boolean matchTaskTitles = image.getTaskTitles() != null && image.getTaskTitles().stream().anyMatch(task -> task.contains(filterText));
|
|
|
|
|
return matchImageName || matchImageTitle || matchKeyWords || matchCataName || matchTagNames || matchTaskTitles;
|
|
|
|
|
})
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void setAll(List<CtGalleryImages> list) {
|
|
|
|
|
List<CtGalleryCata> ctGalleryCatas = ctGalleryCataService.list();
|
|
|
|
|
List<CtGalleryImagesTag> imagesTags = ctGalleryImagesTagService.list();
|
|
|
|
|
HashMap<Long, String> longStringHashMap = ctGalleryCatas.stream()
|
|
|
|
|
.collect(Collectors.toMap(
|
|
|
|
|
CtGalleryCata::getId,
|
|
|
|
|
CtGalleryCata::getCataName,
|
|
|
|
|
(existing, replacement) -> existing,
|
|
|
|
|
HashMap::new
|
|
|
|
|
));
|
|
|
|
|
Map<Long, List<String>> imageStringHashMap = imagesTags.stream()
|
|
|
|
|
.collect(Collectors.groupingBy(
|
|
|
|
|
CtGalleryImagesTag::getImageId,
|
|
|
|
|
Collectors.mapping(
|
|
|
|
|
CtGalleryImagesTag::getTagName,
|
|
|
|
|
Collectors.toList()
|
|
|
|
|
)
|
|
|
|
|
));
|
|
|
|
|
//查询相关任务名称
|
|
|
|
|
List<CtImagesFeedbackRef> imagesFeedbackRefs = ctImagesFeedbackRefService.list();
|
|
|
|
|
Map<Long, List<Long>> refMap = imagesFeedbackRefs.stream()
|
|
|
|
|
.collect(Collectors.groupingBy(
|
|
|
|
|
CtImagesFeedbackRef::getImageId, // 分组键:imageId
|
|
|
|
|
Collectors.mapping(
|
|
|
|
|
CtImagesFeedbackRef::getFeedbackId, // 提取值:feedbackId
|
|
|
|
|
Collectors.toList() // 收集为列表
|
|
|
|
|
)
|
|
|
|
|
));
|
|
|
|
|
List<CtTaskFeedback> ctTaskFeedbacks = ctTaskFeedbackService.list();
|
|
|
|
|
HashMap<Long, Long> feedbackIdsMap = ctTaskFeedbacks.stream()
|
|
|
|
|
.collect(Collectors.toMap(
|
|
|
|
|
CtTaskFeedback::getId, // 键:id
|
|
|
|
|
CtTaskFeedback::getTaskId, // 值:taskId
|
|
|
|
|
(existing, replacement) -> existing, // 处理键冲突:保留现有值
|
|
|
|
|
() -> new HashMap<>() // 指定 Map 实现类(可选)
|
|
|
|
|
));
|
|
|
|
|
List<CtTaskInfo> ctTaskInfos = ctTaskInfoService.list();
|
|
|
|
|
HashMap<Long, String> infoMap = new HashMap<>();
|
|
|
|
|
if (null != ctTaskInfos) {
|
|
|
|
|
infoMap = ctTaskInfos.stream()
|
|
|
|
|
.filter(ctTaskInfo -> ctTaskInfo.getTaskTitle() != null) // 过滤掉taskTitle为空的项
|
|
|
|
|
.collect(Collectors.toMap(
|
|
|
|
|
CtTaskInfo::getId,
|
|
|
|
|
CtTaskInfo::getTaskTitle,
|
|
|
|
|
(existing, replacement) -> existing,
|
|
|
|
|
HashMap::new
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
for (CtGalleryImages ctGalleryImage : list) {
|
|
|
|
|
Long cataId = ctGalleryImage.getCataId();
|
|
|
|
|
String cataName = longStringHashMap.get(cataId);
|
|
|
|
|
ctGalleryImage.setCataName(cataName);
|
|
|
|
|
List<String> tagNames = imageStringHashMap.get(ctGalleryImage.getId());
|
|
|
|
|
ctGalleryImage.setTagNames(tagNames);
|
|
|
|
|
List<Long> feedList = refMap.get(ctGalleryImage.getId());
|
|
|
|
|
List<String> taskTitles = new ArrayList<>();
|
|
|
|
|
if (null != feedList && feedList.size() > 0) {
|
|
|
|
|
for (Long feedId : feedList) {
|
|
|
|
|
Long taskInfoId = feedbackIdsMap.get(feedId);
|
|
|
|
|
if (null != infoMap && infoMap.size() > 0) {
|
|
|
|
|
String taskTitleName = infoMap.get(taskInfoId);
|
|
|
|
|
taskTitles.add(taskTitleName);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ctGalleryImage.setTaskTitles(taskTitles);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void setFile(List<CtGalleryImages> list) {
|
|
|
|
|
for (CtGalleryImages ctGalleryImages : list) {
|
|
|
|
|
List<CtGalleryImagesTag> galleryImagesTags = ctGalleryImagesTagService.list(new LambdaQueryWrapper<CtGalleryImagesTag>()
|
|
|
|
|
.eq(CtGalleryImagesTag::getImageId, ctGalleryImages.getId()));
|
|
|
|
|
ctGalleryImages.setImagesTags(galleryImagesTags);
|
|
|
|
|
List<CmAttach> cmAttachList = cmAttachService.list(new LambdaQueryWrapper<CmAttach>().eq(CmAttach::getFileId,ctGalleryImages.getFileId()));
|
|
|
|
|
ctGalleryImages.setFile(cmAttachList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询图库图片列表
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("查询图库图片列表")
|
|
|
|
|
@GetMapping("/list")
|
|
|
|
|
public AjaxResult list(CtGalleryImages ctGalleryImages) {
|
|
|
|
|
LambdaQueryWrapper<CtGalleryImages> queryWrapper = new LambdaQueryWrapper();
|
|
|
|
|
condition(queryWrapper,ctGalleryImages);
|
|
|
|
|
if (null != ctGalleryImages.getFeedbackId()) {
|
|
|
|
|
List<CtImagesFeedbackRef> ctImagesFeedbackRefs = ctImagesFeedbackRefService.list(new LambdaQueryWrapper<CtImagesFeedbackRef>()
|
|
|
|
|
.eq(CtImagesFeedbackRef::getFeedbackId, ctGalleryImages.getFeedbackId()));
|
|
|
|
|
List<Long> imageIds = ctImagesFeedbackRefs.stream()
|
|
|
|
|
.map(CtImagesFeedbackRef::getImageId)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
if (null != imageIds && imageIds.size() > 0) {
|
|
|
|
|
List<CtGalleryImages> galleryImages = ctGalleryImagesService.list(new LambdaQueryWrapper<CtGalleryImages>()
|
|
|
|
|
.in(CtGalleryImages::getId, imageIds));
|
|
|
|
|
return success(galleryImages);
|
|
|
|
|
} else {
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<CtGalleryImages> list = ctGalleryImagesService.list(queryWrapper);
|
|
|
|
|
return success(list);
|
|
|
|
|
}
|
|
|
|
|
/**
|
|
|
|
|
* 生成图片
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("生成图片")
|
|
|
|
|
@Log(title = "生成图片", businessType = BusinessType.UPDATE)
|
|
|
|
|
@PostMapping("/generateImage")
|
|
|
|
|
public AjaxResult generateImage(@RequestBody CtGalleryImages ctGalleryImages) {
|
|
|
|
|
List<Long> imagesIds = ctGalleryImages.getIds();
|
|
|
|
|
String imageType = ctGalleryImages.getImageType(); // 假设 CtGalleryImages 有一个 imageType 字段用于指定生成图片的类型
|
|
|
|
|
List<CtGalleryImages> list = ctGalleryImagesService.list(new LambdaQueryWrapper<CtGalleryImages>()
|
|
|
|
|
.in(CtGalleryImages::getId, imagesIds));
|
|
|
|
|
BufferedImage[] imgs = new BufferedImage[list.size()];
|
|
|
|
|
Map<Integer, File> imgMap = new HashMap<>();
|
|
|
|
|
int index = 0;
|
|
|
|
|
for (CtGalleryImages galleryImages : list) {
|
|
|
|
|
String attachUrl = galleryImages.getImagePath().replace("/profile", "");
|
|
|
|
|
String filePath = profile + attachUrl;
|
|
|
|
|
try {
|
|
|
|
|
imgs[index] = OperateImageUtils.getBufferedImage(filePath);
|
|
|
|
|
imgMap.put(index, new File(filePath));
|
|
|
|
|
index = index + 1 ;
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
return AjaxResult.error("读取图片失败: " + filePath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
BufferedImage destImg = null;
|
|
|
|
|
String outputFileName = null;
|
|
|
|
|
String mp4SavePath = "";
|
|
|
|
|
try {
|
|
|
|
|
switch (imageType) {
|
|
|
|
|
case "nineGrid":
|
|
|
|
|
if (imgs.length >= 9) {
|
|
|
|
|
destImg = OperateImageUtils.mergeImageToGrid(3, 3, imgs);
|
|
|
|
|
outputFileName = UUIDUtils.generatorUUID() + "nineGrid.jpg";
|
|
|
|
|
} else {
|
|
|
|
|
return AjaxResult.error("生成九宫格图片需要至少9张图片");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "fourGrid":
|
|
|
|
|
if (imgs.length >= 4) {
|
|
|
|
|
BufferedImage[] fourImgs = new BufferedImage[4];
|
|
|
|
|
System.arraycopy(imgs, 0, fourImgs, 0, 4);
|
|
|
|
|
destImg = OperateImageUtils.mergeImageToGrid(2, 2, fourImgs);
|
|
|
|
|
outputFileName = UUIDUtils.generatorUUID() + "fourGrid.jpg";
|
|
|
|
|
} else {
|
|
|
|
|
return AjaxResult.error("生成四宫格图片需要至少4张图片");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "horizontalMerge":
|
|
|
|
|
if (imgs.length >= 2) {
|
|
|
|
|
destImg = OperateImageUtils.mergeImage(true, imgs);
|
|
|
|
|
outputFileName = UUIDUtils.generatorUUID() + "horizontalMerge.jpg";
|
|
|
|
|
} else {
|
|
|
|
|
return AjaxResult.error("水平合并需要至少2张图片");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "verticalMerge":
|
|
|
|
|
if (imgs.length >= 2) {
|
|
|
|
|
destImg = OperateImageUtils.mergeImage(false, imgs);
|
|
|
|
|
outputFileName = UUIDUtils.generatorUUID() + "verticalMerge.jpg";
|
|
|
|
|
} else {
|
|
|
|
|
return AjaxResult.error("垂直合并需要至少2张图片");
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case "video":
|
|
|
|
|
int width = imgs[0].getWidth();
|
|
|
|
|
int height = imgs[0].getHeight();
|
|
|
|
|
mp4SavePath = UUIDUtils.generatorUUID() + "output.mp4";
|
|
|
|
|
OperateImageUtils.createMp4(profile, mp4SavePath, imgMap, width, height);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
return AjaxResult.error("不支持的生成类型: " + imageType);
|
|
|
|
|
}
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
e.printStackTrace();
|
|
|
|
|
}
|
|
|
|
|
if (destImg != null) {
|
|
|
|
|
OperateImageUtils.saveImage(destImg, profile , outputFileName, "jpg");
|
|
|
|
|
return AjaxResult.success("图片生成成功", outputFileName);
|
|
|
|
|
}
|
|
|
|
|
if (StringUtils.isNotEmpty(mp4SavePath)) {
|
|
|
|
|
return AjaxResult.success("视频生成成功", mp4SavePath);
|
|
|
|
|
}
|
|
|
|
|
return AjaxResult.error("图片/视频生成失败");
|
|
|
|
|
}
|
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 通用上传请求(单个)
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/upload")
|
|
|
|
|
public AjaxResult uploadFile(MultipartFile file, String fileId, Long cataId, String imageTitle, Date photoTime, Date uploadTime,
|
|
|
|
|
String isOpen, String keyWords, String remarks, Long tagId, ArrayList<Long> ctTags, Long feedbackId
|
|
|
|
|
) throws Exception
|
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
Long newId = System.currentTimeMillis() + new Random().nextInt(1000);
|
|
|
|
|
CtGalleryImages ctGalleryImages = new CtGalleryImages();
|
|
|
|
|
ctGalleryImages.setCataId(cataId);
|
|
|
|
|
ctGalleryImages.setImageTitle(imageTitle);
|
|
|
|
|
ctGalleryImages.setPhotoTime(photoTime);
|
|
|
|
|
ctGalleryImages.setUploadTime(uploadTime);
|
|
|
|
|
ctGalleryImages.setIsOpen(isOpen);
|
|
|
|
|
ctGalleryImages.setKeyWords(keyWords);
|
|
|
|
|
ctGalleryImages.setRemarks(remarks);
|
|
|
|
|
ctGalleryImages.setFileId(newId);
|
|
|
|
|
// 上传文件路径
|
|
|
|
|
String filePath = BsConfig.getUploadPath();
|
|
|
|
|
// 上传并返回新文件名称
|
|
|
|
|
String fileName = FileUploadUtils.upload(filePath, file);
|
|
|
|
|
String realName = fileName.replace("profile", "");
|
|
|
|
|
String exifInfo = ExifUtils.getExifInfo(getProfile() + realName).toString();
|
|
|
|
|
ctGalleryImages.setExifInfo(exifInfo);
|
|
|
|
|
String url = serverConfig.getUrl() + fileName;
|
|
|
|
|
String newFileName = FileUtils.getName(fileName);
|
|
|
|
|
String originalFilename = file.getOriginalFilename();
|
|
|
|
|
CmAttach cmAttach = new CmAttach();
|
|
|
|
|
cmAttach.setFileId(String.valueOf(newId));
|
|
|
|
|
cmAttach.setFileSort(1L);
|
|
|
|
|
cmAttach.setAttachName(newFileName);
|
|
|
|
|
cmAttach.setAttachContentType(file.getContentType());
|
|
|
|
|
cmAttach.setAttachFileSize(file.getSize());
|
|
|
|
|
cmAttach.setAttachFileUrl(fileName);
|
|
|
|
|
cmAttach.setOldName(originalFilename);
|
|
|
|
|
cmAttach.setVersionNo("1");
|
|
|
|
|
cmAttach.setRemark("");
|
|
|
|
|
boolean save = cmAttachService.save(cmAttach);
|
|
|
|
|
if (save) {
|
|
|
|
|
Long id = cmAttach.getId();
|
|
|
|
|
AjaxResult ajax = AjaxResult.success();
|
|
|
|
|
ajax.put("cmAttach", cmAttach);
|
|
|
|
|
CtTaskTag taskTag = null;
|
|
|
|
|
if (null != tagId) {
|
|
|
|
|
taskTag = ctTaskTagService.getById(tagId);
|
|
|
|
|
ctGalleryImages.setCataId(taskTag.getSaveDir());
|
|
|
|
|
}
|
|
|
|
|
ctGalleryImages.setImageName(originalFilename);
|
|
|
|
|
ctGalleryImages.setImagePath(fileName);
|
|
|
|
|
ctGalleryImages.setImageSize(BigDecimal.valueOf(file.getSize()));
|
|
|
|
|
ctGalleryImages.setFileId(newId);
|
|
|
|
|
boolean saveImage = ctGalleryImagesService.save(ctGalleryImages);
|
|
|
|
|
if (saveImage) {
|
|
|
|
|
ajax.put("imageId",ctGalleryImages.getId());
|
|
|
|
|
if (null != taskTag) {
|
|
|
|
|
CtGalleryImagesTag ctGalleryImagesTag = new CtGalleryImagesTag();
|
|
|
|
|
ctGalleryImagesTag.setImageId(ctGalleryImages.getId());
|
|
|
|
|
ctGalleryImagesTag.setTagType(taskTag.getTagType());
|
|
|
|
|
ctGalleryImagesTag.setTagName(taskTag.getTagName());
|
|
|
|
|
ctGalleryImagesTagService.save(ctGalleryImagesTag);
|
|
|
|
|
}
|
|
|
|
|
if (null != ctTags) {
|
|
|
|
|
for (Long ctTagId : ctTags) {
|
|
|
|
|
CtTag ctTag = ctTagService.getById(ctTagId);
|
|
|
|
|
CtGalleryImagesTag ctGalleryImagesTag = new CtGalleryImagesTag();
|
|
|
|
|
ctGalleryImagesTag.setImageId(ctGalleryImages.getId());
|
|
|
|
|
ctGalleryImagesTag.setTagType(ctTag.getTagType());
|
|
|
|
|
ctGalleryImagesTag.setTagName(ctTag.getTagName());
|
|
|
|
|
ctGalleryImagesTag.setIsPhoto(ctTag.getIsPhoto());
|
|
|
|
|
ctGalleryImagesTag.setTagDesc(ctTag.getTagDesc());
|
|
|
|
|
ctGalleryImagesTag.setPhotoNum(ctTag.getPhotoNum());
|
|
|
|
|
ctGalleryImagesTag.setSaveDir(ctTag.getSaveDir());
|
|
|
|
|
ctGalleryImagesTag.setFileId(ctTag.getFileId());
|
|
|
|
|
ctGalleryImagesTagService.save(ctGalleryImagesTag);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return ajax;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
return AjaxResult.error(e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 修改图库图片
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("添加图片标签")
|
|
|
|
|
@Log(title = "添加图片标签", businessType = BusinessType.UPDATE)
|
|
|
|
|
@PostMapping("/saveByTag")
|
|
|
|
|
public AjaxResult saveByTag(@RequestBody CtGalleryImages ctGalleryImages) {
|
|
|
|
|
ctGalleryImages.getTaskTagId();
|
|
|
|
|
CtTaskTag ctTaskTag = ctTaskTagService.getById(ctGalleryImages.getTaskTagId());
|
|
|
|
|
List<Long> ids = ctGalleryImages.getIds();
|
|
|
|
|
for (Long id : ids) {
|
|
|
|
|
CtGalleryImagesTag ctGalleryImagesTag = new CtGalleryImagesTag();
|
|
|
|
|
ctGalleryImagesTag.setImageId(id);
|
|
|
|
|
ctGalleryImagesTag.setTagType(ctTaskTag.getTagType());
|
|
|
|
|
ctGalleryImagesTag.setTagName(ctTaskTag.getTagName());
|
|
|
|
|
List<CtGalleryImagesTag> ctGalleryImagesTags = ctGalleryImagesTagService.list(new LambdaQueryWrapper<CtGalleryImagesTag>()
|
|
|
|
|
.eq(CtGalleryImagesTag::getImageId, id)
|
|
|
|
|
.eq(CtGalleryImagesTag::getTagType, ctTaskTag.getTagType())
|
|
|
|
|
.eq(CtGalleryImagesTag::getTagName, ctTaskTag.getTagName()));
|
|
|
|
|
if (null == ctGalleryImagesTags || ctGalleryImagesTags.size() == 0) {
|
|
|
|
|
ctGalleryImagesTagService.save(ctGalleryImagesTag);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return toAjax(true);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 修改图库图片
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("生成任务")
|
|
|
|
|
@Log(title = "生成任务", businessType = BusinessType.UPDATE)
|
|
|
|
|
@PostMapping("/generateTasks")
|
|
|
|
|
public AjaxResult generateTasks(@RequestBody CtGalleryImages ctGalleryImages) {
|
|
|
|
|
List<Long> imagesIds = ctGalleryImages.getIds();
|
|
|
|
|
List<CtGalleryImagesTag> list = ctGalleryImagesTagService.list(new LambdaQueryWrapper<CtGalleryImagesTag>()
|
|
|
|
|
.in(CtGalleryImagesTag::getImageId, imagesIds));
|
|
|
|
|
CtTaskInfo ctTaskInfo = new CtTaskInfo();
|
|
|
|
|
Long newId = System.currentTimeMillis() + new Random().nextInt(1000);
|
|
|
|
|
ctTaskInfo.setId(newId);
|
|
|
|
|
//设置发起单位与部门
|
|
|
|
|
LoginUser loginUser = getLoginUser();
|
|
|
|
|
Long deptId = loginUser.getDeptId();
|
|
|
|
|
if (null != deptId) {
|
|
|
|
|
ctTaskInfo.setDeptId(deptId);
|
|
|
|
|
SysDept sysDept = deptService.selectDeptById(deptId);
|
|
|
|
|
Long parentId = sysDept.getParentId();
|
|
|
|
|
SysDept parentDept = deptService.selectDeptById(parentId);
|
|
|
|
|
if (null != parentDept) {
|
|
|
|
|
ctTaskInfo.setBranchCode(String.valueOf(parentDept.getDeptId()));
|
|
|
|
|
ctTaskInfo.setBranchName(parentDept.getDeptName());
|
|
|
|
|
}
|
|
|
|
|
CtTaskBranch branch = new CtTaskBranch();
|
|
|
|
|
branch.setBranchCode(String.valueOf(deptId));
|
|
|
|
|
branch.setBranchName(sysDept.getDeptName());
|
|
|
|
|
branch.setTaskId(ctTaskInfo.getId());
|
|
|
|
|
branch.setType("机构");
|
|
|
|
|
ctTaskBranchService.saveOrUpdate(branch);
|
|
|
|
|
CtTaskBranch taskBranch = new CtTaskBranch();
|
|
|
|
|
taskBranch.setBranchCode(String.valueOf(deptId));
|
|
|
|
|
taskBranch.setUserName(loginUser.getUsername());
|
|
|
|
|
taskBranch.setUserId(String.valueOf(loginUser.getUserId()));
|
|
|
|
|
taskBranch.setTaskStatus("0");
|
|
|
|
|
taskBranch.setTaskId(ctTaskInfo.getId());
|
|
|
|
|
taskBranch.setType("人员");
|
|
|
|
|
ctTaskBranchService.saveOrUpdate(taskBranch);
|
|
|
|
|
}
|
|
|
|
|
if ("1".equals(ctTaskInfo.getStatus())) {
|
|
|
|
|
ctTaskInfo.setTaskDate(new Date());
|
|
|
|
|
}
|
|
|
|
|
boolean save = ctTaskInfoService.save(ctTaskInfo);
|
|
|
|
|
if (save) {
|
|
|
|
|
List<CtTaskTag> tasgs = ctTaskInfo.getTags();
|
|
|
|
|
if (null != tasgs && tasgs.size() > 0) {
|
|
|
|
|
if (null != list && list.size() > 0) {
|
|
|
|
|
for (CtGalleryImagesTag image : list) {
|
|
|
|
|
CtTaskTag taskTag = new CtTaskTag();
|
|
|
|
|
taskTag.setTaskId(ctTaskInfo.getId());
|
|
|
|
|
taskTag.setTagName(image.getTagName());
|
|
|
|
|
taskTag.setTagType(image.getTagType());
|
|
|
|
|
taskTag.setIsPhoto(image.getIsPhoto());
|
|
|
|
|
taskTag.setTagDesc(image.getTagDesc());
|
|
|
|
|
taskTag.setPhotoNum(image.getPhotoNum());
|
|
|
|
|
taskTag.setSaveDir(image.getSaveDir());
|
|
|
|
|
taskTag.setFileId(image.getFileId());
|
|
|
|
|
ctTaskTagService.save(taskTag);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return success(ctTaskInfo);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 导出图库图片列表
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("导出图库图片列表")
|
|
|
|
|
@Log(title = "图库图片导出", businessType = BusinessType.EXPORT)
|
|
|
|
|
@PostMapping("/export")
|
|
|
|
|
public void export(HttpServletResponse response, CtGalleryImages ctGalleryImages) {
|
|
|
|
|
LambdaQueryWrapper<CtGalleryImages> queryWrapper = new LambdaQueryWrapper();
|
|
|
|
|
condition(queryWrapper,ctGalleryImages);
|
|
|
|
|
List<CtGalleryImages> list = ctGalleryImagesService.list(queryWrapper);
|
|
|
|
|
ExcelUtil<CtGalleryImages> util = new ExcelUtil<CtGalleryImages>(CtGalleryImages. class);
|
|
|
|
|
util.exportExcel(response, list, "图库图片数据");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取图库图片详细信息
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("获取图库图片详细信息")
|
|
|
|
|
@GetMapping(value = "/{id}")
|
|
|
|
|
public AjaxResult getInfo(@PathVariable("id") Long id) {
|
|
|
|
|
return success(ctGalleryImagesService.getById(id));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 新增图库图片
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("新增图库图片")
|
|
|
|
|
@Log(title = "图库图片新增", businessType = BusinessType.INSERT)
|
|
|
|
|
@PostMapping
|
|
|
|
|
public AjaxResult add(@RequestBody CtGalleryImages ctGalleryImages) {
|
|
|
|
|
return toAjax(ctGalleryImagesService.save(ctGalleryImages));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 修改图库图片
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("修改图库图片")
|
|
|
|
|
@Log(title = "图库图片修改", businessType = BusinessType.UPDATE)
|
|
|
|
|
@PutMapping
|
|
|
|
|
public AjaxResult edit(@RequestBody CtGalleryImages ctGalleryImages) {
|
|
|
|
|
return toAjax(ctGalleryImagesService.updateById(ctGalleryImages));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 删除图库图片
|
|
|
|
|
*/
|
|
|
|
|
@ApiOperation("删除图库图片")
|
|
|
|
|
@Log(title = "图库图片删除", businessType = BusinessType.DELETE)
|
|
|
|
|
@DeleteMapping("/{ids}")
|
|
|
|
|
public AjaxResult remove(@PathVariable List<Long> ids) {
|
|
|
|
|
return toAjax(ctGalleryImagesService.removeBatchByIds(ids));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 条件设置
|
|
|
|
|
*/
|
|
|
|
|
private void condition (LambdaQueryWrapper<CtGalleryImages> queryWrapper,CtGalleryImages ctGalleryImages){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//id
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getId())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getId,ctGalleryImages.getId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//目录id
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getCataId())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getCataId,ctGalleryImages.getCataId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//图片名称
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getImageName())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getImageName,ctGalleryImages.getImageName());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//图片标题
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getImageTitle())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getImageTitle,ctGalleryImages.getImageTitle());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//图片路径
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getImagePath())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getImagePath,ctGalleryImages.getImagePath());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//图片大小
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getImageSize())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getImageSize,ctGalleryImages.getImageSize());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//图片拍摄时间
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getPhotoTime())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getPhotoTime,ctGalleryImages.getPhotoTime());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//图片上传时间
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getUploadTime())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getUploadTime,ctGalleryImages.getUploadTime());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//是否公开
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getIsOpen())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getIsOpen,ctGalleryImages.getIsOpen());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//图片关键字
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getKeyWords())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getKeyWords,ctGalleryImages.getKeyWords());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//附件id
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getFileId())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getFileId,ctGalleryImages.getFileId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//备注
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getRemarks())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getRemarks,ctGalleryImages.getRemarks());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//删除标志(0代表存在 2代表删除)
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getDelFlag())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getDelFlag,ctGalleryImages.getDelFlag());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//创建部门
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getCreateDept())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getCreateDept,ctGalleryImages.getCreateDept());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//创建人
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getCreateBy())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getCreateBy,ctGalleryImages.getCreateBy());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//创建时间
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getCreateTime())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getCreateTime,ctGalleryImages.getCreateTime());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//修改人
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getUpdateBy())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getUpdateBy,ctGalleryImages.getUpdateBy());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//修改时间
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getUpdateTime())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getUpdateTime,ctGalleryImages.getUpdateTime());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//租户ID
|
|
|
|
|
if(Validator.isNotEmpty(ctGalleryImages.getTenantId())){
|
|
|
|
|
queryWrapper.eq(CtGalleryImages::getTenantId,ctGalleryImages.getTenantId());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
|
|
try {
|
|
|
|
|
System.out.println(ExifUtils.getExifInfo("d:\\1.jpg").toString());
|
|
|
|
|
/*File imageFile = new File("d:\\1.jpg");
|
|
|
|
|
Metadata metadata = ImageMetadataReader.readMetadata(imageFile);
|
|
|
|
|
for (Directory directory : metadata.getDirectories()) {
|
|
|
|
|
for (Tag tag : directory.getTags()) {
|
|
|
|
|
System.out.println(tag.getTagName() + " = " + tag.getDescription());
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
} catch (ImageProcessingException e) {
|
|
|
|
|
// 处理异常
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
// 处理IO异常
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|