Explorar o código

铸造材料建表

licailing %!s(int64=3) %!d(string=hai) anos
pai
achega
2abdff4d4c

+ 5 - 1
src/main/java/com/izouma/nineth/domain/MintMaterial.java

@@ -10,14 +10,18 @@ import lombok.NoArgsConstructor;
 
 import javax.persistence.Column;
 import javax.persistence.Convert;
+import javax.persistence.Entity;
 import java.util.List;
 
 @Data
+@Entity
 @AllArgsConstructor
 @NoArgsConstructor
 @JsonInclude(JsonInclude.Include.NON_NULL)
 @JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
-public class MintMaterial {
+public class MintMaterial extends BaseEntity {
+    private Long orderId;
+
     private Long assetId;
 
     private Long collectionId;

+ 4 - 3
src/main/java/com/izouma/nineth/domain/MintOrder.java

@@ -34,9 +34,10 @@ public class MintOrder extends BaseEntity {
     @Transient
     private String mintActivity;
 
-    @Column(columnDefinition = "TEXT")
-    @Convert(converter = MintMaterialListConverter.class)
-    @ApiModelProperty("铸造材料")
+//    @Column(columnDefinition = "TEXT")
+//    @Convert(converter = MintMaterialListConverter.class)
+//    @ApiModelProperty("铸造材料")
+    @Transient
     private List<MintMaterial> material;
 
     @ApiModelProperty("收货人")

+ 22 - 0
src/main/java/com/izouma/nineth/repo/MintMaterialRepo.java

@@ -0,0 +1,22 @@
+package com.izouma.nineth.repo;
+
+import com.izouma.nineth.domain.MintMaterial;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+
+import javax.transaction.Transactional;
+import java.util.Collection;
+import java.util.List;
+
+public interface MintMaterialRepo extends JpaRepository<MintMaterial, Long>, JpaSpecificationExecutor<MintMaterial> {
+    @Query("update MintMaterial t set t.del = true where t.id = ?1")
+    @Modifying
+    @Transactional
+    void softDelete(Long id);
+
+    List<MintMaterial> findAllByOrderIdAndDelFalse(Long orderId);
+
+    List<MintMaterial> findAllByOrderIdInAndDelFalse(Collection<Long> orderId);
+}

+ 35 - 26
src/main/java/com/izouma/nineth/service/MintOrderService.java

@@ -61,6 +61,7 @@ public class MintOrderService {
     private SnowflakeIdWorker snowflakeIdWorker;
     private WxPayProperties   wxPayProperties;
     private WxPayService      wxPayService;
+    private MintMaterialRepo  mintMaterialRepo;
 
     public Page<MintOrder> all(PageQuery pageQuery) {
         return mintOrderRepo.findAll(JpaUtils.toSpecification(pageQuery, MintOrder.class), JpaUtils.toPageRequest(pageQuery));
@@ -80,6 +81,17 @@ public class MintOrderService {
         if (assets.size() != 3) {
             throw new BusinessException("有藏品不符合,请重新选择");
         }
+
+
+        // 铸造订单
+        MintOrder order = mintOrderRepo.save(MintOrder.builder()
+                .userId(userId)
+                .phone(user.getPhone())
+//                .material(materials)
+                .consume(true)
+                .status(MintOrderStatus.AIR_DROP)
+                .build());
+
         // 铸造资产
         List<MintMaterial> materials = assets.stream().map(asset -> {
             MintMaterial material = new MintMaterial();
@@ -89,18 +101,11 @@ public class MintOrderService {
             material.setNumber(asset.getNumber());
             material.setPic(asset.getPic());
             material.setCategory(asset.getCategory());
+            material.setOrderId(order.getId());
             return material;
         }).collect(Collectors.toList());
 
-        // 铸造订单
-        mintOrderRepo.save(MintOrder.builder()
-                .userId(userId)
-                .phone(user.getPhone())
-                .material(materials)
-                .consume(true)
-                .status(MintOrderStatus.AIR_DROP)
-                .build());
-
+        mintMaterialRepo.saveAll(materials);
         // 改为转赠
         assets.forEach(asset -> assetService.transfer(asset, asset.getPrice(), blackHole, "转赠", null));
 
@@ -211,19 +216,6 @@ public class MintOrderService {
             userRepo.findByIdAndDelFalse(1435297L).orElseThrow(new BusinessException("无法铸造"));
         }
 
-        // 铸造资产
-        List<MintMaterial> materials = assets.stream().map(asset -> {
-            MintMaterial material = new MintMaterial();
-            material.setAssetId(asset.getId());
-            material.setCollectionId(asset.getCollectionId());
-            material.setName(asset.getName());
-            material.setPrivilegeId(privilegeIds.get(asset.getId()));
-            material.setNumber(asset.getNumber());
-            material.setPic(asset.getPic());
-            material.setCategory(asset.getCategory());
-            return material;
-        }).collect(Collectors.toList());
-
         UserAddress userAddress = null;
         if (addressId != null) {
             userAddress = userAddressRepo.findById(addressId).orElseThrow(new BusinessException("地址信息不存在"));
@@ -233,7 +225,7 @@ public class MintOrderService {
         MintOrder mintOrder = mintOrderRepo.save(MintOrder.builder()
                 .userId(user.getId())
                 .phone(user.getPhone())
-                .material(materials)
+//                .material(materials)
                 .consume(mintActivity.isConsume())
                 .status(MintOrderStatus.NOT_PAID)
                 .airDrop(mintActivity.isAirDrop())
@@ -246,6 +238,22 @@ public class MintOrderService {
                         .orElse(null))
                 .build());
 
+        // 铸造资产
+        List<MintMaterial> materials = assets.stream().map(asset -> {
+            MintMaterial material = new MintMaterial();
+            material.setAssetId(asset.getId());
+            material.setCollectionId(asset.getCollectionId());
+            material.setName(asset.getName());
+            material.setPrivilegeId(privilegeIds.get(asset.getId()));
+            material.setNumber(asset.getNumber());
+            material.setPic(asset.getPic());
+            material.setCategory(asset.getCategory());
+            material.setOrderId(mintOrder.getId());
+            return material;
+        }).collect(Collectors.toList());
+
+        mintMaterialRepo.saveAll(materials);
+
         //库存
         mintActivity.setStock(mintActivity.getStock() - 1);
         mintActivityRepo.save(mintActivity);
@@ -349,7 +357,8 @@ public class MintOrderService {
     @Transactional
     public void mintNotify(Long orderId, PayMethod payMethod, String transactionId) {
         MintOrder mintOrder = mintOrderRepo.findById(orderId).orElseThrow(new BusinessException("订单不存在"));
-        List<MintMaterial> materials = mintOrder.getMaterial();
+//        List<MintMaterial> materials = mintOrder.getMaterial();
+        List<MintMaterial> materials = mintMaterialRepo.findAllByOrderIdAndDelFalse(orderId);
         List<Asset> assets = assetRepo.findAllById(materials
                 .stream()
                 .map(MintMaterial::getAssetId)
@@ -395,8 +404,8 @@ public class MintOrderService {
         if (order.getStatus() != MintOrderStatus.NOT_PAID) {
             throw new BusinessException("已支付订单无法取消");
         }
-        List<MintMaterial> materials = order.getMaterial();
-
+//        List<MintMaterial> materials = order.getMaterial();
+        List<MintMaterial> materials = mintMaterialRepo.findAllByOrderIdAndDelFalse(order.getId());
         List<Asset> assets = assetRepo.findAllById(materials.stream()
                 .map(MintMaterial::getAssetId)
                 .collect(Collectors.toList()));

+ 9 - 0
src/main/java/com/izouma/nineth/web/MintOrderController.java

@@ -2,11 +2,13 @@ package com.izouma.nineth.web;
 
 import com.izouma.nineth.converter.LongArrayConverter;
 import com.izouma.nineth.domain.MintActivity;
+import com.izouma.nineth.domain.MintMaterial;
 import com.izouma.nineth.domain.MintOrder;
 import com.izouma.nineth.dto.MintOrderDTO;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.MintActivityRepo;
+import com.izouma.nineth.repo.MintMaterialRepo;
 import com.izouma.nineth.repo.MintOrderRepo;
 import com.izouma.nineth.service.MintOrderService;
 import com.izouma.nineth.utils.ObjUtils;
@@ -29,6 +31,7 @@ public class MintOrderController extends BaseController {
     private MintOrderService mintOrderService;
     private MintOrderRepo    mintOrderRepo;
     private MintActivityRepo mintActivityRepo;
+    private MintMaterialRepo mintMaterialRepo;
 
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
@@ -47,11 +50,16 @@ public class MintOrderController extends BaseController {
     public Page<MintOrder> all(@RequestBody PageQuery pageQuery) {
         Page<MintOrder> all = mintOrderService.all(pageQuery);
         Set<Long> mids = all.map(MintOrder::getMintActivityId).stream().collect(Collectors.toSet());
+        List<Long> ids = all.map(MintOrder::getId).stream().collect(Collectors.toList());
         Map<Long, String> activityMap = mintActivityRepo.findAllByIdInAndDelFalse(mids)
                 .stream()
                 .collect(Collectors.toMap(MintActivity::getId, MintActivity::getName));
+        Map<Long, List<MintMaterial>> materialMap = mintMaterialRepo.findAllByOrderIdInAndDelFalse(ids)
+                .stream()
+                .collect(Collectors.groupingBy(MintMaterial::getOrderId));
         return all.map(mintOrder -> {
             mintOrder.setMintActivity(activityMap.get(mintOrder.getMintActivityId()));
+            mintOrder.setMaterial(materialMap.get(mintOrder.getId()));
             return mintOrder;
         });
     }
@@ -64,6 +72,7 @@ public class MintOrderController extends BaseController {
                     .orElseThrow(new BusinessException("无铸造活动"));
             mintOrder.setMintActivity(activity.getName());
         }
+        mintOrder.setMaterial(mintMaterialRepo.findAllByOrderIdAndDelFalse(id));
         return mintOrder;
     }
 

+ 25 - 0
src/test/java/com/izouma/nineth/service/MintOrderServiceTest.java

@@ -1,13 +1,19 @@
 package com.izouma.nineth.service;
 
 import com.izouma.nineth.ApplicationTests;
+import com.izouma.nineth.domain.MintMaterial;
+import com.izouma.nineth.domain.MintOrder;
 import com.izouma.nineth.domain.User;
 import com.izouma.nineth.enums.PayMethod;
+import com.izouma.nineth.repo.MintMaterialRepo;
+import com.izouma.nineth.repo.MintOrderRepo;
 import com.izouma.nineth.repo.UserRepo;
+import org.apache.commons.collections.CollectionUtils;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.Arrays;
+import java.util.List;
 
 class MintOrderServiceTest extends ApplicationTests {
 
@@ -15,6 +21,10 @@ class MintOrderServiceTest extends ApplicationTests {
     private MintOrderService mintOrderService;
     @Autowired
     private UserRepo         userRepo;
+    @Autowired
+    private MintOrderRepo    mintOrderRepo;
+    @Autowired
+    private MintMaterialRepo mintMaterialRepo;
 
     @Test
     void exchange() throws InterruptedException {
@@ -37,4 +47,19 @@ class MintOrderServiceTest extends ApplicationTests {
     public void test2() {
         mintOrderService.mintNotify(151376L, PayMethod.ALIPAY, "xxx");
     }
+
+    @Test
+    public void test3() {
+        List<MintOrder> all = mintOrderRepo.findAll();
+        all.forEach(a -> {
+            List<MintMaterial> material = a.getMaterial();
+            if (CollectionUtils.isNotEmpty(material)) {
+                material.forEach(m -> {
+                    m.setOrderId(a.getId());
+                    mintMaterialRepo.save(m);
+                });
+            }
+
+        });
+    }
 }