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.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; @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 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()); 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("userLikeGroupId") Long userLikeGroupId) { return Response.success(userLikeGroupService.exportSave(file, userLikeGroupId)); } @ApiOperation(value = "exportSearch") @PostMapping("/exportSearch") public Response exportSearch(@Valid @RequestBody ExportSearchDTO exportSearchDTO) { return Response.success(userLikeGroupService.exportSearch(exportSearchDTO.getUserLikeGroupId())); } @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 = "userlikeGroupId") Long userLikeGroupId) { return Response.success(userLikeGroupService.toProductImageElementUpload(file, userLikeGroupId)); } @ApiOperation(value = "productImageLike") @PostMapping("/productImageLike") public Response productImageLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) { return Response.success(userLikeGroupService.productImageLike(productImageLikeDTO)); } @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); } }