| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- package com.izouma.nineth.service;
- import com.izouma.nineth.annotations.RedisLock;
- import com.izouma.nineth.config.GeneralProperties;
- import com.izouma.nineth.domain.Asset;
- import com.izouma.nineth.domain.Collection;
- import com.izouma.nineth.domain.IdentityAuth;
- import com.izouma.nineth.domain.PhotoAsset;
- import com.izouma.nineth.dto.PageQuery;
- import com.izouma.nineth.enums.AssetStatus;
- import com.izouma.nineth.enums.AuthStatus;
- import com.izouma.nineth.enums.CollectionStatus;
- import com.izouma.nineth.exception.BusinessException;
- import com.izouma.nineth.repo.AssetRepo;
- import com.izouma.nineth.repo.PhotoAssetRepo;
- import com.izouma.nineth.repo.UserRepo;
- import com.izouma.nineth.utils.JpaUtils;
- import com.izouma.nineth.utils.ObjUtils;
- import lombok.AllArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.core.env.Environment;
- import org.springframework.data.domain.Page;
- import org.springframework.scheduling.annotation.Scheduled;
- import org.springframework.stereotype.Service;
- import java.math.BigDecimal;
- import java.util.Arrays;
- import java.util.List;
- import java.util.Map;
- import java.util.concurrent.TimeUnit;
- @Service
- @AllArgsConstructor
- @Slf4j
- public class PhotoAssetService {
- private PhotoAssetRepo photoAssetRepo;
- private AssetRepo assetRepo;
- private AssetService assetService;
- private UserRepo userRepo;
- private ContentAuditService contentAuditService;
- private GeneralProperties generalProperties;
- private Environment env;
- public Page<PhotoAsset> all(PageQuery pageQuery) {
- return photoAssetRepo
- .findAll(JpaUtils.toSpecification(pageQuery, PhotoAsset.class), JpaUtils.toPageRequest(pageQuery));
- }
- public PhotoAsset save(PhotoAsset record) {
- //将选取的藏品取消上架
- Asset asset = assetService.cancelConsignmentAndStore(record.getDestroyAssetId());
- record.setStatus(CollectionStatus.PENDING);
- record.setUserAvatar(asset.getOwnerAvatar());
- record.setUserName(asset.getOwner());
- record.setDestroyAssetName(asset.getName());
- if (asset.getNumber() != null) {
- record.setDestroyAssetNumber(asset.getNumber().toString());
- }
- return photoAssetRepo.save(record);
- }
- public void pass(PhotoAsset photoAsset) {
- //销毁原来的藏品
- assetService.destroyWithoutTradecode(photoAsset.getDestroyAssetId(), photoAsset.getUserId());
- //生成新的藏品
- Long createId = assetService.createAsset(photoAsset, userRepo.findById(photoAsset.getUserId())
- .orElseThrow(new BusinessException("无用户记录")), null, BigDecimal.ZERO, "星图", null, false).getId();
- photoAsset.setStatus(CollectionStatus.SUCCESS);
- photoAsset.setCreateAssetId(createId);
- photoAssetRepo.save(photoAsset);
- }
- public void deny(Long id) {
- PhotoAsset photoAsset = photoAssetRepo.findById(id).orElseThrow(new BusinessException("无记录"));
- photoAsset.setStatus(CollectionStatus.FAIL);
- Asset asset = assetRepo.findById(photoAsset.getDestroyAssetId()).orElseThrow(new BusinessException("无藏品记录"));
- asset.setStatus(AssetStatus.NORMAL);
- assetRepo.saveAndFlush(asset);
- photoAssetRepo.save(photoAsset);
- }
- @Scheduled(fixedRate = 60000)
- @RedisLock(value = "autoPictureAudit", expire = 30, unit = TimeUnit.MINUTES)
- public void autoValidate() {
- if (generalProperties.isNotifyServer()) return;
- if (Arrays.asList(env.getActiveProfiles()).contains("dev")) {
- return;
- }
- try {
- List<PhotoAsset> list = photoAssetRepo.findAllByStatusAndAuditResultNotNull(CollectionStatus.PENDING);
- list.parallelStream().forEach(this::imageAudit);
- } catch (Exception e) {
- log.error("批量图片审核出错", e);
- }
- }
- public void imageAudit(PhotoAsset photoAsset) {
- boolean result = contentAuditService.auditImage(photoAsset.getPic().getUrl());
- if (!result) {
- photoAsset.setAuditResult("涉及色情性感内容或暴恐,需要人工审核.");
- photoAssetRepo.save(photoAsset);
- } else {
- pass(photoAsset);
- }
- }
- }
|