licailing 3 роки тому
батько
коміт
bb7583c602

+ 3 - 0
src/main/java/com/izouma/nineth/domain/AirDrop.java

@@ -15,6 +15,9 @@ import java.util.List;
 
 @Data
 @Entity
+@Table(name = "air_drop", indexes = {
+        @Index(columnList = "name")
+})
 @AllArgsConstructor
 @NoArgsConstructor
 @Builder

+ 11 - 0
src/main/java/com/izouma/nineth/domain/User.java

@@ -124,4 +124,15 @@ public class User extends BaseEntity implements Serializable {
     private String inviteCode;
 
     private int minterProjectId;
+
+    @ApiModelProperty(value = "邀请得空投")
+    private Long invitor;
+
+    @Column(columnDefinition = "int(11) default 0")
+    @ApiModelProperty(value = "邀请数量")
+    private int inviteNum = 0;
+
+    @Column(columnDefinition = "int(11) default 0")
+    @ApiModelProperty(value = "获得得空投数量")
+    private int inviteAirDrop = 0;
 }

+ 2 - 0
src/main/java/com/izouma/nineth/dto/UserRegister.java

@@ -46,4 +46,6 @@ public class UserRegister {
     private int minterProjectId;
 
     private String intro;
+
+    private Long invitor;
 }

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

@@ -7,10 +7,14 @@ import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 public interface AirDropRepo extends JpaRepository<AirDrop, Long>, JpaSpecificationExecutor<AirDrop> {
     @Query("update AirDrop t set t.del = true where t.id = ?1")
     @Modifying
     @Transactional
     void softDelete(Long id);
+
+    @Query(nativeQuery = true,value = "select * from air_drop where air_drop.user_ids like ?1 and name like ?2 ")
+    List<AirDrop> findAllByUserIdsAndName(String userIds, String name);
 }

+ 42 - 2
src/main/java/com/izouma/nineth/service/IdentityAuthService.java

@@ -1,14 +1,20 @@
 package com.izouma.nineth.service;
 
+import com.izouma.nineth.domain.AirDrop;
+import com.izouma.nineth.domain.Collection;
 import com.izouma.nineth.domain.IdentityAuth;
 import com.izouma.nineth.domain.User;
 import com.izouma.nineth.dto.PageQuery;
+import com.izouma.nineth.enums.AirDropType;
 import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.exception.BusinessException;
+import com.izouma.nineth.repo.AirDropRepo;
+import com.izouma.nineth.repo.CollectionRepo;
 import com.izouma.nineth.repo.IdentityAuthRepo;
 import com.izouma.nineth.repo.UserRepo;
 import com.izouma.nineth.utils.JpaUtils;
 import lombok.AllArgsConstructor;
+import org.apache.commons.collections.CollectionUtils;
 import org.springframework.data.domain.Page;
 import org.springframework.stereotype.Service;
 
@@ -21,6 +27,10 @@ public class IdentityAuthService {
     private IdentityAuthRepo identityAuthRepo;
     private UserRepo         userRepo;
     private AdapayService    adapayService;
+    private CollectionRepo   collectionRepo;
+    private AirDropRepo      airDropRepo;
+    private AirDropService   airDropService;
+    private SysConfigService sysConfigService;
 
     public Page<IdentityAuth> all(PageQuery pageQuery) {
         return identityAuthRepo.findAll(JpaUtils.toSpecification(pageQuery, IdentityAuth.class), JpaUtils.toPageRequest(pageQuery));
@@ -52,10 +62,40 @@ public class IdentityAuthService {
         User user = userRepo.findByIdAndDelFalse(auth.getUserId()).orElseThrow(new BusinessException("用户不存在"));
         if (status == AuthStatus.SUCCESS) {
             user.setAuthId(auth.getId());
+            if (user.getInvitor() != null) {
+                userRepo.findByIdAndDelFalse(user.getInvitor()).ifPresent(user1 -> {
+                    user1.setInviteNum(user1.getInviteNum() + 1);
+                    if (user1.getInviteNum() >= 10) {
+                        int inviteCollection = sysConfigService.getInt("inviteCollection");
+                        // 藏品数量
+                        Collection collection = collectionRepo.findById(1187810L)
+                                .orElseThrow(new BusinessException("无藏品"));
+                        if (collection.getStock() > 0) {
+                            List<Long> userIds = List.of(user.getInvitor());
+                            String name = "邀请新人得空投奖励";
+                            List<AirDrop> airDrops = airDropRepo.findAllByUserIdsAndName(String.valueOf(user.getInvitor()), name);
+                            if (CollectionUtils.isEmpty(airDrops)) {
+                                airDropService.create(AirDrop.builder()
+                                        .name(name)
+                                        .type(AirDropType.asset)
+                                        .collectionId((long) inviteCollection)
+                                        .phone(List.of(user1.getPhone()))
+                                        .userIds(userIds)
+                                        .projectId(1)
+                                        .build());
+                                user1.setInviteAirDrop(user1.getInviteAirDrop() + 1);
+                            }
+                        }
+                    }
+
+                    userRepo.save(user1);
+                });
+            }
+
         }
-        auth.setStatus(status);
-        identityAuthRepo.save(auth);
         user.setAuthStatus(status);
         userRepo.save(user);
+        auth.setStatus(status);
+        identityAuthRepo.save(auth);
     }
 }

+ 5 - 4
src/main/java/com/izouma/nineth/service/UserService.java

@@ -141,7 +141,7 @@ public class UserService {
         return user;
     }
 
-    public User phoneRegister(String phone, String code, String password, String inviteCode) {
+    public User phoneRegister(String phone, String code, String password, String inviteCode, Long invitor) {
         String name = "9th_" + RandomStringUtils.randomAlphabetic(8);
         Invite invite = null;
         if (StringUtils.isNotBlank(inviteCode)) {
@@ -158,6 +158,7 @@ public class UserService {
                 .invitorPhone(Optional.ofNullable(invite).map(Invite::getPhone).orElse(null))
                 .invitorName(Optional.ofNullable(invite).map(Invite::getName).orElse(null))
                 .inviteCode(Optional.ofNullable(invite).map(Invite::getCode).orElse(null))
+                .invitor(invitor)
                 .build());
         if (invite != null) {
             inviteRepo.increaseNum(invite.getId());
@@ -414,7 +415,7 @@ public class UserService {
             throw new BusinessException("用户不存在或未认证");
         }
         String realName = identityAuthRepo.findFirstByUserIdAndStatusAndDelFalseOrderByCreatedAtDesc(
-                user.getId(), AuthStatus.SUCCESS)
+                        user.getId(), AuthStatus.SUCCESS)
                 .map(IdentityAuth::getRealName).orElse("").replaceAll(".*(?=.)", "**");
         Map<String, Object> map = new HashMap<>();
         map.put("id", user.getId());
@@ -427,8 +428,8 @@ public class UserService {
 
     public Map<String, Object> searchByPhoneAdmin(String phoneStr) {
         List<String> phone = Arrays.stream(phoneStr.replaceAll("\n", " ")
-                .replaceAll("\r\n", " ")
-                .split(" "))
+                        .replaceAll("\r\n", " ")
+                        .split(" "))
                 .map(String::trim)
                 .filter(s -> !StringUtils.isEmpty(s))
                 .collect(Collectors.toList());

+ 2 - 2
src/main/java/com/izouma/nineth/web/AuthenticationController.java

@@ -65,8 +65,8 @@ public class AuthenticationController {
 
     @PostMapping("/phoneRegister")
     @ApiOperation(value = "手机号密码注册")
-    public String phonePwdLogin(String phone, String code, String password, String inviteCode) {
-        User user = userService.phoneRegister(phone, code, password, inviteCode);
+    public String phonePwdLogin(String phone, String code, String password, String inviteCode, Long invitor) {
+        User user = userService.phoneRegister(phone, code, password, inviteCode, invitor);
         return jwtTokenUtil.generateToken(JwtUserFactory.create(user));
     }