mac 2 роки тому
батько
коміт
89843b182d
33 змінених файлів з 1171 додано та 417 видалено
  1. 2 1
      kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mq/RabbitKxsOrderQueueListener.java
  2. 0 24
      kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/SystemBeanTask.java
  3. 58 0
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/dto/admin/camp/CampReportAuditDTO.java
  4. 0 8
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/RemoteSysService.java
  5. 3 2
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/config/KxsSystemFeignClientConfiguration.java
  6. 41 42
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampBonusLog.java
  7. 115 0
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampGroup.java
  8. 147 0
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampReport.java
  9. 6 0
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampUser.java
  10. 115 0
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/camp/CampBonusLogVO.java
  11. 8 1
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/camp/CampUserExcelVO.java
  12. 32 0
      kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/camp/ReportCampPageVO.java
  13. 47 31
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/controller/admin/SysCampController.java
  14. 55 8
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/controller/kxsapp/CampController.java
  15. 13 1
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsCampBonusLogMapper.java
  16. 17 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsCampGroupMapper.java
  17. 29 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsCampReportMapper.java
  18. 12 3
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampBonusLogService.java
  19. 15 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampGroupService.java
  20. 52 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampReportService.java
  21. 1 7
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampService.java
  22. 9 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampUserService.java
  23. 6 32
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampBonusLogServiceImpl.java
  24. 19 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampGroupServiceImpl.java
  25. 132 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampReportServiceImpl.java
  26. 134 231
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampServiceImpl.java
  27. 12 0
      kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampUserServiceImpl.java
  28. 30 6
      kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampBonusLogMapper.xml
  29. 20 0
      kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampGroupMapper.xml
  30. 40 0
      kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampReportMapper.xml
  31. 1 0
      kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampUserMapper.xml
  32. 0 9
      kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/feign/RemoteKxsUserService.java
  33. 0 11
      kxs-user/kxs-user-biz/src/main/java/com/kxs/user/biz/controller/kxsapp/KxsLeaderController.java

+ 2 - 1
kxs-product/kxs-product-biz/src/main/java/com/kxs/product/biz/mq/RabbitKxsOrderQueueListener.java

@@ -58,7 +58,8 @@ public class RabbitKxsOrderQueueListener {
 					|| parse.getProductId() == 27
 					|| parse.getProductId() == 28
 					|| parse.getProductId() == 39
-					|| parse.getProductId() == 40) ){
+					|| parse.getProductId() == 40
+					|| parse.getProductId() == 10000) ){
 				PrizePoolDTO prizePoolDTO = new PrizePoolDTO();
 				BeanUtils.copyProperties(parse,  prizePoolDTO);
 				remoteSysService.prizePoolIsRefreshed(prizePoolDTO, SecurityConstants.FROM_IN);

+ 0 - 24
kxs-quartz/src/main/java/com/kxs/daemon/quartz/task/SystemBeanTask.java

@@ -1,15 +1,9 @@
 package com.kxs.daemon.quartz.task;
 
-import com.kxs.common.core.constant.SecurityConstants;
-import com.kxs.daemon.quartz.constants.SkyQuartzEnum;
-import com.kxs.system.api.feign.RemoteSysService;
 import lombok.RequiredArgsConstructor;
-import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
-import java.time.LocalDateTime;
-
 /**
  * 系统模块 Bean 任务
  *
@@ -21,22 +15,4 @@ import java.time.LocalDateTime;
 @RequiredArgsConstructor
 public class SystemBeanTask {
 
-    private final RemoteSysService remoteSysJobService;
-
-
-    /**
-     *  统计训练营奖金池
-     */
-    @SneakyThrows
-    public String campPrizePoolSchedule() {
-        log.info("统计训练营奖金池:{}", LocalDateTime.now());
-        try {
-            remoteSysJobService.poweronQuantityStatistics(SecurityConstants.FROM_IN);
-            return SkyQuartzEnum.JOB_LOG_STATUS_SUCCESS.getType();
-
-        }catch (Exception e){
-            log.error(e.getLocalizedMessage());
-        }
-        return SkyQuartzEnum.JOB_LOG_STATUS_FAIL.getType();
-    }
 }

+ 58 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/dto/admin/camp/CampReportAuditDTO.java

@@ -0,0 +1,58 @@
+package com.kxs.system.api.dto.admin.camp;
+
+import com.kxs.system.api.model.SysUser;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+
+/**
+ * 训练营-报备审核 DTO
+ *
+ * @author 没秃顶的码农
+ * @date 2024-07-02
+ */
+@Data
+@Schema(description = "训练营-报备审核")
+@EqualsAndHashCode(callSuper = true)
+public class CampReportAuditDTO extends SysUser {
+
+
+	/**
+	 * id
+	 */
+	@Schema(description = "id")
+	@NotNull(message = "id不能为空")
+	private Integer id;
+
+	/**
+	 * 状态 0审核中 1审核通过 -1审核失败
+	 */
+	@Schema(description = "状态 0审核中 1审核通过 -1审核失败")
+	@NotNull(message = "审核状态不能为空")
+	private Integer status;
+
+	/**
+	 * 备注
+	 */
+	@Schema(description = "备注")
+	private String remark;
+
+
+	/**
+	 * 统计的数量
+	 */
+	@Schema(description = "统计的数量")
+	private Integer sourceNum;
+
+	/**
+	 * 来源类型 电签券=0 大机券=1 组合包=2 小盟主=3 大盟主=4 pos开机=5 广电卡激活=6 来客吧激活=7 大小盟主兑换券=8
+	 */
+	@Schema(description = "来源类型 电签券=0 大机券=1 组合包=2 小盟主=3 大盟主=4 pos开机=5 广电卡激活=6 来客吧激活=7 大小盟主兑换券=8")
+	private Integer sourceType;
+
+
+}

+ 0 - 8
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/RemoteSysService.java

@@ -20,14 +20,6 @@ import org.springframework.web.service.annotation.PostExchange;
 public interface RemoteSysService {
 
 
-	/**
-	 * 大小盟主开通统计到训练营
-	 *
-	 * @param from 从
-	 */
-	@GetExchange("/camp/poweronQuantityStatistics")
-	void poweronQuantityStatistics(@RequestHeader(SecurityConstants.FROM) String from);
-
 	/**
 	 * 下单后训练营奖金池刷新
 	 *

+ 3 - 2
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/feign/config/KxsSystemFeignClientConfiguration.java

@@ -1,6 +1,7 @@
 package com.kxs.system.api.feign.config;
 
 import cn.hutool.core.text.CharSequenceUtil;
+import com.kxs.common.core.constant.CommonConstants;
 import com.kxs.common.core.constant.ServiceNameConstants;
 import com.kxs.system.api.feign.*;
 import io.seata.core.context.RootContext;
@@ -141,8 +142,8 @@ public class KxsSystemFeignClientConfiguration {
 	 * @return 参数
 	 */
 	@Bean
-	RemoteSysService remoteSysJobService(@Qualifier("kxsSystemFeignClient") WebClient client) {
-		HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).build();
+	RemoteSysService remoteSysService(@Qualifier("kxsSystemFeignClient") WebClient client) {
+		HttpServiceProxyFactory factory = HttpServiceProxyFactory.builder(WebClientAdapter.forClient(client)).blockTimeout(ServiceNameConstants.REQ_TIMEOUT).build();
 		return factory.createClient(RemoteSysService.class);
 	}
 

+ 41 - 42
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampBonusLog.java

@@ -5,11 +5,12 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import io.swagger.v3.oas.annotations.media.Schema;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -17,7 +18,7 @@ import lombok.EqualsAndHashCode;
  * 训练营奖金池日志表(KxsCampBonusLog)表实体类
  *
  * @author 系统
- * @since 2024-04-08 15:44:02
+ * @since 2024-07-02 10:42:51
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -56,9 +57,7 @@ public class KxsCampBonusLog extends Model<KxsCampBonusLog> implements Serializa
      * 删除标记,0未删除,1已删除
      */
     @Schema(description = "删除标记,0未删除,1已删除")
-    @TableField(fill = FieldFill.INSERT)
-    @TableLogic
-    private String delFlag;
+    private Integer delFlag;
 
 
     /**
@@ -69,77 +68,77 @@ public class KxsCampBonusLog extends Model<KxsCampBonusLog> implements Serializa
 
 
     /**
-     * 操作金额
+     * 统计的数量
      */
-    @Schema(description = "操作金额")
-    @NotNull(message = "操作金额不能为空")
-    private BigDecimal amount;
+    @Schema(description = "统计的数量")
+    private Integer sourceNum;
 
 
     /**
-     * 变动前金额
+     * 日志类型 add新增 sub减少
      */
-    @Schema(description = "变动前金额")
-    private BigDecimal beforeAmount;
+    @Schema(description = "日志类型 add新增 sub减少")
+    private String kind;
 
 
     /**
-     * 变动后金额
+     * 备注
      */
-    @Schema(description = "变动后金额")
-    private BigDecimal afterAmount;
+    @Schema(description = "备注")
+    private String remark;
 
 
     /**
-     * 日志类型 add新增 sub减少
+     * 训练营ID
      */
-    @Schema(description = "日志类型 add新增 sub减少")
-    @NotBlank(message = "操作类型不能为空")
-    private String kind;
+    @Schema(description = "训练营ID")
+    private Integer campId;
 
 
     /**
-     * 备注
+     * 操作人
      */
-    @Schema(description = "备注")
-    private String remark;
+    @Schema(description = "操作人")
+    private String createBy;
 
 
     /**
-     * 进入开机累计的sn号
+     * 来源创客ID
      */
-    @Schema(description = "进入开机累计的sn号")
-    private String posSn;
+    @Schema(description = "来源创客ID")
+    private Integer sourceId;
 
 
     /**
-     * 进入奖金池的订单ID
+     * 来源创客姓名
      */
-    @Schema(description = "进入奖金池的订单ID")
-    private Integer orderId;
-
+    @Schema(description = "来源创客姓名")
+    private String username;
 
     /**
-     * 训练营ID
+     * 来源创客编号
      */
-    @Schema(description = "训练营ID")
-    @NotNull(message = "训练营ID不能为空")
-    private Integer campId;
+    @Schema(description = "来源创客编号")
+    private String userCode;
 
+    /**
+     * 训练营用户ID
+     */
+    @Schema(description = "训练营用户ID")
+    private Integer campUserId;
 
     /**
-     * 分期大盟主的分期ID
+     * ID
      */
-    @Schema(description = "分期大盟主的分期ID")
-    private Integer stageId;
+    @Schema(description = "ID")
+    private String groupId;
 
 
     /**
-     * 操作人
+     * 来源类型 电签券=0 大机券=1 组合包=2 小盟主=3 大盟主=4 pos开机=5 广电卡激活=6
      */
-    @Schema(description = "操作人")
-    @NotBlank(message = "操作人不能为空")
-    private String createBy;
+    @Schema(description = "来源类型 电签券=0 大机券=1 组合包=2 小盟主=3 大盟主=4 pos开机=5 广电卡激活=6 来客吧激活=7 大小盟主兑换券=8")
+    private Integer sourceType;
 
 
 

+ 115 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampGroup.java

@@ -0,0 +1,115 @@
+package com.kxs.system.api.model;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 训练营分组(KxsCampGroup)表实体类
+ *
+ * @author 系统
+ * @since 2024-07-02 10:42:52
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KxsCampGroup extends Model<KxsCampGroup> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 删除标记,0未删除,1已删除
+     */
+    @Schema(description = "删除标记,0未删除,1已删除")
+    private String delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 小组名称
+     */
+    @Schema(description = "小组名称")
+    private String groupName;
+
+
+    /**
+     * 分组ID
+     */
+    @Schema(description = "分组ID")
+    private String groupId;
+
+
+    /**
+     * 训练营ID
+     */
+    @Schema(description = "训练营ID")
+    private Integer campId;
+
+
+    /**
+     * 组长ID
+     */
+    @Schema(description = "组长ID")
+    private Integer groupLeaderId;
+
+
+    /**
+     * 组长名称
+     */
+    @Schema(description = "组长名称")
+    private String groupUsername;
+
+
+    /**
+     * 组长创客编号
+     */
+    @Schema(description = "组长创客编号")
+    private String groupUserCode;
+
+
+
+
+}
+

+ 147 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampReport.java

@@ -0,0 +1,147 @@
+package com.kxs.system.api.model;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 训练营报备(KxsCampReport)表实体类
+ *
+ * @author 系统
+ * @since 2024-07-02 15:10:28
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class KxsCampReport extends Model<KxsCampReport> implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    
+    
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+
+    /**
+     * 更新时间
+     */
+    @TableField(fill = FieldFill.UPDATE)
+    @Schema(description = "更新时间")
+    private LocalDateTime updateTime;
+
+
+    /**
+     * 删除标记,0未删除,1已删除
+     */
+    @Schema(description = "删除标记,0未删除,1已删除")
+    private String delFlag;
+
+
+    /**
+     * 版本
+     */
+    @Schema(description = "版本")
+    private Integer version;
+
+
+    /**
+     * 报备类型 广电开卡=0 来客吧=1 业绩报备=2 商城下单=3 其他=-1
+     */
+    @Schema(description = "报备类型 广电开卡=0 来客吧=1 业绩报备=2 商城下单=3 其他=-1")
+    @NotNull(message = "报备类型不能为空")
+    private Integer reportType;
+
+
+    /**
+     * 报备说明
+     */
+    @Schema(description = "报备说明")
+    @NotBlank(message = "报备说明不能为空")
+    private String title;
+
+
+    /**
+     * 图片数组
+     */
+    @Schema(description = "图片数组")
+    private String imgs;
+
+
+    /**
+     * 状态 0审核中 1审核通过 -1审核失败
+     */
+    @Schema(description = "状态 0审核中 1审核通过 -1审核失败")
+    private Integer status;
+
+
+    /**
+     * 报备创客ID
+     */
+    @Schema(description = "报备创客ID")
+    private Long userId;
+
+    /**
+     * 训练营ID
+     */
+    @Schema(description = "训练营ID")
+    @NotNull(message = "训练营ID不能为空")
+    private Integer campId;
+
+
+    /**
+     * 创客姓名
+     */
+    @Schema(description = "创客姓名")
+    private String username;
+
+
+    /**
+     * 创客编号
+     */
+    @Schema(description = "创客编号")
+    private String userCode;
+
+
+    /**
+     * 备注
+     */
+    @Schema(description = "备注")
+    private String remark;
+
+
+    /**
+     * 操作人
+     */
+    @Schema(description = "操作人")
+    private String createBy;
+
+
+
+
+}
+

+ 6 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampUser.java

@@ -147,6 +147,12 @@ public class KxsCampUser extends Model<KxsCampUser> implements Serializable {
     private Integer teamLkbNum;
 
 
+    /**
+     * 分组ID
+     */
+    private String groupId;
+
+
 
 
 }

+ 115 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/camp/CampBonusLogVO.java

@@ -0,0 +1,115 @@
+package com.kxs.system.api.vo.admin.camp;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 训练营奖金池日志表(KxsCampBonusLog)表实体类
+ *
+ * @author 系统
+ * @since 2024-07-02 10:42:51
+ */
+@Data
+public class CampBonusLogVO implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键ID
+     */
+    @Schema(description = "主键ID")
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 新增时间
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @Schema(description = "新增时间")
+    private LocalDateTime createTime;
+
+    /**
+     * 统计的数量
+     */
+    @Schema(description = "统计的数量")
+    private Integer sourceNum;
+
+
+    /**
+     * 日志类型 add新增 sub减少
+     */
+    @Schema(description = "日志类型 add新增 sub减少")
+    private String kind;
+
+
+    /**
+     * 备注
+     */
+    @Schema(description = "备注")
+    private String remark;
+
+
+    /**
+     * 来源创客ID
+     */
+    @Schema(description = "来源创客ID")
+    private Integer sourceId;
+
+
+    /**
+     * 来源创客姓名
+     */
+    @Schema(description = "来源创客姓名")
+    private String sourceName;
+
+    /**
+     * 来源创客编号
+     */
+    @Schema(description = "来源创客编号")
+    private String sourceCode;
+
+    /**
+     * 组 ID
+     */
+    @Schema(description = "组 ID")
+    private String groupId;
+
+
+    /**
+     * 来源类型 电签券=0 大机券=1 组合包=2 小盟主=3 大盟主=4 pos开机=5 广电卡激活=6
+     */
+    @Schema(description = "来源类型 电签券=0 大机券=1 组合包=2 小盟主=3 大盟主=4 pos开机=5 广电卡激活=6 来客吧激活=7 大小盟主兑换券=8")
+    private Integer sourceType;
+
+    /**
+     * 训练营用户姓名
+     */
+    @Schema(description = "训练营用户姓名")
+    private String username;
+
+    /**
+     * 训练营用户编号
+     */
+    @Schema(description = "训练营用户编号")
+    private String userCode;
+
+    /**
+     * 训练营标题
+     */
+    @Schema(description = "训练营标题")
+    private String title;
+
+
+}
+

+ 8 - 1
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/CampUserExcelVO.java → kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/camp/CampUserExcelVO.java

@@ -1,4 +1,4 @@
-package com.kxs.system.api.vo.admin;
+package com.kxs.system.api.vo.admin.camp;
 
 import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
@@ -47,6 +47,13 @@ public class CampUserExcelVO implements Serializable {
 	@ExcelProperty("创客编号")
 	private String userCode;
 
+	/**
+	 * 分组编号
+	 */
+	@NotBlank(message = "分组编号不能为空")
+	@ExcelProperty("分组编号")
+	private String groupId;
+
 
 
 }

+ 32 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/camp/ReportCampPageVO.java

@@ -0,0 +1,32 @@
+package com.kxs.system.api.vo.admin.camp;
+
+import com.kxs.system.api.model.KxsCampReport;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+
+/**
+ * 训练营奖金池日志表(KxsCampBonusLog)表实体类
+ *
+ * @author 系统
+ * @since 2024-07-02 10:42:51
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class ReportCampPageVO extends KxsCampReport {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+
+    /**
+     * 训练营标题
+     */
+    @Schema(description = "训练营标题")
+    private String campTitle;
+
+
+}
+

+ 47 - 31
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/controller/admin/SysCampController.java

@@ -1,32 +1,25 @@
 package com.kxs.system.biz.controller.admin;
 
-import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.StrUtil;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.common.core.util.R;
 import com.kxs.common.log.annotation.SysLog;
 import com.kxs.system.api.dto.admin.GetByBcqtPageDTO;
-import com.kxs.system.api.model.KxsBcqtTeam;
-import com.kxs.system.api.model.KxsCamp;
-import com.kxs.system.api.model.KxsCampBonusLog;
-import com.kxs.system.api.model.KxsCampUser;
-import com.kxs.system.api.vo.admin.CampUserExcelVO;
+import com.kxs.system.api.dto.admin.camp.CampReportAuditDTO;
+import com.kxs.system.api.model.*;
+import com.kxs.system.api.vo.admin.camp.CampBonusLogVO;
+import com.kxs.system.api.vo.admin.camp.CampUserExcelVO;
+import com.kxs.system.api.vo.admin.camp.ReportCampPageVO;
 import com.kxs.system.biz.constant.enums.CampStatusEnum;
-import com.kxs.system.biz.service.KxsBcqtTeamService;
-import com.kxs.system.biz.service.KxsCampBonusLogService;
-import com.kxs.system.biz.service.KxsCampService;
-import com.kxs.system.biz.service.KxsCampUserService;
+import com.kxs.system.biz.service.*;
 import com.pig4cloud.plugin.excel.annotation.RequestExcel;
 import jakarta.validation.Valid;
 import lombok.RequiredArgsConstructor;
 import org.springdoc.core.annotations.ParameterObject;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.BindingResult;
 import org.springframework.web.bind.annotation.*;
 
-import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Objects;
 
@@ -48,6 +41,7 @@ public class SysCampController {
     private final KxsCampUserService kxsCampUserService;
     private final KxsCampBonusLogService kxsCampBonusLogService;
     private final KxsBcqtTeamService kxsBcqtTeamService;
+    private final KxsCampReportService kxsCampReportService;
 
 
     /**
@@ -157,22 +151,7 @@ public class SysCampController {
 
 
     /**
-     * 训练营-增减奖金池
-     *
-     * @param param 实体对象
-     * @return 训练营-增减奖金池
-     */
-    @SysLog("增减奖金池")
-    @PostMapping("/changeBonus")
-//    @PreAuthorize("@pms.hasPermission('sys_camp_change_bonus')")
-    public R changeBonus(@RequestBody @Valid KxsCampBonusLog param) {
-
-        return kxsCampBonusLogService.changeBonus(param);
-    }
-
-
-    /**
-     * 训练营-扣除记录
+     * 训练营-日志列表
      *
      * @param page 分页对象
      * @param param 查询实体
@@ -180,14 +159,51 @@ public class SysCampController {
      */
     @GetMapping("/pageLog")
 //    @PreAuthorize("@pms.hasPermission('sys_camp_change_list')")
-    public R pageLog(Page<KxsCampBonusLog> page, @ParameterObject KxsCampBonusLog param) {
+    public R pageLog(Page<CampBonusLogVO> page, @ParameterObject KxsCampBonusLog param) {
 
         if(param.getCampId() == null){
             return R.failed("训练营ID不能为空");
         }
-        return R.ok(kxsCampBonusLogService.page(page, new QueryWrapper<>(param)));
+        return R.ok(kxsCampBonusLogService.getSysPage(page, param));
     }
 
+    /**
+     * 训练营-报备列表
+     *
+     * @param page 分页对象
+     * @param param 查询实体
+     * @return 训练营-报备列表
+     */
+    @GetMapping("/reportPage")
+//    @PreAuthorize("@pms.hasPermission('sys_camp_report_list')")
+    public R reportPage(Page<ReportCampPageVO> page, @ParameterObject KxsCampReport param) {
+
+        return R.ok(kxsCampReportService.reportPage(page, param));
+    }
+
+    /**
+     * 训练营-报备审核
+     *
+     * @return 训练营-报备审核
+     */
+    @PutMapping("/reportAudit")
+//    @PreAuthorize("@pms.hasPermission('sys_camp_report_audit')")
+    public R reportAudit(@Valid @RequestBody CampReportAuditDTO param) {
+
+        return R.ok(kxsCampReportService.reportAudit(param));
+    }
+
+
+
+
+
+
+
+
+
+
+
+
 
     /**
      * 训练营-百城千团列表

+ 55 - 8
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/controller/kxsapp/CampController.java

@@ -1,14 +1,18 @@
 package com.kxs.system.biz.controller.kxsapp;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.common.core.util.R;
 import com.kxs.common.security.annotation.Inner;
 import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.system.api.dto.kxsapp.camp.*;
 import com.kxs.system.api.model.KxsBcqtTeam;
+import com.kxs.system.api.model.KxsCampReport;
 import com.kxs.system.api.vo.kxsapp.camp.CampPageVO;
 import com.kxs.system.api.vo.kxsapp.camp.CampUserPageVO;
 import com.kxs.system.biz.service.KxsBcqtTeamService;
+import com.kxs.system.biz.service.KxsCampReportService;
 import com.kxs.system.biz.service.KxsCampService;
 import com.kxs.system.biz.service.KxsCampUserService;
 import jakarta.validation.Valid;
@@ -33,6 +37,7 @@ public class CampController {
     private final KxsCampService kxsCampService;
     private final KxsCampUserService kxsCampUserService;
     private final KxsBcqtTeamService kxsBcqtTeamService;
+    private final KxsCampReportService kxsCampReportService;
 
 
     /**
@@ -73,6 +78,54 @@ public class CampController {
         return R.ok(kxsCampUserService.getByPage(page, campId));
     }
 
+    /**
+     * 获取当前用户参加训练营的信息
+     *
+     * @return {@link R}
+     */
+    @GetMapping("/getByCampInfo")
+    public R getByCampInfo(){
+
+        return R.ok(kxsCampUserService.getByCampInfo());
+    }
+
+    /**
+     * 训练营报备提交
+     *
+     * @return {@link R}
+     */
+    @PostMapping("/report")
+    public R report(@Valid @RequestBody KxsCampReport param){
+
+        return R.ok(kxsCampReportService.report(param));
+    }
+
+    /**
+     * 训练营报备列表
+     *
+     * @return {@link R}
+     */
+    @GetMapping("/reportPage")
+    public R reportPage(@ParameterObject Page<KxsCampReport> page, @ParameterObject KxsCampReport param){
+
+        return R.ok(kxsCampReportService.page(page, Wrappers.query(param)));
+    }
+
+    /**
+     * 训练营报备取消
+     *
+     * @return {@link R}
+     */
+    @PutMapping("/cancelReport")
+    public R cancelReport(@RequestBody KxsCampReport param){
+
+        return R.ok(kxsCampReportService.cancelReport(param));
+    }
+
+
+
+
+
     /**
      * 训练营奖金池刷新
      *
@@ -88,17 +141,11 @@ public class CampController {
     }
 
     /**
+     * 开机数据统计
      *
-     *  大小盟主开通统计到训练营
+     * @param param 参数
      */
     @Inner
-    @GetMapping("/poweronQuantityStatistics")
-    public void prizePoolIsRefreshed()  {
-
-        kxsCampService.poweronQuantityStatistics();
-
-    }
-    @Inner
     @PostMapping("/campOpenNumStat")
     public void campOpenNumStat(@RequestBody CampOpenNumStatDTO param)  {
 

+ 13 - 1
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsCampBonusLogMapper.java

@@ -1,17 +1,29 @@
 package com.kxs.system.biz.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.system.api.model.KxsCampBonusLog;
+import com.kxs.system.api.vo.admin.camp.CampBonusLogVO;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 训练营奖金池日志表(KxsCampBonusLog)表数据库访问层
  *
  * @author 系统
- * @since 2024-04-08 15:44:02
+ * @since 2024-07-02 10:42:51
  */
 @Mapper
 public interface KxsCampBonusLogMapper extends BaseMapper<KxsCampBonusLog> {
 
+    /**
+     * 后台分页
+     *
+     * @param page  页
+     * @param param 参数
+     * @return {@link IPage}
+     */
+    IPage<CampBonusLogVO> getSysPage(Page<CampBonusLogVO> page, @Param("param") KxsCampBonusLog param);
 }
 

+ 17 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsCampGroupMapper.java

@@ -0,0 +1,17 @@
+package com.kxs.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.kxs.system.api.model.KxsCampGroup;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 训练营分组(KxsCampGroup)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-07-02 10:42:52
+ */
+@Mapper
+public interface KxsCampGroupMapper extends BaseMapper<KxsCampGroup> {
+
+}
+

+ 29 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/mapper/KxsCampReportMapper.java

@@ -0,0 +1,29 @@
+package com.kxs.system.biz.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.kxs.system.api.model.KxsCampReport;
+import com.kxs.system.api.vo.admin.camp.ReportCampPageVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 训练营报备(KxsCampReport)表数据库访问层
+ *
+ * @author 系统
+ * @since 2024-07-02 15:10:28
+ */
+@Mapper
+public interface KxsCampReportMapper extends BaseMapper<KxsCampReport> {
+
+    /**
+     * 后台报备列表
+     *
+     * @param page  页
+     * @param param 参数
+     * @return {@link IPage}<{@link ReportCampPageVO}>
+     */
+    IPage<ReportCampPageVO> selectReportPage(Page<ReportCampPageVO> page, @Param("param") KxsCampReport param);
+}
+

+ 12 - 3
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampBonusLogService.java

@@ -1,17 +1,26 @@
 package com.kxs.system.biz.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.kxs.common.core.util.R;
 import com.kxs.system.api.model.KxsCampBonusLog;
+import com.kxs.system.api.vo.admin.camp.CampBonusLogVO;
 
 /**
  * 训练营奖金池日志表(KxsCampBonusLog)表服务接口
  *
  * @author 系统
- * @since 2024-04-08 15:44:02
+ * @since 2024-07-02 10:42:51
  */
 public interface KxsCampBonusLogService extends IService<KxsCampBonusLog> {
 
-    R changeBonus(KxsCampBonusLog param);
+    /**
+     * 后台分页
+     *
+     * @param page  页
+     * @param param 参数
+     * @return {@link IPage}
+     */
+    IPage<CampBonusLogVO> getSysPage(Page<CampBonusLogVO> page, KxsCampBonusLog param);
 }
 

+ 15 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampGroupService.java

@@ -0,0 +1,15 @@
+package com.kxs.system.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.system.api.model.KxsCampGroup;
+
+/**
+ * 训练营分组(KxsCampGroup)表服务接口
+ *
+ * @author 系统
+ * @since 2024-07-02 10:42:52
+ */
+public interface KxsCampGroupService extends IService<KxsCampGroup> {
+
+}
+

+ 52 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampReportService.java

@@ -0,0 +1,52 @@
+package com.kxs.system.biz.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.system.api.dto.admin.camp.CampReportAuditDTO;
+import com.kxs.system.api.model.KxsCampReport;
+import com.kxs.system.api.vo.admin.camp.ReportCampPageVO;
+
+/**
+ * 训练营报备(KxsCampReport)表服务接口
+ *
+ * @author 系统
+ * @since 2024-07-02 15:10:29
+ */
+public interface KxsCampReportService extends IService<KxsCampReport> {
+
+    /**
+     * app 报备提交
+     *
+     * @param param 参数
+     * @return {@link Object}
+     */
+    Boolean report(KxsCampReport param);
+
+    /**
+     * 取消报备
+     *
+     * @param param 参数
+     * @return {@link Boolean}
+     */
+    Boolean cancelReport(KxsCampReport param);
+
+
+    /**
+     * 报备审核
+     *
+     * @param param 参数
+     * @return {@link Boolean}
+     */
+    Boolean reportAudit(CampReportAuditDTO param);
+
+    /**
+     * 报备列表
+     *
+     * @param page  页
+     * @param param 参数
+     * @return {@link IPage}<{@link ReportCampPageVO}>
+     */
+    IPage<ReportCampPageVO> reportPage(Page<ReportCampPageVO> page, KxsCampReport param);
+}
+

+ 1 - 7
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampService.java

@@ -7,7 +7,7 @@ import com.kxs.common.core.util.R;
 import com.kxs.system.api.dto.kxsapp.camp.CampOpenNumStatDTO;
 import com.kxs.system.api.dto.kxsapp.camp.PrizePoolDTO;
 import com.kxs.system.api.model.KxsCamp;
-import com.kxs.system.api.vo.admin.CampUserExcelVO;
+import com.kxs.system.api.vo.admin.camp.CampUserExcelVO;
 import com.kxs.system.api.vo.kxsapp.camp.CampGetByIdVO;
 import com.kxs.system.api.vo.kxsapp.camp.CampPageVO;
 import org.springframework.validation.BindingResult;
@@ -77,12 +77,6 @@ public interface KxsCampService extends IService<KxsCamp> {
      */
     IPage<KxsCamp> getBySysPage(Page<KxsCamp> page, KxsCamp param);
 
-
-    /**
-     * 开机数量统计
-     */
-    void poweronQuantityStatistics();
-
     /**
      * 更改状态
      *

+ 9 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampUserService.java

@@ -22,5 +22,14 @@ public interface KxsCampUserService extends IService<KxsCampUser> {
      * @return {@link IPage}<{@link CampUserPageVO}>
      */
     IPage<CampUserPageVO> getByPage(Page<CampUserPageVO> page, Integer campId);
+
+    /**
+     * 获取当前创客参与的训练营信息
+     *
+     * @return {@link Object}
+     */
+    Object getByCampInfo();
+
+
 }
 

+ 6 - 32
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampBonusLogServiceImpl.java

@@ -1,19 +1,14 @@
 package com.kxs.system.biz.service.impl;
 
-import cn.hutool.core.util.NumberUtil;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.kxs.common.core.util.R;
-import com.kxs.system.api.model.KxsCamp;
-import com.kxs.system.biz.constant.enums.SysErrorTypeEnum;
-import com.kxs.system.biz.mapper.KxsCampBonusLogMapper;
 import com.kxs.system.api.model.KxsCampBonusLog;
-import com.kxs.system.biz.mapper.KxsCampMapper;
+import com.kxs.system.api.vo.admin.camp.CampBonusLogVO;
+import com.kxs.system.biz.mapper.KxsCampBonusLogMapper;
 import com.kxs.system.biz.service.KxsCampBonusLogService;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.math.BigDecimal;
 
 /**
  * 训练营奖金池日志表(KxsCampBonusLog)表服务实现类
@@ -25,32 +20,11 @@ import java.math.BigDecimal;
 @RequiredArgsConstructor
 public class KxsCampBonusLogServiceImpl extends ServiceImpl<KxsCampBonusLogMapper, KxsCampBonusLog> implements KxsCampBonusLogService {
 
-    private final KxsCampMapper kxsCampMapper;
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
-    public R changeBonus(KxsCampBonusLog param) {
-
-        KxsCamp kxsCamp = kxsCampMapper.selectById(param.getCampId());
-        if(kxsCamp == null){
-            return R.failed(SysErrorTypeEnum.NOT_DATA.getDescription());
-        }
-
-        param.setBeforeAmount(kxsCamp.getBonusPool());
-        BigDecimal subAmt = NumberUtil.sub(kxsCamp.getBonusPool(), param.getAmount());
-        if(subAmt.compareTo(BigDecimal.ZERO) < 0){
-            return R.failed("扣除金额不能大于奖金池金额");
-        }
-
-        //更新奖金池金额
-        kxsCamp.setBonusPool(subAmt);
-        kxsCampMapper.updateById(kxsCamp);
-
-        //添加扣除记录
-        param.setAfterAmount(subAmt);
-        baseMapper.insert(param);
+    public IPage<CampBonusLogVO> getSysPage(Page<CampBonusLogVO> page, KxsCampBonusLog param) {
 
-        return R.ok();
+        return baseMapper.getSysPage(page, param);
     }
 }
 

+ 19 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampGroupServiceImpl.java

@@ -0,0 +1,19 @@
+package com.kxs.system.biz.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.system.biz.mapper.KxsCampGroupMapper;
+import com.kxs.system.api.model.KxsCampGroup;
+import com.kxs.system.biz.service.KxsCampGroupService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 训练营分组(KxsCampGroup)表服务实现类
+ *
+ * @author 系统
+ * @since 2024-07-02 15:10:28
+ */
+@Service("kxsCampGroupService")
+public class KxsCampGroupServiceImpl extends ServiceImpl<KxsCampGroupMapper, KxsCampGroup> implements KxsCampGroupService {
+
+}
+

+ 132 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampReportServiceImpl.java

@@ -0,0 +1,132 @@
+package com.kxs.system.biz.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.core.constant.enums.KindTypeEnum;
+import com.kxs.common.core.exception.GlobalCustomerException;
+import com.kxs.common.security.util.SecurityUtils;
+import com.kxs.system.api.dto.admin.camp.CampReportAuditDTO;
+import com.kxs.system.api.model.KxsCamp;
+import com.kxs.system.api.model.KxsCampBonusLog;
+import com.kxs.system.api.model.KxsCampReport;
+import com.kxs.system.api.model.KxsCampUser;
+import com.kxs.system.api.vo.admin.camp.ReportCampPageVO;
+import com.kxs.system.biz.mapper.KxsCampBonusLogMapper;
+import com.kxs.system.biz.mapper.KxsCampMapper;
+import com.kxs.system.biz.mapper.KxsCampReportMapper;
+import com.kxs.system.biz.mapper.KxsCampUserMapper;
+import com.kxs.system.biz.service.KxsCampReportService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Objects;
+import java.util.Optional;
+
+/**
+ * 训练营报备(KxsCampReport)表服务实现类
+ *
+ * @author 系统
+ * @since 2024-07-02 15:10:29
+ */
+@Service("kxsCampReportService")
+@RequiredArgsConstructor
+public class KxsCampReportServiceImpl extends ServiceImpl<KxsCampReportMapper, KxsCampReport> implements KxsCampReportService {
+
+    private final KxsCampMapper kxsCampMapper;
+
+    private final KxsCampUserMapper kxsCampUserMapper;
+
+    private final KxsCampBonusLogMapper kxsCampBonusLogMapper;
+    @Override
+    public Boolean report(KxsCampReport param) {
+
+        Long userId = SecurityUtils.getUser().getId();
+        param.setUserId(userId);
+
+        //查询此用户数否参加训练营
+        KxsCamp kxsCamp = kxsCampMapper.selectUserCamp(userId.intValue());
+        Optional.ofNullable(kxsCamp).orElseThrow(() -> new GlobalCustomerException("您未参加训练营/训练营已结束"));
+        if(!Objects.equals(kxsCamp.getId(), param.getCampId())){
+            throw new GlobalCustomerException("训练营ID错误");
+        }
+        KxsCampUser kxsCampUser = kxsCampUserMapper.selectOne(Wrappers.<KxsCampUser>lambdaQuery()
+                .eq(KxsCampUser::getCampId, kxsCamp.getId())
+                .eq(KxsCampUser::getUserId, param.getUserId()));
+        param.setUserCode(kxsCampUser.getUserCode());
+        param.setUsername(kxsCampUser.getUsername());
+        return save(param);
+    }
+
+    @Override
+    public Boolean cancelReport(KxsCampReport param) {
+
+        if(param.getId() == null){
+            throw new GlobalCustomerException("id不能为空");
+        }
+
+        return removeById(param.getId());
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean reportAudit(CampReportAuditDTO param) {
+
+        KxsCampReport campReport = getById(param.getId());
+        Optional.ofNullable(campReport).orElseThrow(() -> new GlobalCustomerException("训练营报备不存在"));
+
+        //审核拒绝
+        if(param.getStatus() == -1) {
+            campReport.setStatus(param.getStatus());
+            campReport.setRemark(param.getRemark());
+        }
+        //审核通过
+        if(param.getStatus() == 1) {
+            campReport.setStatus(param.getStatus());
+            //查询此用户数否参加训练营
+            KxsCamp kxsCamp = kxsCampMapper.selectUserCamp(campReport.getUserId().intValue());
+            if (kxsCamp != null) {
+                kxsCamp.setOrderNum(kxsCamp.getOrderNum() + 1);
+
+                KxsCampUser kxsCampUser = kxsCampUserMapper.selectOne(Wrappers.<KxsCampUser>lambdaQuery()
+                        .eq(KxsCampUser::getCampId, kxsCamp.getId())
+                        .eq(KxsCampUser::getUserId, param.getUserId()));
+
+                switch (param.getSourceType()) {
+                    case 0, 1, 2, 8 ->
+                            kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + param.getSourceNum()); //电签券/组合包/盟主兑换券
+                    case 3, 4 -> kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + param.getSourceNum());
+                    case 5 -> kxsCampUser.setTeamPosNum(kxsCampUser.getTeamPosNum() + param.getSourceNum());
+                    case 6 -> kxsCampUser.setTeamGdNum(kxsCampUser.getTeamGdNum() + param.getSourceNum());
+                    case 7 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + param.getSourceNum());
+                }
+                kxsCampUserMapper.updateById(kxsCampUser);
+
+                //添加日志
+                KxsCampBonusLog kxsCampBonusLog = new KxsCampBonusLog();
+                kxsCampBonusLog.setCampId(kxsCamp.getId());
+                kxsCampBonusLog.setCampUserId(kxsCampUser.getUserId());
+                kxsCampBonusLog.setGroupId(kxsCampUser.getGroupId());
+                kxsCampBonusLog.setSourceId(kxsCampUser.getUserId());
+                kxsCampBonusLog.setUsername(kxsCampUser.getUsername());
+                kxsCampBonusLog.setUserCode(kxsCampUser.getUserCode());
+                kxsCampBonusLog.setRemark("系统添加");
+                kxsCampBonusLog.setKind(KindTypeEnum.ADD.getType());
+                kxsCampBonusLog.setSourceNum(param.getSourceNum());
+                kxsCampBonusLog.setSourceType(param.getSourceType());
+                kxsCampBonusLogMapper.insert(kxsCampBonusLog);
+            }
+        }
+        baseMapper.updateById(campReport);
+        return Boolean.TRUE;
+    }
+
+    @Override
+    public IPage<ReportCampPageVO> reportPage(Page<ReportCampPageVO> page, KxsCampReport param) {
+
+        return baseMapper.selectReportPage(page, param);
+    }
+}
+

+ 134 - 231
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampServiceImpl.java

@@ -4,37 +4,35 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.LocalDateTimeUtil;
-import cn.hutool.core.text.StrPool;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 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.KindTypeEnum;
 import com.kxs.common.core.exception.GlobalCustomerException;
 import com.kxs.common.core.util.R;
 import com.kxs.common.core.util.RetOps;
-import com.kxs.common.core.util.SysUtils;
 import com.kxs.common.security.util.SecurityUtils;
 import com.kxs.system.api.dto.kxsapp.camp.CampOpenNumStatDTO;
 import com.kxs.system.api.dto.kxsapp.camp.PrizePoolDTO;
-import com.kxs.system.api.feign.RemoteOldService;
 import com.kxs.system.api.model.KxsCamp;
+import com.kxs.system.api.model.KxsCampBonusLog;
 import com.kxs.system.api.model.KxsCampUser;
-import com.kxs.system.api.vo.admin.CampUserExcelVO;
+import com.kxs.system.api.vo.admin.camp.CampUserExcelVO;
 import com.kxs.system.api.vo.kxsapp.camp.CampGetByIdVO;
 import com.kxs.system.api.vo.kxsapp.camp.CampPageVO;
 import com.kxs.system.biz.constant.enums.CampStatusEnum;
 import com.kxs.system.biz.constant.enums.SysErrorTypeEnum;
 import com.kxs.system.biz.mapper.KxsCampMapper;
+import com.kxs.system.biz.service.KxsCampBonusLogService;
 import com.kxs.system.biz.service.KxsCampService;
 import com.kxs.system.biz.service.KxsCampUserService;
 import com.kxs.user.api.feign.RemoteKxsUserService;
-import com.kxs.user.api.model.KxsLeader;
 import com.kxs.user.api.model.KxsUser;
 import com.pig4cloud.plugin.excel.vo.ErrorMessage;
 import lombok.RequiredArgsConstructor;
@@ -61,12 +59,10 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
 
     private final RemoteKxsUserService remoteKxsUserService;
 
-
-    private final RemoteOldService remoteOldService;
-
-
     private final KxsCampUserService kxsCampUserService;
 
+    private final KxsCampBonusLogService campBonusLogService;
+
 
     @Override
     public R addData(KxsCamp param) {
@@ -89,7 +85,7 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
             return R.failed(SysErrorTypeEnum.PARAM_ERROR.getDescription());
         }
         KxsCamp kxsCamp = baseMapper.selectById(param.getId());
-        Optional.ofNullable(kxsCamp).orElseThrow(()-> new GlobalCustomerException(SysErrorTypeEnum.NOT_DATA.getDescription()));
+        Optional.ofNullable(kxsCamp).orElseThrow(() -> new GlobalCustomerException(SysErrorTypeEnum.NOT_DATA.getDescription()));
 
         R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getCreateUserId(), SecurityConstants.FROM_IN);
         KxsUser user = RetOps.of(kxsUserR)
@@ -120,8 +116,8 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
                     .getData()
                     .orElse(null);
             KxsCamp kxsCamp = baseMapper.selectById(excel.getCampId());
-            Optional.ofNullable(kxsCamp).orElseThrow(()-> new GlobalCustomerException(excel.getCampId() + "训练营编号不存在,请重新上传!"));
-            if(Objects.equals(kxsCamp.getStatus(), CampStatusEnum.STATUS_END.getType())){
+            Optional.ofNullable(kxsCamp).orElseThrow(() -> new GlobalCustomerException(excel.getCampId() + "训练营编号不存在,请重新上传!"));
+            if (Objects.equals(kxsCamp.getStatus(), CampStatusEnum.STATUS_END.getType())) {
                 throw new GlobalCustomerException(excel.getCampId() + "训练营已结束,不允许导入!");
             }
 
@@ -143,6 +139,7 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
             if (CollUtil.isEmpty(errorMsg)) {
                 KxsCampUser campUser = new KxsCampUser();
                 campUser.setCampId(excel.getCampId());
+                campUser.setGroupId(excel.getGroupId());
                 campUser.setUserId(user.getId());
                 campUser.setUsername(user.getUsername());
                 campUser.setUserCode(user.getUserCode());
@@ -188,94 +185,103 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
 
         log.info("开始处理兑换券下单订单号:{}统计到训练营奖金池", param.getOrderNo());
 
-        if(param.getProductId() == 27 || param.getProductId() == 28 || param.getProductId() == 39  || param.getProductId() == 40 ){
-            //查询此用户是否参加进行中的训练营
-            KxsCamp kxsCamp = baseMapper.selectUserCamp(param.getUserId());
-            if (kxsCamp != null) {
-                //给训练营加金额
-                kxsCamp.setOrderNum(kxsCamp.getOrderNum() + 1);
-                baseMapper.updateById(kxsCamp);
-
-                //给创客团队加金额
-                KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
-                        .eq(KxsCampUser::getCampId, kxsCamp.getId())
-                        .eq(KxsCampUser::getUserId, param.getUserId()));
-                kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
-                kxsCampUserService.updateById(kxsCampUser);
-                log.info("用户{}参加训练营{},订单ID{}, 订单数{}", param.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getOrderNum());
-                return;
-            }
-            //查找此用户上级倒序后参加了训练营,把奖金加入到自己和训练营里
-            R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
-            KxsUser user = RetOps.of(kxsUserR)
-                    .getData()
-                    .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
-            //下单用户的上级路径
-            String[] pidPaths = user.getPidPath().split(StrPool.COMMA);
-            //翻转上级从最近的开始查询
-            Arrays.sort(pidPaths, Collections.reverseOrder());
-            KxsCampUser kxsCampUser = baseMapper.selectParentUsersCamp(pidPaths);
-            if (kxsCampUser != null) {
-                //给训练营加金额
-                kxsCamp = baseMapper.selectById(kxsCampUser.getCampId());
-                kxsCamp.setOrderNum(kxsCamp.getOrderNum() + 1);
-                baseMapper.updateById(kxsCamp);
-
-                //给创客团队加金额
-                kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
-                kxsCampUserService.updateById(kxsCampUser);
-                log.info("用户{}的上级{}参加训练营{},订单ID{},订单数{}", param.getUserId(), kxsCampUser.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getOrderNum());
-            }
-            return;
-        }
-
-
-        //下单组数
-        BigDecimal number = NumberUtil.div(param.getTotalPrice(), 600);
-        //订单奖金
-        BigDecimal amount = NumberUtil.mul(number, 60);
         //查询此用户是否参加进行中的训练营
         KxsCamp kxsCamp = baseMapper.selectUserCamp(param.getUserId());
-        if (kxsCamp != null) {
+        R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
+        KxsUser user = RetOps.of(kxsUserR)
+                .getData()
+                .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
+        if (kxsCamp == null) {
+            kxsCamp = baseMapper.selectUserCamp(user.getPid());
+        }
+        if (kxsCamp == null) {
+            return;
+        }
+        //大小盟主订单、盟主券续费的商品
+        if (param.getProductId() == 27 || param.getProductId() == 28 || param.getProductId() == 39 || param.getProductId() == 40) {
             //给训练营加金额
-            kxsCamp.setBonusPool(NumberUtil.add(kxsCamp.getBonusPool(), amount));
-            kxsCamp.setOrderNum(kxsCamp.getOrderNum() + number.intValue());
+            kxsCamp.setOrderNum(kxsCamp.getOrderNum() + 1);
             baseMapper.updateById(kxsCamp);
 
             //给创客团队加金额
             KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
                     .eq(KxsCampUser::getCampId, kxsCamp.getId())
                     .eq(KxsCampUser::getUserId, param.getUserId()));
-            kxsCampUser.setTeamOrderPool(NumberUtil.add(kxsCampUser.getTeamOrderPool(), amount));
-            kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + number.intValue());
+            kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
             kxsCampUserService.updateById(kxsCampUser);
-            log.info("用户{}参加训练营{},订单ID{}, 奖金池{},订单数{}", param.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getBonusPool(), kxsCamp.getOrderNum());
-            return;
-        }
-        //查找此用户上级倒序后参加了训练营,把奖金加入到自己和训练营里
-        R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
-        KxsUser user = RetOps.of(kxsUserR)
-                .getData()
-                .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
-        //下单用户的上级路径
-        String[] pidPaths = user.getPidPath().split(StrPool.COMMA);
-        //翻转上级从最近的开始查询
-        Arrays.sort(pidPaths, Collections.reverseOrder());
-        KxsCampUser kxsCampUser = baseMapper.selectParentUsersCamp(pidPaths);
-        if (kxsCampUser != null) {
+            log.info("用户/上级{}参加训练营{},订单ID{}, 订单数{}", param.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getOrderNum());
+
+            KxsCampBonusLog kxsCampBonusLog = new KxsCampBonusLog();
+            kxsCampBonusLog.setCampId(kxsCamp.getId());
+            kxsCampBonusLog.setCampUserId(kxsCampUser.getUserId());
+            kxsCampBonusLog.setGroupId(kxsCampUser.getGroupId());
+            kxsCampBonusLog.setSourceId(user.getId());
+            kxsCampBonusLog.setUsername(user.getUsername());
+            kxsCampBonusLog.setUserCode(user.getUserCode());
+            kxsCampBonusLog.setRemark("商城下单");
+            kxsCampBonusLog.setSourceNum(1);
+            kxsCampBonusLog.setKind(KindTypeEnum.ADD.getType());
+            //27|39 大盟主下单和续费
+            kxsCampBonusLog.setSourceType(param.getProductId() == 27 || param.getProductId() == 39 ? 4 : 3);
+
+
+            campBonusLogService.save(kxsCampBonusLog);
+        }else{
+
+            //下单组数
+            BigDecimal number = new BigDecimal(param.getBuyCount());
+            //订单奖金
+            BigDecimal amount = NumberUtil.mul(number, 60);
             //给训练营加金额
-            kxsCamp = baseMapper.selectById(kxsCampUser.getCampId());
             kxsCamp.setBonusPool(NumberUtil.add(kxsCamp.getBonusPool(), amount));
             kxsCamp.setOrderNum(kxsCamp.getOrderNum() + number.intValue());
             baseMapper.updateById(kxsCamp);
 
             //给创客团队加金额
+            KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
+                    .eq(KxsCampUser::getCampId, kxsCamp.getId())
+                    .eq(KxsCampUser::getUserId, param.getUserId()));
             kxsCampUser.setTeamOrderPool(NumberUtil.add(kxsCampUser.getTeamOrderPool(), amount));
             kxsCampUser.setTeamOrderNum(kxsCampUser.getTeamOrderNum() + number.intValue());
             kxsCampUserService.updateById(kxsCampUser);
-            log.info("用户{}的上级{}参加训练营{},订单ID{},奖金池{},订单数{}", param.getUserId(), kxsCampUser.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getBonusPool(), kxsCamp.getOrderNum());
+
+            KxsCampBonusLog kxsCampBonusLog = new KxsCampBonusLog();
+            kxsCampBonusLog.setCampId(kxsCamp.getId());
+            kxsCampBonusLog.setCampUserId(kxsCampUser.getUserId());
+            kxsCampBonusLog.setGroupId(kxsCampUser.getGroupId());
+            kxsCampBonusLog.setSourceId(user.getId());
+            kxsCampBonusLog.setUsername(user.getUsername());
+            kxsCampBonusLog.setUserCode(user.getUserCode());
+            kxsCampBonusLog.setRemark("商城下单");
+            kxsCampBonusLog.setSourceNum(1);
+            kxsCampBonusLog.setKind(KindTypeEnum.ADD.getType());
+            if (param.getProductId() == 10) {
+                kxsCampBonusLog.setSourceType(0); //电签券
+            } else if (param.getProductId() == 11) {
+                kxsCampBonusLog.setSourceType(1); //大机券
+            } else if(param.getProductId() != 10000){
+                kxsCampBonusLog.setSourceType(2); //组合包
+            }
+            //盟主兑换券特殊处理,总共不能超过5组进入训练营的统计
+            if(param.getProductId() == 10000){
+                long count = campBonusLogService.count(Wrappers.<KxsCampBonusLog>query()
+                        .select("SUM(source_num)")
+                        .eq("camp_id", kxsCamp.getId())
+                        .eq("source_id", user.getId())
+                        .eq("source_type", 8));
+                if(count >= 5){
+                    throw new GlobalCustomerException("用户"+user.getId()+"盟主兑换券已经兑换过5组,无法继续加入统计");
+                }
+                long subCount = 5 - count;
+                kxsCampBonusLog.setSourceNum(param.getBuyCount() > subCount ? (int) subCount : param.getBuyCount());
+                kxsCampBonusLog.setSourceType(8);
+                kxsCampBonusLog.setRemark("盟主兑换");
+            }
+            campBonusLogService.save(kxsCampBonusLog);
+            log.info("用户/上级{}参加训练营{},订单ID{}, 奖金池{},订单数{}", param.getUserId(), kxsCamp.getId(), param.getId(), kxsCamp.getBonusPool(), kxsCamp.getOrderNum());
         }
 
+
     }
 
     @Override
@@ -288,61 +294,53 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
         LocalDateTime bindTime = LocalDateTimeUtil.parse(param.getBindTime(), DatePattern.UTC_SIMPLE_PATTERN);
         //查询当前用户参加的训练营
         KxsCamp kxsCamp = baseMapper.selectUserCamp(param.getUserId().intValue());
-        if (kxsCamp != null) {
-            //判断绑定时间
-            if(kxsCamp.getStartTime().isAfter(bindTime)){
-                return;
-            }
-            //给训练营加金额
-            kxsCamp.setOpenNum(kxsCamp.getOpenNum() + (param.getActType() == 4 ? 2 : 1));
-            baseMapper.updateById(kxsCamp);
-
-            //给创客团队加金额
-            KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
-                    .eq(KxsCampUser::getCampId, kxsCamp.getId())
-                    .eq(KxsCampUser::getUserId, param.getUserId()));
-
-            switch (param.getActType()){
-                case 1 -> kxsCampUser.setTeamPosNum(kxsCampUser.getTeamPosNum() + 1);
-                case 2 -> kxsCampUser.setTeamGdNum(kxsCampUser.getTeamGdNum() + 1);
-                case 3 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 1);
-                case 4 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 2);
-            }
-            kxsCampUser.setTeamOpenNum(kxsCampUser.getTeamPosNum() + kxsCampUser.getTeamGdNum() + kxsCampUser.getTeamLkbNum());
-            kxsCampUserService.updateById(kxsCampUser);
-            log.info("用户{}参加训练营{},开机数+1", param.getUserId(), kxsCamp.getId());
-            return;
-        }
-        //查找此用户上级倒序后参加了训练营,把奖金加入到自己和训练营里
         R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getUserId(), SecurityConstants.FROM_IN);
         KxsUser user = RetOps.of(kxsUserR)
                 .getData()
                 .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
-        //下单用户的上级路径
-        String[] pidPaths = user.getPidPath().split(StrPool.COMMA);
-        //翻转上级从最近的开始查询
-        Arrays.sort(pidPaths, Collections.reverseOrder());
-        KxsCampUser kxsCampUser = baseMapper.selectParentUsersCamp(pidPaths);
-        if (kxsCampUser != null) {
-            kxsCamp = baseMapper.selectById(kxsCampUser.getCampId());
-            //判断绑定时间
-            if(kxsCamp.getStartTime().isAfter(bindTime)){
-                return;
-            }
-            kxsCamp.setOpenNum(kxsCamp.getOpenNum() + (param.getActType() == 4 ? 2 : 1));
-            baseMapper.updateById(kxsCamp);
-
-            //给创客团队加金额
-            switch (param.getActType()){
-                case 1 -> kxsCampUser.setTeamPosNum(kxsCampUser.getTeamPosNum() + 1);
-                case 2 -> kxsCampUser.setTeamGdNum(kxsCampUser.getTeamGdNum() + 1);
-                case 3 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 1);
-                case 4 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 2);
-            }
-            kxsCampUser.setTeamOpenNum(kxsCampUser.getTeamPosNum() + kxsCampUser.getTeamGdNum() + kxsCampUser.getTeamLkbNum());
-            kxsCampUserService.updateById(kxsCampUser);
-            log.info("用户{}的上级{}参加训练营{},开机数+1", param.getUserId(), kxsCampUser.getUserId(), kxsCamp.getId());
+        if (kxsCamp == null) {
+            kxsCamp = baseMapper.selectUserCamp(user.getPid());
+        }
+        if (kxsCamp == null) {
+            return;
+        }
+        //判断绑定时间
+        if (kxsCamp.getStartTime().isAfter(bindTime)) {
+            return;
         }
+        //给训练营加金额
+        kxsCamp.setOpenNum(kxsCamp.getOpenNum() + (param.getActType() == 4 ? 2 : 1));
+        baseMapper.updateById(kxsCamp);
+
+        //给创客团队加金额
+        KxsCampUser kxsCampUser = kxsCampUserService.getOne(Wrappers.<KxsCampUser>lambdaQuery()
+                .eq(KxsCampUser::getCampId, kxsCamp.getId())
+                .eq(KxsCampUser::getUserId, param.getUserId()));
+
+        switch (param.getActType()) {
+            case 1 -> kxsCampUser.setTeamPosNum(kxsCampUser.getTeamPosNum() + 1);
+            case 2 -> kxsCampUser.setTeamGdNum(kxsCampUser.getTeamGdNum() + 1);
+            case 3 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 1);
+            case 4 -> kxsCampUser.setTeamLkbNum(kxsCampUser.getTeamLkbNum() + 2);
+        }
+        kxsCampUser.setTeamOpenNum(kxsCampUser.getTeamPosNum() + kxsCampUser.getTeamGdNum() + kxsCampUser.getTeamLkbNum());
+        kxsCampUserService.updateById(kxsCampUser);
+
+        KxsCampBonusLog kxsCampBonusLog = new KxsCampBonusLog();
+        kxsCampBonusLog.setCampId(kxsCamp.getId());
+        kxsCampBonusLog.setSourceId(user.getId());
+        kxsCampBonusLog.setUsername(user.getUsername());
+        kxsCampBonusLog.setUserCode(user.getUserCode());
+        kxsCampBonusLog.setRemark("开通商户");
+        kxsCampBonusLog.setSourceNum(1);
+        kxsCampBonusLog.setKind(KindTypeEnum.ADD.getType());
+        switch (param.getActType()) {
+            case 1 -> kxsCampBonusLog.setSourceType(5);
+            case 2 -> kxsCampBonusLog.setSourceType(6);
+            case 3, 4 -> kxsCampBonusLog.setSourceType(7);
+        }
+        campBonusLogService.save(kxsCampBonusLog);
+        log.info("用户{}参加训练营{},开机数+1", param.getUserId(), kxsCamp.getId());
     }
 
     @Override
@@ -354,102 +352,30 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
     }
 
 
-    @Override
-    @Async
-    public void poweronQuantityStatistics() {
-        //查询正在进行中的活动
-        List<KxsCamp> list = baseMapper.selectList(Wrappers.<KxsCamp>lambdaQuery().eq(KxsCamp::getStatus, CampStatusEnum.STATUS_NORMAL.getType()));
-        //查询活动参与的创客
-        for (KxsCamp kxsCamp : list) {
-
-            List<KxsCampUser> campUsers = kxsCampUserService.list(Wrappers.<KxsCampUser>lambdaQuery().eq(KxsCampUser::getCampId, kxsCamp.getId()));
-            //清除参与创客的所有统计数据然后封装在map里方便统计
-            Map<Integer, KxsCampUser> campUsersMap = new HashMap<>();
-            for (KxsCampUser campUser : campUsers) {
-                KxsCampUser kxsCampUser = new KxsCampUser();
-                BeanUtil.copyProperties(campUser, kxsCampUser);
-                kxsCampUser.setTeamLeaderNum(0);
-                kxsCampUser.setTeamOpenNum(0);
-                campUsersMap.put(campUser.getUserId(), kxsCampUser);
-            }
-
-            //转换为userID集合
-            List<Integer> userIds = campUsers.stream().map(KxsCampUser::getUserId).toList();
-
-            /*
-             * 查询活动区间开通的大盟主添加到奖金池
-             */
-            R<List<KxsLeader>> leadersR = remoteKxsUserService.getDateBetweenLeaders(LocalDateTimeUtil.format(kxsCamp.getStartTime(), DatePattern.NORM_DATETIME_PATTERN)
-                    , SecurityConstants.FROM_IN);
-            List<KxsLeader> leaders = RetOps.of(leadersR)
-                    .getData()
-                    .orElse(Collections.emptyList());
-            for (KxsLeader leader : leaders) {
-                //如果是参与者自己下的单
-                if (userIds.contains(leader.getUserId())) {
-
-                    //刷新参与创客的团队累计
-                    KxsCampUser kxsCampUser = campUsersMap.get(leader.getUserId());
-                    kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
-                    kxsCampUserService.update(Wrappers.<KxsCampUser>lambdaUpdate().eq(KxsCampUser::getId, kxsCampUser.getId()).set(KxsCampUser::getTeamLeaderNum, kxsCampUser.getTeamLeaderNum()));
-                    this.update(Wrappers.<KxsCamp>lambdaUpdate().eq(KxsCamp::getId, kxsCamp.getId()).set(KxsCamp::getOrderNum, kxsCamp.getOrderNum() + 1));
-                    log.info("参与者{}自己下单盟主,进入到{}订单统计", leader.getUserId(), kxsCamp.getTitle());
-                    continue;
-                }
-                //查询此盟主的上级
-                R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(leader.getUserId(), SecurityConstants.FROM_IN);
-                KxsUser user = RetOps.of(kxsUserR)
-                        .getData()
-                        .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
-                //下单用户的上级路径
-                String[] pidPaths = user.getPidPath().split(",");
-                //通过用户的pidPath倒序查找最近所属的上级
-                Integer userId = SysUtils.checkUserIsChildren(pidPaths, userIds);
-                if (userId != null) {
-                    //刷新参与创客的团队累计
-                    KxsCampUser kxsCampUser = campUsersMap.get(userId);
-                    kxsCampUser.setTeamLeaderNum(kxsCampUser.getTeamLeaderNum() + 1);
-                    kxsCampUserService.update(Wrappers.<KxsCampUser>lambdaUpdate().eq(KxsCampUser::getId, kxsCampUser.getId()).set(KxsCampUser::getTeamLeaderNum, kxsCampUser.getTeamLeaderNum()));
-
-                    log.info("创客{}的上级{}参与训练营,进入到{}订单统计", leader.getUserId(), userId, kxsCamp.getTitle());
-                }
-            }
-            //刷新训练营统计
-            int leaderNum = 0;
-            List<KxsCampUser> users = kxsCampUserService.list(Wrappers.<KxsCampUser>lambdaQuery().eq(KxsCampUser::getCampId, kxsCamp.getId()));
-            for (KxsCampUser user : users) {
-                leaderNum = leaderNum + user.getTeamLeaderNum();
-            }
-            kxsCamp.setOrderNum(kxsCamp.getOrderNum() + leaderNum);
-            baseMapper.updateById(kxsCamp);
-        }
-
-    }
-
     @Override
     public R changeStatus(KxsCamp param) {
 
-        if(!Objects.equals(param.getStatus(), CampStatusEnum.STATUS_NORMAL.getType()) && !Objects.equals(param.getStatus(), CampStatusEnum.STATUS_END.getType())){
+        if (!Objects.equals(param.getStatus(), CampStatusEnum.STATUS_NORMAL.getType()) && !Objects.equals(param.getStatus(), CampStatusEnum.STATUS_END.getType())) {
             return R.failed(SysErrorTypeEnum.PARAM_ERROR.getDescription());
         }
         KxsCamp camp = baseMapper.selectById(param.getId());
-        Optional.ofNullable(camp).orElseThrow(()-> new GlobalCustomerException("训练营不存在"));
+        Optional.ofNullable(camp).orElseThrow(() -> new GlobalCustomerException("训练营不存在"));
 
-        if(Objects.equals(camp.getStatus(), CampStatusEnum.STATUS_END.getType())){
+        if (Objects.equals(camp.getStatus(), CampStatusEnum.STATUS_END.getType())) {
             return R.failed("已结束的训练营无法再次开启");
         }
-        if(Objects.equals(camp.getStatus(), param.getStatus())){
+        if (Objects.equals(camp.getStatus(), param.getStatus())) {
             return R.failed("训练营已开启");
         }
 
         camp.setStatus(param.getStatus());
 
         //开启活动刷新实际开始时间
-        if(Objects.equals(param.getStatus(), CampStatusEnum.STATUS_NORMAL.getType())){
+        if (Objects.equals(param.getStatus(), CampStatusEnum.STATUS_NORMAL.getType())) {
             camp.setStartTime(LocalDateTime.now());
         }
         //结束活动刷新实际结束时间
-        if(Objects.equals(param.getStatus(), CampStatusEnum.STATUS_END.getType())){
+        if (Objects.equals(param.getStatus(), CampStatusEnum.STATUS_END.getType())) {
             camp.setEndTime(LocalDateTime.now());
         }
 
@@ -457,28 +383,5 @@ public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> impl
     }
 
 
-
-
-//    private <T> void statusChange(T campT, LocalDateTime now) {
-//        if (campT instanceof KxsCamp camp) {
-//            if (camp.getEndTime().isBefore(now)) {
-//                camp.setStatus(CampStatusEnum.STATUS_END.getType());
-//            } else if (LocalDateTimeUtil.isIn(now, camp.getStartTime(), camp.getEndTime(), false, false)) {
-//                camp.setStatus(CampStatusEnum.STATUS_NORMAL.getType());
-//            } else {
-//                camp.setStatus(CampStatusEnum.STATUS_CLOSE.getType());
-//            }
-//        }
-//        if (campT instanceof CampPageVO camp) {
-//            if (camp.getEndTime().isBefore(now)) {
-//                camp.setStatus(CampStatusEnum.STATUS_END.getType());
-//            } else if (LocalDateTimeUtil.isIn(now, camp.getStartTime(), camp.getEndTime(), false, false)) {
-//                camp.setStatus(CampStatusEnum.STATUS_NORMAL.getType());
-//            } else {
-//                camp.setStatus(CampStatusEnum.STATUS_CLOSE.getType());
-//            }
-//        }
-//    }
-
 }
 

+ 12 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampUserServiceImpl.java

@@ -3,10 +3,14 @@ package com.kxs.system.biz.service.impl;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.kxs.common.security.util.SecurityUtils;
+import com.kxs.system.api.model.KxsCamp;
 import com.kxs.system.api.vo.kxsapp.camp.CampUserPageVO;
+import com.kxs.system.biz.mapper.KxsCampMapper;
 import com.kxs.system.biz.mapper.KxsCampUserMapper;
 import com.kxs.system.api.model.KxsCampUser;
 import com.kxs.system.biz.service.KxsCampUserService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
 /**
@@ -16,13 +20,21 @@ import org.springframework.stereotype.Service;
  * @since 2024-04-08 15:44:02
  */
 @Service("kxsCampUserService")
+@RequiredArgsConstructor
 public class KxsCampUserServiceImpl extends ServiceImpl<KxsCampUserMapper, KxsCampUser> implements KxsCampUserService {
 
+    private final KxsCampMapper kxsCampMapper;
     @Override
     public IPage<CampUserPageVO> getByPage(Page<CampUserPageVO> page, Integer campId) {
 
 
         return baseMapper.getByPage(page, campId);
     }
+
+    @Override
+    public Object getByCampInfo() {
+
+        return kxsCampMapper.selectUserCamp(SecurityUtils.getUser().getId().intValue());
+    }
 }
 

+ 30 - 6
kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampBonusLogMapper.xml

@@ -8,17 +8,41 @@
         <result column="update_time" property="updateTime" />
         <result column="del_flag" property="delFlag" />
         <result column="version" property="version" />
-        <result column="amount" property="amount" />
-        <result column="before_amount" property="beforeAmount" />
-        <result column="after_amount" property="afterAmount" />
+        <result column="source_num" property="sourceNum" />
         <result column="kind" property="kind" />
         <result column="remark" property="remark" />
-        <result column="pos_sn" property="posSn" />
-        <result column="order_id" property="orderId" />
         <result column="camp_id" property="campId" />
-        <result column="stage_id" property="stageId" />
         <result column="create_by" property="createBy" />
+        <result column="source_id" property="sourceId" />
+        <result column="username" property="username" />
+        <result column="user_code" property="userCode" />
+        <result column="source_type" property="sourceType" />
+        <result column="camp_user_id" property="campUserId" />
+        <result column="group_id" property="groupId" />
 
     </resultMap>
+    <select id="getSysPage" resultType="com.kxs.system.api.vo.admin.camp.CampBonusLogVO">
+        SELECT cbl.id, cbl.source_num, cbl.username, cbl.user_code, cbl.source_type, cbl.remark, cbl.create_time,
+               cu.username, cu.user_code,
+               c.title
+        FROM  kxs_camp_bonus_log cbl
+        LEFT JOIN kxs_camp_user cu ON cbl.camp_user_id = cu.user_id
+        LEFT JOIN kxs_camp c ON cbl.camp_id = c.id
+        <where>
+            AND cbl.del_flag = 0
+            <if test="param.campId != null">
+                AND cbl.camp_id = #{param.campId}
+            </if>
+            <if test="param.userCode != null">
+                AND cu.user_code = #{param.userCode}
+            </if>
+            <if test="param.sourceType != null">
+                AND cbl.source_type = #{param.sourceType}
+            </if>
+            <if test="param.createTime != null and  param.createTime.size() == 2">
+                AND cbl.create_time between #{param.createTime[0]} and #{param.createTime[1]}
+            </if>
+        </where>
+    </select>
 
 </mapper>

+ 20 - 0
kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampGroupMapper.xml

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.kxs.system.biz.mapper.KxsCampGroupMapper">
+
+    <resultMap type="com.kxs.system.api.model.KxsCampGroup" id="KxsCampGroupMap">
+        <result column="id" property="id" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="del_flag" property="delFlag" />
+        <result column="version" property="version" />
+        <result column="group_name" property="groupName" />
+        <result column="group_id" property="groupId" />
+        <result column="camp_id" property="campId" />
+        <result column="group_leader_id" property="groupLeaderId" />
+        <result column="group_username" property="groupUsername" />
+        <result column="group_user_code" property="groupUserCode" />
+
+    </resultMap>
+
+</mapper>

+ 40 - 0
kxs-system/kxs-system-biz/src/main/resources/mapper/KxsCampReportMapper.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.kxs.system.biz.mapper.KxsCampReportMapper">
+
+    <resultMap type="com.kxs.system.api.model.KxsCampReport" id="KxsCampReportMap">
+        <result column="id" property="id" />
+        <result column="create_time" property="createTime" />
+        <result column="update_time" property="updateTime" />
+        <result column="del_flag" property="delFlag" />
+        <result column="version" property="version" />
+        <result column="report_type" property="reportType" />
+        <result column="title" property="title" />
+        <result column="imgs" property="imgs" />
+        <result column="status" property="status" />
+        <result column="user_id" property="userId" />
+        <result column="camp_id" property="campId" />
+        <result column="username" property="username" />
+        <result column="user_code" property="userCode" />
+        <result column="remark" property="remark" />
+        <result column="create_by" property="createBy" />
+
+    </resultMap>
+    <select id="selectReportPage" resultType="com.kxs.system.api.vo.admin.camp.ReportCampPageVO">
+        select cr.* , c.title as camp_title
+        from kxs_camp_report cr
+        left join kxs_camp c on cr.camp_id = c.id
+        <where>
+            <if test="param.reportType != null">
+                and cr.report_type = #{param.reportType}
+            </if>
+            <if test="param.status != null">
+                and cr.status = #{param.status}
+            </if>
+            <if test="param.userCode != null">
+                and cr.user_code = #{param.userCode}
+            </if>
+        </where>
+    </select>
+
+</mapper>

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

@@ -20,6 +20,7 @@
         <result column="team_pos_num" property="teamPosNum" />
         <result column="team_gd_num" property="teamGdNum" />
         <result column="team_lkb_num" property="teamLkbNum" />
+        <result column="group_id" property="groupId" />
 
     </resultMap>
     <select id="getByPage" resultType="com.kxs.system.api.vo.kxsapp.camp.CampUserPageVO">

+ 0 - 9
kxs-user/kxs-user-api/src/main/java/com/kxs/user/api/feign/RemoteKxsUserService.java

@@ -158,15 +158,6 @@ public interface RemoteKxsUserService {
 	@GetExchange("/user-job/userTotalDebtSub")
 	void userTotalDebtSub(@RequestHeader(SecurityConstants.FROM) String from);
 
-	/**
-	 * 查询指定时间区间的大小盟主
-	 *
-	 * @param from  调用标志
-	 * @param startTime 开始时间
-	 */
-	@GetExchange("/leader/getDateBetweenLeaders")
-	R<List<KxsLeader>> getDateBetweenLeaders(@RequestParam("startTime") String startTime, @RequestHeader(SecurityConstants.FROM) String from);
-
 	/**
 	 * 校验支付密码
 	 *

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

@@ -22,16 +22,5 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("leader")
 public class KxsLeaderController {
 
-    private final KxsLeaderService kxsLeaderService;
-
-
-    @Inner
-    @GetMapping("getDateBetweenLeaders")
-    public R getDateBetweenLeaders(@RequestParam("startTime") String startTime){
-
-        return R.ok(kxsLeaderService.list(Wrappers.<KxsLeader>lambdaQuery()
-                .select(KxsLeader::getUserId, KxsLeader::getLeaderType)
-                .gt(KxsLeader::getLastBuyDate, startTime)));
-    }
 
 }