| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- package com.izouma.nineth.service;
- import com.izouma.nineth.config.Constants;
- import com.izouma.nineth.domain.Asset;
- import com.izouma.nineth.domain.MetaAccessories;
- import com.izouma.nineth.domain.MetaAccessoriesPurchaseRecord;
- import com.izouma.nineth.domain.MetaUserGold;
- import com.izouma.nineth.dto.MetaRestResult;
- import com.izouma.nineth.dto.PageQuery;
- import com.izouma.nineth.enums.MetaPurchaseMethodEnum;
- import com.izouma.nineth.repo.AssetRepo;
- import com.izouma.nineth.repo.MetaAccessoriesPurchaseRecordRepo;
- import com.izouma.nineth.repo.MetaAccessoriesRepo;
- import com.izouma.nineth.utils.JpaUtils;
- import com.izouma.nineth.web.MetaUserGoldController;
- import lombok.AllArgsConstructor;
- import org.apache.commons.collections.CollectionUtils;
- import org.springframework.data.domain.Page;
- import org.springframework.stereotype.Service;
- import javax.transaction.Transactional;
- import java.util.List;
- import java.util.Objects;
- @Service
- @AllArgsConstructor
- public class MetaAccessoriesService {
- private MetaAccessoriesRepo metaAccessoriesRepo;
- private MetaAccessoriesPurchaseRecordRepo metaAccessoriesPurchaseRecordRepo;
- private MetaUserGoldService metaUserGoldService;
- private MetaUserGoldController metaUserGoldController;
- private AssetRepo assetRepo;
- public Page<MetaAccessories> all(PageQuery pageQuery) {
- return metaAccessoriesRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaAccessories.class), JpaUtils.toPageRequest(pageQuery));
- }
- @Transactional
- public MetaRestResult<Integer> purchase(Long userId, List<Long> metaAccessoriesIds) {
- List<MetaAccessoriesPurchaseRecord> exist = metaAccessoriesPurchaseRecordRepo.findByUserIdAndMetaAccessoriesIdIn(userId, metaAccessoriesIds);
- if (CollectionUtils.isNotEmpty(exist)) {
- return MetaRestResult.returnError("部分配饰已经购买过,请重新选择配饰!");
- }
- int total = 0;
- for (Long id : metaAccessoriesIds) {
- MetaAccessories metaAccessories = metaAccessoriesRepo.findByIdAndDel(id, false);
- if (Objects.isNull(metaAccessories)) {
- return MetaRestResult.returnError(String.format("id:[%S]的配饰信息不存在!", id));
- }
- if (!MetaPurchaseMethodEnum.GOLD.equals(metaAccessories.getPurchaseMethod())) {
- return MetaRestResult.returnError(String.format("当前配饰[%S]不允许金币购买!", id));
- }
- total = total + metaAccessories.getPrice();
- }
- MetaRestResult<Integer> restResultForNum = metaUserGoldController.queryGoldNum(userId);
- if (Constants.MetaRestCode.success != restResultForNum.getCode()) {
- return MetaRestResult.returnError(restResultForNum.getMessage());
- }
- if (total > restResultForNum.getData()) {
- return MetaRestResult.returnError(String.format("金币不足:当前配饰总共需要金币[%S]个,当前用户剩余金币[%S]个", total, restResultForNum.getData()));
- }
- MetaRestResult<MetaUserGold> restResult = metaUserGoldService.changeNum(userId, -total, String.format("玩家[%S]购买配饰[%S],支出[%S]个金币", userId, metaAccessoriesIds, total));
- if (Constants.MetaRestCode.success != restResult.getCode()) {
- return MetaRestResult.returnError(restResult.getMessage());
- }
- metaAccessoriesIds.forEach(id -> {
- metaAccessoriesPurchaseRecordRepo.save(new MetaAccessoriesPurchaseRecord(userId, id));
- });
- return MetaRestResult.returnSuccess("购买成功", restResult.getData().getNum());
- }
- public MetaRestResult<List<MetaAccessories>> hold(Long userId) {
- List<MetaAccessories> list = metaAccessoriesRepo.findByDel(false);
- if (CollectionUtils.isEmpty(list)) {
- return MetaRestResult.returnError("当前未配置任何配饰!");
- }
- list.forEach(metaAccessories -> {
- if (MetaPurchaseMethodEnum.GOLD.equals(metaAccessories.getPurchaseMethod())) {
- MetaAccessoriesPurchaseRecord metaAccessoriesPurchaseRecord = metaAccessoriesPurchaseRecordRepo.findByUserIdAndMetaAccessoriesId(userId, metaAccessories.getId());
- if (Objects.nonNull(metaAccessoriesPurchaseRecord)) {
- metaAccessories.setHold(true);
- }
- }
- if (MetaPurchaseMethodEnum.NFT.equals(metaAccessories.getPurchaseMethod())) {
- List<Asset> assets = assetRepo
- .findAllByUserIdAndStatusInAndNameLike(userId, Constants.META_NORMAL_STATUS, "%" + metaAccessories
- .getCollectionName() + "%");
- metaAccessories.setHold(CollectionUtils.isNotEmpty(assets));
- }
- });
- return MetaRestResult.returnSuccess(list);
- }
- }
|