Răsfoiți Sursa

训练营APP端接口按照起始时间动态判断状态
更新大小盟主下单进入奖金池金额

mac 2 ani în urmă
părinte
comite
8356d23b98

+ 1 - 1
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/constant/enums/LeaderTypeEnum.java → kxs-common/kxs-common-core/src/main/java/com/kxs/common/core/constant/enums/LeaderTypeEnum.java

@@ -1,4 +1,4 @@
-package com.kxs.user.biz.constant.enums;
+package com.kxs.common.core.constant.enums;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;

+ 17 - 5
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampUser.java

@@ -103,18 +103,30 @@ public class KxsCampUser extends Model<KxsCampUser> implements Serializable {
 
 
     /**
-     * 团队下单数量
+     * 团队兑换券下单数量
      */
-    @Schema(description = "团队下单数量")
+    @Schema(description = "团队兑换券下单数量")
     private Integer teamOrderNum;
 
-
+    /**
+     * 团队大小盟主下单数量
+     */
+    @Schema(description = "团队大小盟主下单数量")
+    private Integer teamLeaderNum;
+    
 
     /**
-     * 团队奖金池
+     * 团队订单奖金池
      */
     @Schema(description = "团队奖金池")
-    private BigDecimal teamBonusPool;
+    private BigDecimal teamOrderPool;
+
+
+    /**
+     * 团队盟主奖金池
+     */
+    @Schema(description = "团队盟主奖金池")
+    private BigDecimal teamLeaderPool;
 
 
 

+ 4 - 1
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsCampMapper.java

@@ -9,6 +9,8 @@ import com.kxs.system.api.vo.kxsapp.camp.CampPageVO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.time.LocalDateTime;
+
 /**
  * 训练营(KxsCamp)表数据库访问层
  *
@@ -31,8 +33,9 @@ public interface KxsCampMapper extends BaseMapper<KxsCamp> {
      * 判断创客是否已在其他训练营
      *
      * @param userId 用户 ID
+     * @param now 当前时间
      * @return {@link KxsCampUser}
      */
-    KxsCampUser selectByUserId(Integer userId);
+    KxsCampUser selectByUserId(@Param("userId") Integer userId, @Param("now") LocalDateTime now);
 }
 

+ 68 - 24
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampServiceImpl.java

@@ -16,6 +16,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.kxs.common.core.constant.SecurityConstants;
 import com.kxs.common.core.constant.enums.ErrorTypeEnum;
+import com.kxs.common.core.constant.enums.LeaderTypeEnum;
 import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.util.R;
 import com.kxs.common.core.util.RetOps;
@@ -119,6 +120,8 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
             return R.failed(SysErrorTypeEnum.IMPORT_EMPTY.getDescription());
         }
 
+        //查询正在进行中的活动
+        LocalDateTime now = LocalDateTime.now();
 
         // 通用校验获取失败的数据
         List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
@@ -138,14 +141,14 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
             if (Objects.isNull(user)) {
                 errorMsg.add(excel.getUserCode() + "创客未找到!");
             }else{
+                if(user.getRealStatus() != 1){
+                    errorMsg.add(excel.getUserCode() + "创客未实名!");
+                }
                 //判断创客是否已在其他训练营
-                KxsCampUser kxsCampUser = baseMapper.selectByUserId(user.getId());
+                KxsCampUser kxsCampUser = baseMapper.selectByUserId(user.getId(), now);
                 if(kxsCampUser != null){
                     errorMsg.add(excel.getUserCode() + "已在训练营!");
                 }
-                if(user.getRealStatus() != 1){
-                    errorMsg.add(excel.getUserCode() + "创客未实名!");
-                }
             }
 
             //判断创客是否加入
@@ -182,9 +185,19 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
 
     @Override
     public IPage<CampPageVO> getByPage(Page<CampPageVO> page) {
-
+        LocalDateTime now = LocalDateTime.now();
         Long userId = SecurityUtils.getUser().getId();
-        return baseMapper.getByPage(page, userId);
+        IPage<CampPageVO> pageData = baseMapper.getByPage(page, userId);
+        pageData.getRecords().forEach(item -> {
+            if(item.getEndTime().isBefore(now)){
+                item.setStatus(CampStatusEnum.STATUS_END.getType());
+            } else if (LocalDateTimeUtil.isIn(now, item.getStartTime(), item.getEndTime(), false, false)) {
+                item.setStatus(CampStatusEnum.STATUS_NORMAL.getType());
+            }else {
+                item.setStatus(CampStatusEnum.STATUS_CLOSE.getType());
+            }
+        });
+        return pageData;
     }
 
     @Override
@@ -220,8 +233,10 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
             for (KxsCampUser campUser : campUsers) {
                 KxsCampUser kxsCampUser = new KxsCampUser();
                 BeanUtil.copyProperties(campUser, kxsCampUser);
-                kxsCampUser.setTeamBonusPool(BigDecimal.ZERO);
+                kxsCampUser.setTeamOrderPool(BigDecimal.ZERO);
+                kxsCampUser.setTeamLeaderPool(BigDecimal.ZERO);
                 kxsCampUser.setTeamOrderNum(0);
+                kxsCampUser.setTeamLeaderNum(0);
                 kxsCampUser.setTeamOpenNum(0);
                 campUsersMap.put(campUser.getUserId(), kxsCampUser);
             }
@@ -242,13 +257,21 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
             for (ShopOrderGoodsUserVO order : orders) {
                 //如果是参与者自己下的单
                 if (userIds.contains(order.getUserId())) {
-                    BigDecimal amount = NumberUtil.mul(NumberUtil.div(order.getTotalPrice(), 600), 90);
-                    totalBonusPool = NumberUtil.add(totalBonusPool, amount);
-                    orderNum += NumberUtil.div(order.getTotalPrice(), 600).intValue();
+                    int currentNum = NumberUtil.div(order.getTotalPrice(), 600).intValue();
                     //刷新参与创客的团队累计
                     KxsCampUser kxsCampUser = campUsersMap.get(order.getUserId());
-                    kxsCampUser.setTeamBonusPool(NumberUtil.add(kxsCampUser.getTeamBonusPool(), amount));
-                    kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + orderNum);
+                    BigDecimal amount = NumberUtil.mul(NumberUtil.div(order.getTotalPrice(), 600), 90);
+                    totalBonusPool = NumberUtil.add(totalBonusPool, amount);
+                    //兑换券下单
+                    kxsCampUser.setTeamOrderPool(NumberUtil.add(kxsCampUser.getTeamOrderPool(), amount));
+                    kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + currentNum);
+//                    if(order.getId() == 27 || order.getId() == 28){
+//                        //大小盟主下单, 奖金池+60,订单数+1
+//                        kxsCampUser.setTeamLeaderPool(NumberUtil.add(kxsCampUser.getTeamLeaderPool(), 60));
+//                        kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
+//                        currentNum = 1;
+//                    }
+                    orderNum += currentNum;
                     continue;
                 }
 
@@ -261,14 +284,21 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
                 //通过用户的pidPath倒序查找最近所属的上级
                 Integer userId = SysUtils.checkUserIsChildren(pidPaths, userIds);
                 if(userId != null){
+                    int currentNum = NumberUtil.div(order.getTotalPrice(), 600).intValue();
+                    //刷新参与创客的团队累计
+                    KxsCampUser kxsCampUser = campUsersMap.get(userId);
                     BigDecimal amount = NumberUtil.mul(NumberUtil.div(order.getTotalPrice(), 600), 90);
                     totalBonusPool = NumberUtil.add(totalBonusPool, amount);
-                    orderNum += NumberUtil.div(order.getTotalPrice(), 600).intValue();
 
-                    //刷新参与创客的团队累计
-                    KxsCampUser kxsCampUser = campUsersMap.get(userId);
-                    kxsCampUser.setTeamBonusPool(NumberUtil.add(kxsCampUser.getTeamBonusPool(), amount));
-                    kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + orderNum);
+                    kxsCampUser.setTeamOrderPool(NumberUtil.add(kxsCampUser.getTeamOrderPool(), amount));
+                    kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + currentNum);
+//                    if(order.getId() == 27 || order.getId() == 28){
+//                        //大小盟主下单, 奖金池+60,订单数+1
+//                        kxsCampUser.setTeamLeaderPool(NumberUtil.add(kxsCampUser.getTeamLeaderPool(), 60));
+//                        kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
+//                        currentNum = 1;
+//                    }
+                    orderNum += currentNum;
                 }
             }
 
@@ -283,16 +313,23 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
             for (KxsLeader leader : leaders) {
                 //如果是参与者自己下的单
                 if (userIds.contains(leader.getUserId())) {
-                    BigDecimal amount = new BigDecimal("2000");
+                    BigDecimal amount;
+                    if(leader.getLeaderType().equals(LeaderTypeEnum.SMALL_LEADER.getType())){
+                        amount = new BigDecimal("2000");
+                    }else{
+                        amount = new BigDecimal("8000");
+                    }
                     totalBonusPool = NumberUtil.add(totalBonusPool, amount);
 
                     //刷新参与创客的团队累计
                     KxsCampUser kxsCampUser = campUsersMap.get(leader.getUserId());
-                    kxsCampUser.setTeamBonusPool(NumberUtil.add(kxsCampUser.getTeamBonusPool(), amount));
-                    kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + orderNum);
+                    kxsCampUser.setTeamLeaderPool(NumberUtil.add(kxsCampUser.getTeamLeaderPool(), amount));
+                    kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
+                    orderNum += 1;
+                    log.info("参与者{}自己下单盟主,进入到{}奖金池", leader.getUserId(), kxsCamp.getTitle());
                     continue;
                 }
-
+                //查询此盟主的上级
                 R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(leader.getUserId(), SecurityConstants.FROM_IN);
                 KxsUser user = RetOps.of(kxsUserR)
                         .getData()
@@ -302,13 +339,20 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
                 //通过用户的pidPath倒序查找最近所属的上级
                 Integer userId = SysUtils.checkUserIsChildren(pidPaths, userIds);
                 if(userId != null){
-                    BigDecimal amount = new BigDecimal("2000");
+                    BigDecimal amount;
+                    if(leader.getLeaderType().equals(LeaderTypeEnum.SMALL_LEADER.getType())){
+                        amount = new BigDecimal("2000");
+                    }else{
+                        amount = new BigDecimal("8000");
+                    }
                     totalBonusPool = NumberUtil.add(totalBonusPool, amount);
 
                     //刷新参与创客的团队累计
                     KxsCampUser kxsCampUser = campUsersMap.get(userId);
-                    kxsCampUser.setTeamBonusPool(NumberUtil.add(kxsCampUser.getTeamBonusPool(), amount));
-                    kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + orderNum);
+                    kxsCampUser.setTeamLeaderPool(NumberUtil.add(kxsCampUser.getTeamLeaderPool(), amount));
+                    kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
+                    orderNum += 1;
+                    log.info("创客:{}的团队购买盟主:{},进入到:{}奖金池", userId, leader.getUserId(), kxsCamp.getTitle());
                 }
             }
 

+ 2 - 1
kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampMapper.xml

@@ -35,6 +35,7 @@
             a.del_flag = 0
             and (b.user_id =  #{userId} or a.create_user_id = #{userId})
         </where>
+        group by a.id
         order by id desc
     </select>
     <select id="selectByUserId" resultType="com.kxs.system.api.model.KxsCampUser">
@@ -44,7 +45,7 @@
         <where>
             and a.del_flag = 0
             and b.user_id =  #{userId}
-            and a.status in (0,1)
+            and a.end_time <![CDATA[ >= ]]> #{now}
         </where>
     </select>
 

+ 2 - 0
kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampUserMapper.xml

@@ -14,6 +14,8 @@
         <result column="user_code" property="userCode" />
         <result column="team_open_num" property="teamOpenNum" />
         <result column="team_order_num" property="teamOrderNum" />
+        <result column="team_order_pool" property="teamOrderPool" />
+        <result column="team_leader_pool" property="teamLeaderPool" />
 
     </resultMap>
     <select id="getByPage" resultType="com.kxs.system.api.vo.kxsapp.camp.CampUserPageVO">

+ 2 - 2
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/model/KxsLeader.java

@@ -74,9 +74,9 @@ public class KxsLeader extends Model<KxsLeader> implements Serializable {
 
 
     /**
-     * 盟主类型
+     * 盟主类型 小盟主=1 大盟主=2
      */
-    @Schema(description = "盟主类型")
+    @Schema(description = "盟主类型 小盟主=1 大盟主=2")
     private Integer leaderType;
 
 

+ 0 - 2
kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/KxsLeaderController.java

@@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.kxs.common.core.util.R;
 import com.kxs.common.security.annotation.Inner;
 import com.kxs.user.api.model.KxsLeader;
-import com.kxs.user.biz.constant.enums.LeaderTypeEnum;
 import com.kxs.user.biz.service.KxsLeaderService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -32,7 +31,6 @@ public class KxsLeaderController {
 
         return R.ok(kxsLeaderService.list(Wrappers.<KxsLeader>lambdaQuery()
                 .select(KxsLeader::getUserId, KxsLeader::getLeaderType)
-                .eq(KxsLeader::getLeaderType, LeaderTypeEnum.BIG_LEADER.getType())
                 .between(KxsLeader::getLastBuyDate, startTime, endTime)));
     }