package com.ai.da.controller; import cn.hutool.core.collection.CollectionUtil; import com.ai.da.common.config.exception.BusinessException; import com.ai.da.common.context.UserContext; import com.ai.da.common.response.PageBaseResponse; import com.ai.da.common.response.Response; import com.ai.da.common.utils.CopyUtil; import com.ai.da.common.utils.MinioUtil; import com.ai.da.mapper.primary.TDesignPythonOutfitMapper; import com.ai.da.mapper.primary.entity.*; import com.ai.da.model.dto.*; import com.ai.da.model.vo.*; import com.ai.da.service.*; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.base.Function; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.validation.Valid; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @Api(tags = "History模块(saved Collection)") @Slf4j @RestController @RequestMapping("/api/history") public class SavedCollectionController { @Resource private UserLikeGroupService userLikeGroupService; @Resource private UserLikeService userLikeService; @Resource private AccountService accountService; @Resource private TDesignPythonOutfitMapper designPythonOutfitMapper; @Resource private MinioUtil minioUtil; @Resource private ClassificationService classificationService; @Resource private PortfolioService portfolioService; @ApiOperation(value = "History用户分页分组列表") @PostMapping("/queryUserGroup") public Response> queryUserGroup(@Valid @RequestBody QueryHistoryPageDTO query) { AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder(); // 分页数据 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("account_id", authPrincipalVo.getId()); if (!StringUtils.isEmpty(query.getCollectionName())) { queryWrapper.like("name", query.getCollectionName()); } if (Objects.nonNull(query.getStartDate())) { queryWrapper.ge("update_date", new Date(query.getStartDate())); } if (Objects.nonNull(query.getEndDate())) { queryWrapper.le("update_date", new Date(query.getEndDate())); } // 新增分类过滤 if (CollectionUtil.isNotEmpty(query.getClassificationIdList())) { List historyIdList = new ArrayList<>(); if (query.getIntersection() == 0) { for (Long classificationId : query.getClassificationIdList()) { historyIdList.addAll(classificationService.getLibraryIdListByClassificationId(classificationId)); } if (CollectionUtil.isNotEmpty(historyIdList)) { queryWrapper.in("id", historyIdList); }else { return Response.success(PageBaseResponse.success(new Page<>())); } }else { for (int i = 0; i < query.getClassificationIdList().size(); i++) { List historyIdListByClassificationId = classificationService.getLibraryIdListByClassificationId(query.getClassificationIdList().get(i)); if (i == 0) { historyIdList.addAll(historyIdListByClassificationId); }else { historyIdList.retainAll(historyIdListByClassificationId); } if (CollectionUtil.isEmpty(historyIdList)) { return Response.success(PageBaseResponse.success(new Page<>())); } } queryWrapper.in("id", historyIdList); } } queryWrapper.orderByDesc("update_date"); IPage page = userLikeGroupService.getBaseMapper().selectPage( new Page<>(query.getPage(), query.getSize()), queryWrapper); if (CollectionUtils.isEmpty(page.getRecords())) { return Response.success(PageBaseResponse.success(new Page<>())); } List groupIds = page.getRecords().stream().map(UserLikeGroup::getId).collect(Collectors.toList()); List groupDetails = userLikeService.getGroupDetails(groupIds); // if (CollectionUtils.isEmpty(groupDetails)) { // throw new BusinessException("groupDetails.not.found"); // } Map> groupDetailMap = groupDetails.stream() .collect(Collectors.groupingBy(UserLikeVO::getUserLikeGroupId)); Account account = accountService.getById(authPrincipalVo.getId()); IPage convert = page.convert((Function) group -> { if (group != null) { UserLikeGroupVO userLikeGroupVO = CopyUtil.copyObject(group, UserLikeGroupVO.class); userLikeGroupVO.setUpdateDate(group.getUpdateDate().getTime()); userLikeGroupVO.setAuthor(account.getUserName()); //count 和detail if (groupDetailMap.keySet().contains(group.getId())) { List details = groupDetailMap.get(group.getId()); for (UserLikeVO detail : details) { TDesignPythonOutfit tDesignPythonOutfit = designPythonOutfitMapper.selectById(detail.getDesignOutfitId()); detail.setUrl(minioUtil.getPreSignedUrl(tDesignPythonOutfit.getDesignUrl(), 24 * 60)); } userLikeGroupVO.setGroupDetails(details); userLikeGroupVO.setSketchCount(CollectionUtils.isEmpty(details) ? 0 : details.size()); }else { userLikeGroupVO.setSketchCount(0); } if (userLikeGroupVO.getOriginal() == 0) { userLikeGroupVO.setOriginalAccountName(accountService.getById(userLikeGroupVO.getOriginalAccountId()).getUserName()); Portfolio byId = portfolioService.getByIdAll(userLikeGroupVO.getOriginalPortfolioId()); if (Objects.nonNull(byId)) { String portfolioName = byId.getPortfolioName(); userLikeGroupVO.setOriginalPortfolioName(portfolioName); } } return userLikeGroupVO; } return null; }); return Response.success(PageBaseResponse.success(convert)); } @ApiOperation(value = "History用户分组详情,目前弃用 ") @GetMapping("/getUserGroupDetail") public Response> getUserGroupDetail( @ApiParam("用户分组id") @RequestParam("userGroupId") Long userGroupId) { return Response.success(userLikeService.getGroupDetail(userGroupId)); } @ApiOperation(value = "History修改用户分组名") @PostMapping("/updateUserGroupName") public Response updateUserGroupName(@Valid @RequestBody HistoryUpdateDTO historyUpdateDTO) { return Response.success(userLikeGroupService.updateUserGroupName(historyUpdateDTO.getUserGroupId() , historyUpdateDTO.getUserGroupName(), historyUpdateDTO.getTimeZone())); } @ApiOperation(value = "History删除用户分组") @PostMapping("/deleteUserGroup") public Response deleteUserGroup(@Valid @RequestBody HistoryDeleteDTO deleteDTO) { userLikeGroupService.deleteUserGroup(deleteDTO.getUserGroupId()); userLikeService.deleteByUserGroupId(deleteDTO.getUserGroupId()); return Response.success(Boolean.TRUE); } @ApiOperation(value = "History choose") @GetMapping("/choose") public Response choose( @ApiParam("用户分组id") @RequestParam("userGroupId") Long userGroupId) { return Response.success(userLikeGroupService.choose(userGroupId)); } @ApiOperation(value = "exportSave") @PostMapping("/exportSave") public Response exportSave(@RequestParam("file") MultipartFile file, @RequestParam("projectId") Long projectId, @RequestParam("module") String module) { return Response.success(userLikeGroupService.exportSave(file, projectId, module)); } @ApiOperation(value = "exportSearch") @PostMapping("/exportSearch") public Response exportSearch(@Valid @RequestBody ExportSearchDTO exportSearchDTO) { return Response.success(userLikeGroupService.exportSearch(exportSearchDTO)); } @ApiOperation(value = "toProduct") @PostMapping("/toProduct") public Response> toProduct(@Valid @RequestBody ToProductImageDTO toProductImageDTO) { return Response.success(userLikeGroupService.toProduct(toProductImageDTO)); } @ApiOperation(value = "toProductImageElementUpload") @PostMapping("/toProductImageElementUpload") public Response toProductImageElementUpload(@RequestParam("file") MultipartFile file, @RequestParam(value = "projectId") Long projectId) { return Response.success(userLikeGroupService.toProductImageElementUpload(file, projectId)); } @ApiOperation(value = "toProductImageElementDelete") @PostMapping("/toProductImageElementDelete") public Response toProductImageElementDelete(@RequestParam(value = "id") Long id) { return Response.success(userLikeGroupService.toProductImageElementDelete(id)); } @ApiOperation(value = "productImageLike") @PostMapping("/productImageLike") public Response productImageLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) { return Response.success(userLikeGroupService.productImageLike(productImageLikeDTO)); } @ApiOperation(value = "collectionLikeUpdate") @PostMapping("/collectionLikeUpdate") public Response collectionLikeUpdate(@Valid @RequestBody CollectionLikeUpdateDTO collectionLikeUpdateDTO) { return Response.success(userLikeGroupService.collectionLikeUpdate(collectionLikeUpdateDTO)); } @ApiOperation(value = "productImageUnLike") @PostMapping("/productImageUnLike") public Response productImageUnLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) { return Response.success(userLikeGroupService.productImageUnLike(productImageLikeDTO)); } @ApiOperation(value = "获取生成结果") @PostMapping("/toProductImageResult") public Response> getToProductImageResult(@Valid @RequestBody List taskIdList) { List magicToolResultVOList = userLikeGroupService.getToProductImageResultList(taskIdList); return Response.success(magicToolResultVOList); } @ApiOperation(value = "画布用户上传元素") @PostMapping("/canvasElementUpload") public Response canvasElementUpload(@RequestParam("file") MultipartFile file) { return Response.success(userLikeGroupService.canvasElementUpload(file)); } @ApiOperation("productImageLikeList") @PostMapping("/productImageLikeList") public Response> productImageLikeList(@Valid @RequestBody ToProductImageDTO toProductImageDTO) { return Response.success(userLikeGroupService.productImageLikeList(toProductImageDTO)); } @ApiOperation(value = "relight") @PostMapping("/relight") public Response> relight(@Valid @RequestBody ToProductImageDTO toProductImageDTO) { return Response.success(userLikeGroupService.relight(toProductImageDTO)); } @ApiOperation(value = "获取relight结果") @PostMapping("/relightResult") public Response> getRelightResult(@Valid @RequestBody List taskIdList) { List magicToolResultVOList = userLikeGroupService.getRelightResult(taskIdList); return Response.success(magicToolResultVOList); } @ApiOperation(value = "likeHistoryRelSketch") @PostMapping("/likeHistoryRelSketch") public Response likeHistoryRelSketch() { return Response.success(userLikeGroupService.likeHistoryRelSketch()); } @ApiOperation(value = "download") @PostMapping("/download") public Response download() { return Response.success(userLikeGroupService.download()); } @ApiOperation(value = "productImageInitialize") @PostMapping("/productImageInitialize") public Response productImageUpload(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) { return Response.success(userLikeGroupService.productImageInitialize(productImageInitializeDTO)); } @ApiOperation(value = "getInitializeProgress") @PostMapping("/getInitializeProgress") public Response getInitializeProgress(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) { return Response.success(userLikeGroupService.getInitializeProgress(productImageInitializeDTO)); } @ApiOperation(value = "brandDNASaveOrUpdate") @PostMapping("/brandDNASaveOrUpdate") public Response brandDNASaveOrUpdate(@Valid @RequestBody BrandDNADTO brandDNADTO) { return Response.success(userLikeGroupService.brandDNASaveOrUpdate(brandDNADTO)); } @ApiOperation(value = "brandDNADelete") @PostMapping("/brandDNADelete") public Response brandDNADelete(@Valid @RequestBody BrandDNADTO brandDNADTO) { return Response.success(userLikeGroupService.brandDNADelete(brandDNADTO)); } @ApiOperation(value = "brandDNAPage") @PostMapping("/brandDNAPage") public Response> brandDNAPage(@Valid @RequestBody BrandDNAQueryDTO brandDNAQueryDTO) { return Response.success(userLikeGroupService.brandDNAPage(brandDNAQueryDTO)); } @ApiOperation(value = "brandLogoUpload") @PostMapping("/brandLogoUpload") public Response brandDNASaveOrUpdate(@RequestParam("file") MultipartFile file) { return Response.success(userLikeGroupService.brandLogoUpload(file)); } @ApiOperation(value = "brandDNAUpload") @PostMapping("/brandDNAUpload") public Response brandDNAUpload(@RequestParam("file") MultipartFile file, @RequestParam("brandId") Long brandId) throws IOException { return Response.success(userLikeGroupService.brandDNAUpload(file, brandId)); } @ApiOperation(value = "brandDNAGenerate") @PostMapping("/brandDNAGenerate") public Response brandDNAGenerate(@RequestParam("prompt") String prompt) { return Response.success(userLikeGroupService.brandDNAGenerate(prompt)); } }