package com.izouma.nineth.web; import cn.hutool.core.collection.CollUtil; import com.izouma.nineth.domain.Collection; import com.izouma.nineth.domain.*; import com.izouma.nineth.dto.PageQuery; import com.izouma.nineth.enums.AuthStatus; import com.izouma.nineth.enums.HeatType; import com.izouma.nineth.exception.BusinessException; import com.izouma.nineth.repo.*; import com.izouma.nineth.service.ShowroomService; import com.izouma.nineth.service.SysConfigService; import com.izouma.nineth.utils.SecurityUtils; import com.izouma.nineth.utils.excel.ExcelUtils; import lombok.AllArgsConstructor; import org.apache.commons.lang3.ObjectUtils; import org.springframework.data.domain.Page; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.*; import java.util.stream.Collectors; @RestController @RequestMapping("/showroom") @AllArgsConstructor public class ShowroomController extends BaseController { private ShowroomService showroomService; private ShowroomRepo showroomRepo; private ShowCollectionRepo showCollectionRepo; private NewsLikeRepo newsLikeRepo; private CollectionRepo collectionRepo; private HeatInfoRepo heatInfoRepo; private SysConfigService sysConfigService; @PostMapping("/save") public Showroom save(@RequestBody Showroom record) { return showroomService.save(SecurityUtils.getAuthenticatedUser().getId(), record); } @PostMapping("/update") public Showroom update(@RequestBody Showroom record) { return showroomService.update(SecurityUtils.getAuthenticatedUser().getId(), record); } @PostMapping("/create") public Showroom create(@RequestParam Long userId, @RequestParam String type) { return showroomService.save(userId, type); } @PostMapping("/all") public Page all(@RequestBody PageQuery pageQuery) { return showroomService.show(pageQuery); } @GetMapping("/get/{id}") public Showroom get(@PathVariable Long id) { Showroom showroom = showroomRepo.findById(id).orElseThrow(new BusinessException("无记录")); List origin = showCollectionRepo.findAllByShowroomIdOrderBySort(id); List neo = new ArrayList<>(); if (origin != null) { origin.forEach(orig -> collectionRepo.findById(orig.getCollectionId()) .ifPresent(collection -> { orig.setStatus(showroomService.getStatus(collection)); orig.setPrice(collection.getPrice()); neo.add(orig); })); } showroom.setCollections(neo); User user = SecurityUtils.getAuthenticatedUser(); if (user != null && !user.isAdmin()) { List likes = newsLikeRepo.findByUserIdAndShowroomId(user .getId(), id); showroom.setLiked(CollUtil.isNotEmpty(likes)); } return showroom; } @PreAuthorize("hasRole('ADMIN')") @PostMapping("/del/{id}") public void del(@PathVariable Long id) { showCollectionRepo.deleteAllByShowroomId(id); showroomRepo.softDelete(id); } @GetMapping("/excel") @ResponseBody public void excel(HttpServletResponse response, PageQuery pageQuery) throws IOException { List data = all(pageQuery).getContent(); ExcelUtils.export(response, data); } @GetMapping("/{id}/share") public void addShare(@PathVariable Long id) { showroomRepo.addShare(id, 1); } //加浏览 @GetMapping("/{id}/view") public void addView(@PathVariable Long id) { //增加浏览量 Long userId = SecurityUtils.getAuthenticatedUser().getId(); if (ObjectUtils.isEmpty(userId)) { return; } List list = heatInfoRepo.findByUserIdAndShowroomIdAndType(userId, id, HeatType.VIEW); if (!list.isEmpty()) return; int weight = sysConfigService.getInt("heat_view_weight"); heatInfoRepo.save(HeatInfo.builder() .userId(userId) .showroomId(id) .type(HeatType.VIEW) .value(weight) .build()); showroomRepo.addHeat(id, weight); } @PostMapping("/pass") public void pass(@RequestParam Long id) { showroomService.audit(id, AuthStatus.SUCCESS, null); } @PostMapping("/deny") public void deny(@RequestParam Long id, String reason) { showroomService.audit(id, AuthStatus.FAIL, reason); } }