Browse Source

元宇宙配饰管理

sunkean 3 years ago
parent
commit
af60d72deb

+ 21 - 0
src/main/java/com/izouma/nineth/domain/MetaAccessoriesPurchaseRecord.java

@@ -0,0 +1,21 @@
+package com.izouma.nineth.domain;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@ApiModel("元宇宙配饰购买记录")
+public class MetaAccessoriesPurchaseRecord extends BaseEntity {
+
+    private Long userId;
+
+    private Long metaAccessoriesId;
+
+}

+ 5 - 0
src/main/java/com/izouma/nineth/domain/UserDetail.java

@@ -1,5 +1,6 @@
 package com.izouma.nineth.domain;
 
+import com.izouma.nineth.dto.PublicShowDTO;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.AllArgsConstructor;
 import lombok.Data;
@@ -8,6 +9,7 @@ import lombok.NoArgsConstructor;
 import javax.persistence.Entity;
 import javax.persistence.Id;
 import javax.persistence.Transient;
+import java.util.List;
 
 @Data
 @AllArgsConstructor
@@ -83,4 +85,7 @@ public class UserDetail extends BaseEntityNoID {
     @ApiModelProperty("是否点亮")
     private boolean light;
 
+    @Transient
+    private List<PublicShowDTO> publicShowDTOs;
+
 }

+ 17 - 0
src/main/java/com/izouma/nineth/dto/PublicShowDTO.java

@@ -0,0 +1,17 @@
+package com.izouma.nineth.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PublicShowDTO {
+
+    private String name;
+
+    private String url;
+
+    private int num;
+}

+ 12 - 0
src/main/java/com/izouma/nineth/repo/MetaAccessoriesPurchaseRecordRepo.java

@@ -0,0 +1,12 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MetaAccessoriesPurchaseRecord;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+
+
+public interface MetaAccessoriesPurchaseRecordRepo extends JpaRepository<MetaAccessoriesPurchaseRecord, Long>, JpaSpecificationExecutor<MetaAccessoriesPurchaseRecord> {
+
+    MetaAccessoriesPurchaseRecord findByUserIdAndMetaAccessoriesId(Long userId, Long metaAccessories);
+
+}

+ 2 - 0
src/main/java/com/izouma/nineth/repo/MetaAccessoriesRepo.java

@@ -15,4 +15,6 @@ public interface MetaAccessoriesRepo extends JpaRepository<MetaAccessories, Long
     void softDelete(Long id);
 
     MetaAccessories findByNameAndDel(String name, boolean del);
+
+    MetaAccessories findByIdAndDel(Long id, boolean del);
 }

+ 3 - 0
src/main/java/com/izouma/nineth/repo/UserAssetSummaryRepo.java

@@ -150,4 +150,7 @@ public interface UserAssetSummaryRepo extends JpaRepository<UserAssetSummary, Lo
             "  AND a.company_id = e.company_id " +
             "  AND a.prefix_name = e.prefixName", nativeQuery = true)
     List<UserAssetSummary> find(Long userId, Long companyId);
+
+    @Query(value = "select * from user_asset_summary where user_id = ?1 and open_show_num > 0 and company_id = 1 ", nativeQuery = true)
+    List<UserAssetSummary> findPublicShowAsset(Long userId);
 }

+ 34 - 0
src/main/java/com/izouma/nineth/service/MetaAccessoriesService.java

@@ -1,20 +1,54 @@
 package com.izouma.nineth.service;
 
+import com.izouma.nineth.config.Constants;
 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.EntryModeType;
+import com.izouma.nineth.repo.MetaAccessoriesPurchaseRecordRepo;
 import com.izouma.nineth.repo.MetaAccessoriesRepo;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
+import javax.transaction.Transactional;
+import java.util.Objects;
+
 @Service
 @AllArgsConstructor
 public class MetaAccessoriesService {
 
     private MetaAccessoriesRepo metaAccessoriesRepo;
 
+    private MetaAccessoriesPurchaseRecordRepo metaAccessoriesPurchaseRecordRepo;
+
+    private MetaUserGoldService metaUserGoldService;
+
     public Page<MetaAccessories> all(PageQuery pageQuery) {
         return metaAccessoriesRepo.findAll(JpaUtils.toSpecification(pageQuery, MetaAccessories.class), JpaUtils.toPageRequest(pageQuery));
     }
+
+    @Transactional
+    public MetaRestResult<Void> purchase(Long userId, Long metaAccessoriesId) {
+        MetaAccessoriesPurchaseRecord exist = metaAccessoriesPurchaseRecordRepo.findByUserIdAndMetaAccessoriesId(userId, metaAccessoriesId);
+        if (Objects.nonNull(exist)) {
+            return MetaRestResult.returnError("当前配饰已经购买过!");
+        }
+        MetaAccessories metaAccessories = metaAccessoriesRepo.findByIdAndDel(metaAccessoriesId, false);
+        if (Objects.isNull(metaAccessories)) {
+            return MetaRestResult.returnError("当前配饰信息不存在!");
+        }
+        if (!EntryModeType.GOLD.equals(metaAccessories.getPurchaseMethod())) {
+            return MetaRestResult.returnError("当前配置不允许金币购买!");
+        }
+        MetaRestResult<MetaUserGold> restResult = metaUserGoldService.changeNum(userId, -metaAccessories.getPrice());
+        if (Constants.MetaRestCode.success != restResult.getCode()) {
+            return MetaRestResult.returnError(restResult.getMessage());
+        }
+        metaAccessoriesPurchaseRecordRepo.save(new MetaAccessoriesPurchaseRecord(userId, metaAccessoriesId));
+        return MetaRestResult.returnSuccess("购买成功");
+    }
 }

+ 1 - 1
src/main/java/com/izouma/nineth/service/MetaUserGoldService.java

@@ -82,10 +82,10 @@ public class MetaUserGoldService {
         metaUserGoldRecord.setBeforeNum(nowNum);
         metaUserGoldRecord.setAfterNum(nowNum + num);
         metaUserGoldRecord.setOperationNum(num);
-        metaUserGold.setNum(nowNum + num);
         if (metaUserGoldRecord.getAfterNum() < 0) {
             return MetaRestResult.returnError(String.format("用户[%S] 当前金币剩余[%S] 本次操作需要金币数量为[%S]", userId, nowNum, -num));
         }
+        metaUserGold.setNum(nowNum + num);
         metaUserGoldRecordRepo.save(metaUserGoldRecord);
         return MetaRestResult.returnSuccess(metaUserGoldRepo.save(metaUserGold));
     }

+ 6 - 0
src/main/java/com/izouma/nineth/web/MetaAccessoriesController.java

@@ -1,6 +1,7 @@
 package com.izouma.nineth.web;
 
 import com.izouma.nineth.domain.MetaAccessories;
+import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.enums.EntryModeType;
 import com.izouma.nineth.exception.BusinessException;
@@ -68,5 +69,10 @@ public class MetaAccessoriesController extends BaseController {
         List<MetaAccessories> data = all(pageQuery).getContent();
         ExcelUtils.export(response, data);
     }
+
+    @PostMapping("/purchase")
+    public MetaRestResult<Void> purchase(Long userId, Long metaAccessoriesId) {
+        return metaAccessoriesService.purchase(userId, metaAccessoriesId);
+    }
 }
 

+ 16 - 0
src/main/java/com/izouma/nineth/web/UserDetailController.java

@@ -1,20 +1,25 @@
 package com.izouma.nineth.web;
 
+import com.izouma.nineth.domain.UserAssetSummary;
 import com.izouma.nineth.domain.UserDetail;
 import com.izouma.nineth.dto.MetaRestResult;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.dto.PublicShowDTO;
 import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.UserAssetSummaryRepo;
 import com.izouma.nineth.repo.UserDetailRepo;
 import com.izouma.nineth.service.ContentAuditService;
 import com.izouma.nineth.service.UserDetailService;
 import com.izouma.nineth.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Objects;
 
@@ -25,6 +30,7 @@ public class UserDetailController extends BaseController {
     private UserDetailService userDetailService;
     private UserDetailRepo userDetailRepo;
     private ContentAuditService contentAuditService;
+    private UserAssetSummaryRepo userAssetSummaryRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -70,6 +76,16 @@ public class UserDetailController extends BaseController {
         userDetail.setReikiCount(userDetailRepo.findReikiCountById(id));
         userDetail.setMedalCount(userDetailRepo.findMedalCountById(id));
         userDetail.setPersonalheatCount(userDetailRepo.findPersonalHeatCountById(id));
+        List<UserAssetSummary> userAssetSummaries = userAssetSummaryRepo.findPublicShowAsset(id);
+        List<PublicShowDTO> list = new ArrayList<>();
+        if (CollectionUtils.isEmpty(userAssetSummaries)) {
+            userDetail.setPublicShowDTOs(list);
+            return userDetail;
+        }
+        userAssetSummaries.forEach(userAssetSummary -> {
+            list.add(new PublicShowDTO(userAssetSummary.getName(), userAssetSummary.getPic().get(0).getUrl(), userAssetSummary.getOpenShowNum()));
+        });
+        userDetail.setPublicShowDTOs(list);
         return userDetail;
     }
 

+ 4 - 4
src/main/vue/src/views/MetaAccessoriesEdit.vue

@@ -37,11 +37,11 @@
 						</el-select>
 					</el-form-item>
 					<el-form-item
-						prop="num"
+						prop="price"
 						label="金币数量"
 						v-if="formData.purchaseMethod && formData.purchaseMethod === 'GOLD'"
 					>
-						<el-input-number type="num" v-model="formData.num" :step="1" :min="1"> </el-input-number>
+						<el-input-number type="price" v-model="formData.price" :step="1" :min="1"> </el-input-number>
 						<div class="tip">输入规则:正整数,最小为1</div>
 					</el-form-item>
 					<el-form-item
@@ -99,7 +99,7 @@ export default {
 						trigger: 'blur'
 					}
 				],
-				num: [
+				price: [
 					{
 						required: true,
 						message: '请输入所需金币数量',
@@ -132,7 +132,7 @@ export default {
 	},
 	methods: {
 		changePurchaseMethod() {
-			this.$delete(this.formData, 'num');
+			this.$delete(this.formData, 'price');
 			this.$delete(this.formData, 'collectionName');
 		},
 		onSave() {

+ 1 - 1
src/main/vue/src/views/MetaAccessoriesList.vue

@@ -47,7 +47,7 @@
 			<el-table-column prop="name" align="center" label="配饰名称"> </el-table-column>
 			<el-table-column prop="purchaseMethod" align="center" label="购买方式" :formatter="purchaseMethodFormatter">
 			</el-table-column>
-			<el-table-column prop="num" align="center" label="金币数量"> </el-table-column>
+			<el-table-column prop="price" align="center" label="金币数量"> </el-table-column>
 			<el-table-column prop="collectionName" align="center" label="NFT名称"> </el-table-column>
 			<el-table-column label="操作" align="center" fixed="right" width="150">
 				<template slot-scope="{ row }">