MetaAccessoriesService.java 4.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.izouma.nineth.service;
  2. import com.izouma.nineth.config.Constants;
  3. import com.izouma.nineth.domain.Asset;
  4. import com.izouma.nineth.domain.MetaAccessories;
  5. import com.izouma.nineth.domain.MetaAccessoriesPurchaseRecord;
  6. import com.izouma.nineth.domain.MetaUserGold;
  7. import com.izouma.nineth.dto.MetaRestResult;
  8. import com.izouma.nineth.dto.PageQuery;
  9. import com.izouma.nineth.enums.MetaPurchaseMethodEnum;
  10. import com.izouma.nineth.repo.AssetRepo;
  11. import com.izouma.nineth.repo.MetaAccessoriesPurchaseRecordRepo;
  12. import com.izouma.nineth.repo.MetaAccessoriesRepo;
  13. import com.izouma.nineth.utils.JpaUtils;
  14. import com.izouma.nineth.web.MetaUserGoldController;
  15. import lombok.AllArgsConstructor;
  16. import org.apache.commons.collections.CollectionUtils;
  17. import org.springframework.data.domain.Page;
  18. import org.springframework.stereotype.Service;
  19. import javax.transaction.Transactional;
  20. import java.util.List;
  21. import java.util.Objects;
  22. @Service
  23. @AllArgsConstructor
  24. public class MetaAccessoriesService {
  25. private MetaAccessoriesRepo metaAccessoriesRepo;
  26. private MetaAccessoriesPurchaseRecordRepo metaAccessoriesPurchaseRecordRepo;
  27. private MetaUserGoldService metaUserGoldService;
  28. private MetaUserGoldController metaUserGoldController;
  29. private AssetRepo assetRepo;
  30. public Page<MetaAccessories> all(PageQuery pageQuery) {
  31. return metaAccessoriesRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaAccessories.class), JpaUtils.toPageRequest(pageQuery));
  32. }
  33. @Transactional
  34. public MetaRestResult<Integer> purchase(Long userId, List<Long> metaAccessoriesIds) {
  35. List<MetaAccessoriesPurchaseRecord> exist = metaAccessoriesPurchaseRecordRepo.findByUserIdAndMetaAccessoriesIdIn(userId, metaAccessoriesIds);
  36. if (CollectionUtils.isNotEmpty(exist)) {
  37. return MetaRestResult.returnError("部分配饰已经购买过,请重新选择配饰!");
  38. }
  39. int total = 0;
  40. for (Long id : metaAccessoriesIds) {
  41. MetaAccessories metaAccessories = metaAccessoriesRepo.findByIdAndDel(id, false);
  42. if (Objects.isNull(metaAccessories)) {
  43. return MetaRestResult.returnError(String.format("id:[%S]的配饰信息不存在!", id));
  44. }
  45. if (!MetaPurchaseMethodEnum.GOLD.equals(metaAccessories.getPurchaseMethod())) {
  46. return MetaRestResult.returnError(String.format("当前配饰[%S]不允许金币购买!", id));
  47. }
  48. total = total + metaAccessories.getPrice();
  49. }
  50. MetaRestResult<Integer> restResultForNum = metaUserGoldController.queryGoldNum(userId);
  51. if (Constants.MetaRestCode.success != restResultForNum.getCode()) {
  52. return MetaRestResult.returnError(restResultForNum.getMessage());
  53. }
  54. if (total > restResultForNum.getData()) {
  55. return MetaRestResult.returnError(String.format("金币不足:当前配饰总共需要金币[%S]个,当前用户剩余金币[%S]个", total, restResultForNum.getData()));
  56. }
  57. MetaRestResult<MetaUserGold> restResult = metaUserGoldService.changeNum(userId, -total, String.format("玩家[%S]购买配饰[%S],支出[%S]个金币", userId, metaAccessoriesIds, total));
  58. if (Constants.MetaRestCode.success != restResult.getCode()) {
  59. return MetaRestResult.returnError(restResult.getMessage());
  60. }
  61. metaAccessoriesIds.forEach(id -> {
  62. metaAccessoriesPurchaseRecordRepo.save(new MetaAccessoriesPurchaseRecord(userId, id));
  63. });
  64. return MetaRestResult.returnSuccess("购买成功", restResult.getData().getNum());
  65. }
  66. public MetaRestResult<List<MetaAccessories>> hold(Long userId) {
  67. List<MetaAccessories> list = metaAccessoriesRepo.findByDel(false);
  68. if (CollectionUtils.isEmpty(list)) {
  69. return MetaRestResult.returnError("当前未配置任何配饰!");
  70. }
  71. list.forEach(metaAccessories -> {
  72. if (MetaPurchaseMethodEnum.GOLD.equals(metaAccessories.getPurchaseMethod())) {
  73. MetaAccessoriesPurchaseRecord metaAccessoriesPurchaseRecord = metaAccessoriesPurchaseRecordRepo.findByUserIdAndMetaAccessoriesId(userId, metaAccessories.getId());
  74. if (Objects.nonNull(metaAccessoriesPurchaseRecord)) {
  75. metaAccessories.setHold(true);
  76. }
  77. }
  78. if (MetaPurchaseMethodEnum.NFT.equals(metaAccessories.getPurchaseMethod())) {
  79. List<Asset> assets = assetRepo
  80. .findAllByUserIdAndStatusInAndNameLike(userId, Constants.META_NORMAL_STATUS, "%" + metaAccessories
  81. .getCollectionName() + "%");
  82. metaAccessories.setHold(CollectionUtils.isNotEmpty(assets));
  83. }
  84. });
  85. return MetaRestResult.returnSuccess(list);
  86. }
  87. }