xiongzhu 4 gadi atpakaļ
vecāks
revīzija
84f07d7dc3

+ 30 - 5
src/main/java/com/izouma/nineth/config/WebMvcConfig.java

@@ -1,9 +1,15 @@
 package com.izouma.nineth.config;
 
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -13,12 +19,17 @@ import springfox.documentation.builders.RequestHandlerSelectors;
 import springfox.documentation.spi.DocumentationType;
 import springfox.documentation.spring.web.plugins.Docket;
 
+import java.util.List;
+
 @Configuration
 @EnableConfigurationProperties(GeneralProperties.class)
 public class WebMvcConfig implements WebMvcConfigurer {
     @Value("${storage.local_path}")
     private String localPath;
 
+    @Autowired
+    private MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;
+
     @Override
     public void addResourceHandlers(ResourceHandlerRegistry registry) {
         // registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
@@ -33,17 +44,31 @@ public class WebMvcConfig implements WebMvcConfigurer {
     public Docket createApi() {
         return new Docket(DocumentationType.SWAGGER_2)
                 .apiInfo(new ApiInfoBuilder()
-                                 .title("接口文档")
-                                 .version("1.0.0")
-                                 .termsOfServiceUrl("#")
-                                 .description("接口文档")
-                                 .build())
+                        .title("接口文档")
+                        .version("1.0.0")
+                        .termsOfServiceUrl("#")
+                        .description("接口文档")
+                        .build())
                 .select()
                 .apis(RequestHandlerSelectors.basePackage("com.izouma.nineth.web"))
                 .paths(PathSelectors.any())
                 .build();
     }
 
+    @Override
+    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
+        converters.stream().filter(converter -> converter instanceof MappingJackson2HttpMessageConverter)
+                .forEach(converter -> {
+                    ObjectMapper objectMapper = ((MappingJackson2HttpMessageConverter) converter).getObjectMapper();
+                    SimpleModule simpleModule = new SimpleModule();
+                    simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
+                    simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
+                    objectMapper.registerModule(simpleModule);
+                    ((MappingJackson2HttpMessageConverter) converter).setObjectMapper(objectMapper);
+                });
+        System.out.println(converters);
+    }
+
     // @Bean
     // public MappingJackson2HttpMessageConverter getMappingJackson2HttpMessageConverter() {
     //     MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();

+ 38 - 1
src/main/java/com/izouma/nineth/domain/Order.java

@@ -1,5 +1,8 @@
 package com.izouma.nineth.domain;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
 import com.izouma.nineth.annotations.Searchable;
 import com.izouma.nineth.converter.FileObjectListConverter;
 import com.izouma.nineth.converter.PrivilegeListConverter;
@@ -13,6 +16,13 @@ import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.hibernate.annotations.GenericGenerator;
+import org.hibernate.envers.Audited;
+import org.springframework.data.annotation.CreatedBy;
+import org.springframework.data.annotation.CreatedDate;
+import org.springframework.data.annotation.LastModifiedBy;
+import org.springframework.data.annotation.LastModifiedDate;
+import org.springframework.data.jpa.domain.support.AuditingEntityListener;
 
 import javax.persistence.*;
 import java.math.BigDecimal;
@@ -26,8 +36,35 @@ import java.util.List;
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder
+@Audited
+@EntityListeners(AuditingEntityListener.class)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
 @ApiModel("订单")
-public class Order extends BaseEntity {
+public class Order {
+
+    @Id
+    @GenericGenerator(name = "custom-id", strategy = "com.izouma.nineth.utils.SnowflakeIdGenerator")
+    @GeneratedValue(strategy = GenerationType.AUTO, generator = "custom-id")
+    private Long id;
+
+    @JsonIgnore
+    @CreatedBy
+    private String createdBy;
+
+    @JsonIgnore
+    @CreatedDate
+    private LocalDateTime createdAt;
+
+    @JsonIgnore
+    @LastModifiedBy
+    private String modifiedBy;
+
+    @JsonIgnore
+    @LastModifiedDate
+    private LocalDateTime modifiedAt;
+
+    private boolean del;
 
     @ApiModelProperty("用户ID")
     @Searchable

+ 4 - 0
src/main/java/com/izouma/nineth/repo/OrderRepo.java

@@ -29,4 +29,8 @@ public interface OrderRepo extends JpaRepository<Order, Long>, JpaSpecificationE
     int countByCollectionIdAndStatusIn(Long collectionId, Iterable<OrderStatus> orderStatuses);
 
     List<Order> findByStatus(OrderStatus orderStatus);
+
+    @Query("select count(o) from Order o join Collection c on o.collectionId = c.id " +
+            "where c.minterId = ?1 and c.source = 'OFFICIAL' and o.status <> 'NOT_PAID' and o.status <> 'CANCELLED'")
+    long countSales(Long userId);
 }

+ 7 - 0
src/main/java/com/izouma/nineth/repo/UserRepo.java

@@ -151,4 +151,11 @@ public interface UserRepo extends JpaRepository<User, Long>, JpaSpecificationExe
     @Modifying
     @Transactional
     void updateHistoryToUser(Long userId);
+
+    @Transactional
+    @Modifying
+    @Query("update User u set u.sales = ?2 where u.id = ?1")
+    void setSales(Long userId, int sales);
+
+    List<User> findByAuthoritiesContains(Authority authority);
 }

+ 4 - 10
src/main/java/com/izouma/nineth/service/OrderService.java

@@ -27,6 +27,7 @@ import com.izouma.nineth.event.CreateAssetEvent;
 import com.izouma.nineth.event.TransferAssetEvent;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
+import com.izouma.nineth.security.Authority;
 import com.izouma.nineth.utils.JpaUtils;
 import com.izouma.nineth.utils.SnowflakeIdWorker;
 import lombok.AllArgsConstructor;
@@ -49,7 +50,6 @@ import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
@@ -518,17 +518,11 @@ public class OrderService {
     }
 
 
+    @Scheduled(fixedRate = 120000)
     public void setSales() {
-        List<Collection> collections = collectionRepo.findAll();
-        List<User> minters = userRepo.findAllById(collections.stream().map(Collection::getMinterId)
-                .collect(Collectors.toSet()));
+        List<User> minters = userRepo.findByAuthoritiesContains(Authority.get(AuthorityName.ROLE_MINTER));
         for (User minter : minters) {
-            List<Collection> list = collections.stream().filter(c -> minter.getId().equals(c.getMinterId()))
-                    .collect(Collectors.toList());
-            minter.setSales((int) orderRepo.findByCollectionIdIn(list.stream().map(Collection::getId)
-                            .collect(Collectors.toSet())).stream()
-                    .filter(o -> o.getStatus() != OrderStatus.CANCELLED).count());
-            userRepo.save(minter);
+            userRepo.setSales(minter.getId(), (int) orderRepo.countSales(minter.getId()));
         }
     }
 

+ 21 - 0
src/main/java/com/izouma/nineth/utils/SnowflakeIdGenerator.java

@@ -0,0 +1,21 @@
+package com.izouma.nineth.utils;
+
+import org.hibernate.HibernateException;
+import org.hibernate.engine.spi.SharedSessionContractImplementor;
+import org.hibernate.id.IdentifierGenerator;
+
+import java.io.Serializable;
+
+public class SnowflakeIdGenerator implements IdentifierGenerator {
+
+    private final SnowflakeIdWorker snowflakeIdWorker;
+
+    public SnowflakeIdGenerator() {
+        this.snowflakeIdWorker = new SnowflakeIdWorker(0, 0);
+    }
+
+    @Override
+    public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object o) throws HibernateException {
+        return snowflakeIdWorker.nextId();
+    }
+}

+ 8 - 0
src/main/java/com/izouma/nineth/web/OrderController.java

@@ -16,6 +16,7 @@ import com.izouma.nineth.utils.excel.ExcelUtils;
 import lombok.AllArgsConstructor;
 import org.springframework.beans.BeanUtils;
 import org.springframework.data.domain.Page;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -102,5 +103,12 @@ public class OrderController extends BaseController {
             put("status", order.getStatus());
         }};
     }
+
+    @PreAuthorize("hasRole('ADMIN')")
+    @GetMapping("/setSales")
+    public String setSales() {
+        orderService.setSales();
+        return "OK";
+    }
 }
 

+ 2 - 7
src/test/java/com/izouma/nineth/CommonTest.java

@@ -5,6 +5,7 @@ import com.izouma.nineth.config.Constants;
 import com.izouma.nineth.domain.BaseEntity;
 import com.izouma.nineth.domain.BlindBoxItem;
 import com.izouma.nineth.domain.User;
+import com.izouma.nineth.utils.SnowflakeIdWorker;
 import com.izouma.nineth.web.BaseController;
 import io.ipfs.api.IPFS;
 import io.ipfs.api.MerkleNode;
@@ -57,7 +58,6 @@ import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.List;
 import java.util.*;
-import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import static java.nio.file.StandardOpenOption.CREATE;
@@ -375,11 +375,6 @@ public class CommonTest {
 
     @Test
     public void sdfsdf() {
-        Matcher matcher = Pattern.compile(".*- \\[(.*)\\((\\d+)\\)\\]")
-                .matcher("binding parameter [2] as [VARCHAR] - [第一批NFT韭菜大队(2888)]");
-        if (matcher.matches()) {
-            System.out.println(matcher.group(2));
-        }
-
+        System.out.println(new SnowflakeIdWorker(0, 0).nextId());
     }
 }