| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- package com.izouma.nineth.service;
- import com.izouma.nineth.domain.Asset;
- import com.izouma.nineth.domain.AssetSuperimposition;
- import com.izouma.nineth.dto.PageQuery;
- import com.izouma.nineth.enums.AssetOperationType;
- import com.izouma.nineth.enums.AssetShowStatus;
- import com.izouma.nineth.enums.CollectionType;
- import com.izouma.nineth.exception.BusinessException;
- import com.izouma.nineth.repo.AssetSuperimpositionRepo;
- import com.izouma.nineth.repo.CollectionRepo;
- import com.izouma.nineth.utils.JpaUtils;
- import lombok.AllArgsConstructor;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.data.domain.Page;
- import org.springframework.stereotype.Service;
- import java.util.Objects;
- @Service
- @AllArgsConstructor
- @Slf4j
- public class AssetSuperimpositionService {
- private final int NUM = 1;
- private AssetSuperimpositionRepo assetSuperimpositionRepo;
- private CollectionRepo collectionRepo;
- public Page<AssetSuperimposition> all(PageQuery pageQuery) {
- return assetSuperimpositionRepo.findAll(JpaUtils.toSpecification(pageQuery, AssetSuperimposition.class), JpaUtils.toPageRequest(pageQuery));
- }
- /**
- * 调整各操作藏品叠加的数量信息
- *
- * @param asset 资产信息
- * @param type 操作类型
- * @param toUserId 相关用户id(买入人,被赠送人)
- */
- public void adjustNum(Asset asset, AssetOperationType type, Long toUserId) {
- AssetSuperimposition assetSuperimposition;
- if (asset.getType().equals(CollectionType.BLIND_BOX) && !asset.isOpened()) {
- assetSuperimposition = assetSuperimpositionRepo.findByBlindBoxAssetId(asset.getId()).orElse(null);
- if (Objects.isNull(assetSuperimposition) && !AssetOperationType.BUY.equals(type)) {
- throw new BusinessException("资产叠加表中没有该盲盒信息");
- }
- } else {
- assetSuperimposition = assetSuperimpositionRepo.findByUserIdAndPrefixName(asset.getUserId(), asset.getPrefixName()).orElse(null);
- }
- if (Objects.isNull(type)) {
- throw new BusinessException("操作类型不能为空");
- }
- if (StringUtils.isBlank(asset.getPrefixName())) {
- throw new BusinessException("prefixName不能为空");
- }
- if (Objects.isNull(asset.getUserId())) {
- throw new BusinessException("用户id不能为空");
- }
- if (Objects.isNull(assetSuperimposition)) {
- assetSuperimposition = new AssetSuperimposition(asset, asset.getUserId());
- }
- switch (type) {
- case OPEN_BLIND_BOX:
- log.info("调整{}数量 -> 开盲盒", asset.getId());
- AssetSuperimposition openBlindBox = assetSuperimpositionRepo.findByUserIdAndPrefixName(assetSuperimposition.getUserId(), assetSuperimposition.getPrefixName()).orElse(null);
- if (Objects.isNull(openBlindBox)) {
- openBlindBox = new AssetSuperimposition(asset, asset.getUserId());
- }
- openBlindBox.setAuctioningNum(openBlindBox.getAuctionedNum() + assetSuperimposition.getAuctionedNum());
- openBlindBox.setConsignmentNum(openBlindBox.getConsignmentNum() + assetSuperimposition.getConsignmentNum());
- openBlindBox.setNum(openBlindBox.getNum() + assetSuperimposition.getNum());
- openBlindBox.setCloseShowNum(openBlindBox.getCloseShowNum() + assetSuperimposition.getCloseShowNum());
- openBlindBox.setOpenShowNum(openBlindBox.getOpenShowNum() + assetSuperimposition.getOpenShowNum());
- setAssetStatus(openBlindBox);
- assetSuperimpositionRepo.save(openBlindBox);
- assetSuperimpositionRepo.deleteById(assetSuperimposition.getId());
- break;
- case OPEN:
- log.info("调整{}数量 -> 公开展示", asset.getId());
- if (!asset.isConsignment()) {
- assetSuperimposition.setCloseShowNum(assetSuperimposition.getCloseShowNum() - NUM);
- assetSuperimposition.setOpenShowNum(assetSuperimposition.getOpenShowNum() + NUM);
- }
- break;
- case CLOSE:
- log.info("调整{}数量 -> 关闭公开展示", asset.getId());
- if (!asset.isConsignment()) {
- assetSuperimposition.setCloseShowNum(assetSuperimposition.getCloseShowNum() + NUM);
- assetSuperimposition.setOpenShowNum(assetSuperimposition.getOpenShowNum() - NUM);
- }
- break;
- case CONSIGNMENT:
- log.info("调整{}数量 -> 寄售", asset.getId());
- publicShowOrFalseReduce(assetSuperimposition, asset);
- assetSuperimposition.setConsignmentNum(assetSuperimposition.getConsignmentNum() + NUM);
- break;
- case CANCEL_CONSIGNMENT:
- log.info("调整{}数量 -> 取消寄售", asset.getId());
- publicShowOrFalseAdd(assetSuperimposition, asset);
- assetSuperimposition.setConsignmentNum(assetSuperimposition.getConsignmentNum() - NUM);
- break;
- case CONSIGNMENT_SUCCESS:
- log.info("调整{}数量 -> 转让成功", asset.getId());
- assetSuperimposition.setNum(assetSuperimposition.getNum() - NUM);
- assetSuperimposition.setConsignmentNum(assetSuperimposition.getConsignmentNum() - NUM);
- relatedUserAdjustNum(toUserId, asset.getPrefixName(), asset);
- break;
- case AUCTIONING:
- log.info("调整{}数量 -> 拍卖", asset.getId());
- assetSuperimposition.setAuctioningNum(assetSuperimposition.getAuctionedNum() + NUM);
- break;
- case AUCTIONING_FAIL:
- log.info("调整{}数量 -> 拍卖失败/取消", asset.getId());
- assetSuperimposition.setAuctioningNum(assetSuperimposition.getAuctionedNum() - NUM);
- break;
- case AUCTIONING_SUCCESS:
- log.info("调整{}数量 -> 拍卖成功", asset.getId());
- assetSuperimposition.setNum(assetSuperimposition.getNum() - NUM);
- assetSuperimposition.setAuctioningNum(assetSuperimposition.getAuctionedNum() - NUM);
- publicShowOrFalseReduce(assetSuperimposition, asset);
- relatedUserAdjustNum(toUserId, asset.getPrefixName(), asset);
- break;
- case GIFTING:
- log.info("调整{}数量 -> 赠送", asset.getId());
- assetSuperimposition.setNum(assetSuperimposition.getNum() - NUM);
- publicShowOrFalseReduce(assetSuperimposition, asset);
- relatedUserAdjustNum(toUserId, asset.getPrefixName(), asset);
- break;
- case BUY:
- log.info("调整{}数量 -> 购买", asset.getId());
- assetSuperimposition.setNum(assetSuperimposition.getNum() + NUM);
- assetSuperimposition.setCloseShowNum(assetSuperimposition.getCloseShowNum() + NUM);
- break;
- case DESTORY:
- log.info("调整{}数量 -> 销毁", asset.getId());
- assetSuperimposition.setNum(assetSuperimposition.getNum() - NUM);
- assetSuperimposition.setCloseShowNum(assetSuperimposition.getCloseShowNum() - NUM);
- break;
- }
- setAssetStatus(assetSuperimposition);
- assetSuperimpositionRepo.save(assetSuperimposition);
- }
- /**
- * 当该分类下的资产数量为1的时候,添加相关状态
- *
- * @param assetSuperimposition
- */
- private void setAssetStatus(AssetSuperimposition assetSuperimposition) {
- if (assetSuperimposition.getNum() != 1) {
- return;
- }
- if (assetSuperimposition.getAuctioningNum() == 1) {
- assetSuperimposition.setAssetStatus(AssetShowStatus.AUCTIONING);
- return;
- }
- if (assetSuperimposition.getConsignmentNum() == 1) {
- assetSuperimposition.setAssetStatus(AssetShowStatus.CONSIGNMENT);
- return;
- }
- if (assetSuperimposition.getOpenShowNum() == 1) {
- assetSuperimposition.setAssetStatus(AssetShowStatus.OPEN_SHOW);
- }
- }
- /**
- * 根据藏品是否展示判断仅展示或未展示对应数量减去一
- *
- * @param assetSuperimposition 资产叠加数量信息
- * @param asset 资产信息
- * @return 资产叠加数量信息
- */
- private void publicShowOrFalseReduce(AssetSuperimposition assetSuperimposition, Asset asset) {
- if (asset.isPublicShow()) {
- assetSuperimposition.setOpenShowNum(assetSuperimposition.getOpenShowNum() - NUM);
- return;
- }
- assetSuperimposition.setCloseShowNum(assetSuperimposition.getCloseShowNum() - NUM);
- }
- /**
- * 根据藏品是否展示判断仅展示或未展示对应数量加一
- *
- * @param assetSuperimposition 资产叠加数量信息
- * @param asset 资产信息
- * @return 资产叠加数量信息
- */
- private void publicShowOrFalseAdd(AssetSuperimposition assetSuperimposition, Asset asset) {
- if (asset.isPublicShow()) {
- assetSuperimposition.setOpenShowNum(assetSuperimposition.getOpenShowNum() + NUM);
- return;
- }
- assetSuperimposition.setCloseShowNum(assetSuperimposition.getCloseShowNum() + NUM);
- }
- /**
- * 相关用户藏品叠加数量(买入人,被转增人等)
- *
- * @param toUserId 相关用户id
- * @param prefixName 叠加分类
- * @param asset 资产信息
- */
- private void relatedUserAdjustNum(Long toUserId, String prefixName, Asset asset) {
- AssetSuperimposition assetSuperimposition;
- if (Objects.isNull(toUserId)) {
- throw new BusinessException("涉及相关用户id为空");
- }
- if (asset.getType().equals(CollectionType.BLIND_BOX) && !asset.isOpened()) {
- AssetSuperimposition blindBoxAsset = assetSuperimpositionRepo.findByBlindBoxAssetId(asset.getId()).orElseThrow(new BusinessException("盲盒信息为空"));
- blindBoxAsset.setUserId(toUserId);
- blindBoxAsset.setCloseShowNum(NUM);
- blindBoxAsset.setNum(NUM);
- blindBoxAsset.setAuctioningNum(0);
- blindBoxAsset.setConsignmentNum(0);
- blindBoxAsset.setOpenShowNum(0);
- assetSuperimpositionRepo.save(blindBoxAsset);
- return;
- }
- assetSuperimposition = assetSuperimpositionRepo.findByUserIdAndPrefixName(toUserId, prefixName).orElse(null);
- if (Objects.isNull(assetSuperimposition)) {
- assetSuperimposition = new AssetSuperimposition(asset, toUserId);
- }
- assetSuperimposition.setNum(assetSuperimposition.getNum() + NUM);
- assetSuperimposition.setCloseShowNum(assetSuperimposition.getCloseShowNum() + NUM);
- assetSuperimpositionRepo.save(assetSuperimposition);
- }
- }
|