xiongzhu 4 лет назад
Родитель
Сommit
fba397a148

+ 4 - 0
src/main/java/com/izouma/nineth/domain/Collection.java

@@ -137,7 +137,11 @@ public class Collection extends BaseEntity {
     @Formula(value = "if(stock = 0, 1, 0)")
     private int soldOut;
 
+    @ApiModelProperty("限购数量")
     private int maxCount;
 
+    @ApiModelProperty("限购识别码")
+    private String countId;
+
     private boolean scanCode;
 }

+ 2 - 0
src/main/java/com/izouma/nineth/domain/Order.java

@@ -192,4 +192,6 @@ public class Order {
     public LocalDateTime getCreatedAt() {
         return createdAt;
     }
+
+    private String countId;
 }

+ 3 - 1
src/main/java/com/izouma/nineth/repo/OrderRepo.java

@@ -26,7 +26,9 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
 
     List<Order> findByCollectionIdIn(Iterable<Long> collectionId);
 
-    int countByCollectionIdAndStatusIn(Long collectionId, Iterable<OrderStatus> orderStatuses);
+    int countByUserIdAndCollectionIdAndStatusIn(Long userId, Long collectionId, Iterable<OrderStatus> orderStatuses);
+
+    int countByUserIdAndCountIdAndStatusIn(Long userId, String countId, Iterable<OrderStatus> orderStatuses);
 
     List<Order> findByStatus(OrderStatus orderStatus);
 

+ 12 - 3
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -112,11 +112,19 @@ public class OrderService {
         if (!collection.isSalable()) {
             throw new BusinessException("该藏品当前不可购买");
         }
-        if (collection.getType() == CollectionType.BLIND_BOX) {
-            if (collection.getStartTime().isAfter(LocalDateTime.now())) {
-                throw new BusinessException("盲盒未开售");
+
+        if (collection.getMaxCount() > 0) {
+            int count;
+            if (StringUtils.isNotBlank(collection.getCountId())) {
+                count = orderRepo.countByUserIdAndCountIdAndStatusIn(userId, collection.getCountId(), Arrays.asList(OrderStatus.FINISH, OrderStatus.NOT_PAID, OrderStatus.PROCESSING));
+            } else {
+                count = orderRepo.countByUserIdAndCollectionIdAndStatusIn(userId, collectionId, Arrays.asList(OrderStatus.FINISH, OrderStatus.NOT_PAID, OrderStatus.PROCESSING));
+            }
+            if (count >= collection.getMaxCount()) {
+                throw new BusinessException("限购" + collection.getMaxCount() + "件");
             }
         }
+
         UserAddress userAddress = null;
         if (addressId != null) {
             userAddress = userAddressRepo.findById(addressId).orElseThrow(new BusinessException("地址信息不存在"));
@@ -154,6 +162,7 @@ public class OrderService {
                 .assetId(collection.getAssetId())
                 .couponId(userCouponId)
                 .invitor(invitor)
+                .countId(collection.getCountId())
                 .build();
         if (coupon != null) {
             coupon.setUsed(true);

+ 11 - 1
src/main/vue/src/views/BlindBoxEdit.vue

@@ -146,6 +146,14 @@
                     <el-form-item prop="salable" label="可售">
                         <el-switch v-model="formData.salable" active-text="可销售" inactive-text="仅展示"></el-switch>
                     </el-form-item>
+                    <el-form-item prop="maxCount" label="限购">
+                        <el-input-number v-model="formData.maxCount"></el-input-number>
+                        <div class="tip">0表示不限购</div>
+                    </el-form-item>
+                    <el-form-item prop="countId" label="限购识别码" v-if="formData.maxCount > 0">
+                        <el-input v-model="formData.countId"></el-input>
+                        <div class="tip">相同识别码的藏品共享限购数量</div>
+                    </el-form-item>
                     <el-form-item class="form-submit">
                         <el-button @click="onSave" :loading="saving" type="primary" v-if="!formData.id">
                             保存
@@ -278,7 +286,9 @@ export default {
                 source: 'OFFICIAL',
                 pic: [{}],
                 scheduleSale: true,
-                privileges: []
+                privileges: [],
+                maxCount: 0,
+                countId: null
             },
             rules: {
                 name: [

+ 12 - 1
src/main/vue/src/views/CollectionEdit.vue

@@ -171,6 +171,14 @@
                         <el-input-number v-model="formData.sort" :min="0"></el-input-number>
                         <div class="tip">数字越大排序越靠前,相同数值按创建时间倒序排列</div>
                     </el-form-item>
+                    <el-form-item prop="maxCount" label="限购">
+                        <el-input-number v-model="formData.maxCount"></el-input-number>
+                        <div class="tip">0表示不限购</div>
+                    </el-form-item>
+                    <el-form-item prop="countId" label="限购识别码" v-if="formData.maxCount > 0">
+                        <el-input v-model="formData.countId"></el-input>
+                        <div class="tip">相同识别码的藏品共享限购数量</div>
+                    </el-form-item>
                     <el-form-item class="form-submit">
                         <el-button @click="onSave" :loading="saving" type="primary"> 保存 </el-button>
                         <!-- <el-button @click="onDelete" :disabled="saving" type="danger" v-if="formData.id">
@@ -274,7 +282,10 @@ export default {
                 pic: [],
                 scheduleSale: true,
                 sort: 0,
-                privileges: []
+                privileges: [],
+                maxCount: 0,
+                countId: null,
+                canResale: true
             },
             rules: {
                 name: [