Przeglądaj źródła

训练营后台接口

mac 2 lat temu
rodzic
commit
72a1e4284c

+ 3 - 3
kxs-common/kxs-common-mybatis/src/main/java/com/kxs/common/mybatis/config/MybatisPlusMetaObjectHandler.java

@@ -30,8 +30,8 @@ public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
 
 		fillValIfNullByName("createTime", now, metaObject, false);
 		fillValIfNullByName("updateTime", now, metaObject, false);
-		fillValIfNullByName("createBy", getUserName(), metaObject, true);
-		fillValIfNullByName("updateBy", getUserName(), metaObject, true);
+		fillValIfNullByName("createBy", getUserName(), metaObject, false);
+		fillValIfNullByName("updateBy", getUserName(), metaObject, false);
 
 		// 删除标记自动填充
 		fillValIfNullByName("delFlag", CommonConstants.STATUS_NORMAL, metaObject, true);
@@ -41,7 +41,7 @@ public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {
 	public void updateFill(MetaObject metaObject) {
 		log.debug("mybatis plus start update fill ....");
 		fillValIfNullByName("updateTime", LocalDateTime.now(), metaObject, false);
-		fillValIfNullByName("updateBy", getUserName(), metaObject, true);
+		fillValIfNullByName("updateBy", getUserName(), metaObject, false);
 	}
 
 	/**

+ 5 - 1
kxs-gateway/src/main/java/com/kxs/gateway/api/filter/RequestDecoderFilter.java

@@ -1,6 +1,7 @@
 package com.kxs.gateway.api.filter;
 
 import cn.hutool.core.text.CharSequenceUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.symmetric.AES;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
@@ -217,7 +218,10 @@ public class RequestDecoderFilter extends AbstractGatewayFilterFactory<Object> {
                     String finalKey = key;
                     values.forEach(v -> parameters.add(finalKey, URLEncoder.encode(String.valueOf(v), StandardCharsets.UTF_8)));
                 } else {
-                    parameters.add(key, URLEncoder.encode(String.valueOf(value), StandardCharsets.UTF_8));
+                    //过滤空字符串转为null
+                    if(StrUtil.isNotEmpty(String.valueOf(value))){
+                        parameters.add(key, URLEncoder.encode(String.valueOf(value), StandardCharsets.UTF_8));
+                    }
                 }
             });
 //			log.info("GET解密后数据 :{}", parameters);

+ 18 - 5
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCamp.java

@@ -5,12 +5,11 @@ 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.annotation.*;
 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;
 
@@ -57,7 +56,9 @@ public class KxsCamp extends Model<KxsCamp> implements Serializable {
      * 删除标记,0未删除,1已删除
      */
     @Schema(description = "删除标记,0未删除,1已删除")
-    private Integer delFlag;
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private String delFlag;
 
 
     /**
@@ -78,6 +79,7 @@ public class KxsCamp extends Model<KxsCamp> implements Serializable {
      * 期数
      */
     @Schema(description = "期数")
+    @NotBlank(message = "期数不能为空")
     private String campNum;
 
 
@@ -85,13 +87,22 @@ public class KxsCamp extends Model<KxsCamp> implements Serializable {
      * 活动类型
      */
     @Schema(description = "活动类型")
+    @NotBlank(message = "活动类型不能为空")
     private String campType;
 
+    /**
+     * 活动图片
+     */
+    @Schema(description = "活动图片")
+    @NotBlank(message = "活动图片不能为空")
+    private String picUrl;
+
 
     /**
      * 发起人用户ID
      */
     @Schema(description = "发起人用户ID")
+    @NotNull(message = "发起人用户ID不能为空")
     private Integer createUserId;
 
 
@@ -155,6 +166,7 @@ public class KxsCamp extends Model<KxsCamp> implements Serializable {
      * 创建人
      */
     @Schema(description = "创建人")
+    @TableField(fill = FieldFill.INSERT)
     private String createBy;
 
 
@@ -162,6 +174,7 @@ public class KxsCamp extends Model<KxsCamp> implements Serializable {
      * 更新人
      */
     @Schema(description = "更新人")
+    @TableField(fill = FieldFill.UPDATE)
     private String updateBy;
 
 

+ 10 - 5
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/model/KxsCampBonusLog.java

@@ -5,12 +5,11 @@ 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.annotation.*;
 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;
 
@@ -57,7 +56,9 @@ public class KxsCampBonusLog extends Model<KxsCampBonusLog> implements Serializa
      * 删除标记,0未删除,1已删除
      */
     @Schema(description = "删除标记,0未删除,1已删除")
-    private Integer delFlag;
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private String delFlag;
 
 
     /**
@@ -71,6 +72,7 @@ public class KxsCampBonusLog extends Model<KxsCampBonusLog> implements Serializa
      * 操作金额
      */
     @Schema(description = "操作金额")
+    @NotNull(message = "操作金额不能为空")
     private BigDecimal amount;
 
 
@@ -92,6 +94,7 @@ public class KxsCampBonusLog extends Model<KxsCampBonusLog> implements Serializa
      * 日志类型 add新增 sub减少
      */
     @Schema(description = "日志类型 add新增 sub减少")
+    @NotBlank(message = "操作类型不能为空")
     private String kind;
 
 
@@ -120,6 +123,7 @@ public class KxsCampBonusLog extends Model<KxsCampBonusLog> implements Serializa
      * 训练营ID
      */
     @Schema(description = "训练营ID")
+    @NotNull(message = "训练营ID不能为空")
     private Integer campId;
 
 
@@ -134,6 +138,7 @@ public class KxsCampBonusLog extends Model<KxsCampBonusLog> implements Serializa
      * 操作人
      */
     @Schema(description = "操作人")
+    @NotBlank(message = "操作人不能为空")
     private String createBy;
 
 

+ 52 - 0
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/CampUserExcelVO.java

@@ -0,0 +1,52 @@
+package com.kxs.system.api.vo.admin;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.pig4cloud.plugin.excel.annotation.ExcelLine;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+
+/**
+ * 训练营导入用户 对应的实体
+ *
+ * @author 没秃顶的码农
+ * @date 2024-04-09
+ */
+@Data
+@ColumnWidth(30)
+public class CampUserExcelVO implements Serializable {
+
+	@Serial
+	private static final long serialVersionUID = 1L;
+
+	/**
+	 * 导入时候回显行号
+	 */
+	@ExcelLine
+	@ExcelIgnore
+	private Long lineNum;
+
+	/**
+	 * 活动ID
+	 */
+	@NotNull(message = "活动ID不能为空")
+	@ExcelProperty("活动ID")
+	private Integer campId;
+
+	/**
+	 * 创客编号
+	 */
+	@NotBlank(message = "创客编号不能为空")
+	@ExcelProperty("创客编号")
+	private String userCode;
+
+
+
+}

+ 1 - 1
kxs-system/kxs-system-api/src/main/java/com/kxs/system/api/vo/admin/RoleExcelVO.java

@@ -13,7 +13,7 @@ import java.time.LocalDateTime;
 /**
  * 角色excel 对应的实体
  *
- * @author fxz
+ * @author 没秃顶的码农
  * @date 2022/3/21
  */
 @Data

+ 3 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/constant/enums/SysErrorTypeEnum.java

@@ -14,6 +14,9 @@ import lombok.RequiredArgsConstructor;
 public enum SysErrorTypeEnum {
 
 	USER_EMPTY(-1, "用户信息为空"), CLIENT_NULL(-1, "客户端查询异常,请检查数据库链接"),
+	NOT_DATA(0, "数据为空"),
+	IMPORT_EMPTY(-1, "导入数据为空"),
+	PARAM_ERROR(0, "参数异常"),
 
 	SYS_PARAM_DELETE_SYSTEM(-1, "系统内置参数不能删除"), SYS_DICT_DELETE_SYSTEM(-1, "系统内置字典不允许删除"),
 	SYS_MENU_DELETE_EXISTING(-1, "菜单存在下级节点 删除失败"), SYS_USER_USERNAME_EXISTING(-1, "用户名已存在"),

+ 39 - 16
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/controller/admin/SysCampController.java

@@ -4,10 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kxs.common.core.util.R;
 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.biz.service.KxsCampBonusLogService;
 import com.kxs.system.biz.service.KxsCampService;
 import com.kxs.system.biz.service.KxsCampUserService;
+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.util.List;
@@ -40,7 +48,8 @@ public class SysCampController {
      * @return 训练营-列表
      */
     @GetMapping("/page")
-    public R page(Page<KxsCamp> page, KxsCamp param) {
+    public R page(Page<KxsCamp> page, @ParameterObject KxsCamp param) {
+
         return R.ok(kxsCampService.page(page, new QueryWrapper<>(param)));
     }
 
@@ -52,9 +61,10 @@ public class SysCampController {
      * @return 训练营-新增
      */
     @PostMapping("/add")
-    public R add(@RequestBody KxsCamp param) {
+//    @PreAuthorize("@pms.hasPermission('sys_camp_add')")
+    public R add(@RequestBody @Valid KxsCamp param) {
 
-        return R.ok(kxsCampService.save(param));
+        return kxsCampService.addData(param);
     }
 
 
@@ -65,32 +75,38 @@ public class SysCampController {
      * @return 训练营-编辑
      */
     @PostMapping("/update")
-    public R update(@RequestBody UpdateDTO param) {
-        return R.ok(kxsCampService.save(param));
+//    @PreAuthorize("@pms.hasPermission('sys_camp_edit')")
+    public R update(@RequestBody @Valid KxsCamp param) {
+
+        return kxsCampService.updateData(param);
     }
 
 
     /**
      * 训练营-删除
      *
-     * @param idList 主键ID结合
+     * @param id 主键ID
      * @return 训练营-删除
      */
-    @DeleteMapping()
-    public R removeById(@RequestParam("idList") List<Integer> idList) {
-        return R.ok(kxsCampService.removeByIds(idList));
+    @DeleteMapping("removeById/{id}")
+//    @PreAuthorize("@pms.hasPermission('sys_camp_remove')")
+    public R removeById(@PathVariable("id") Integer id) {
+
+        return R.ok(kxsCampService.removeById(id));
     }
 
 
     /**
      * 训练营-添加创客
      *
-     * @param param 实体对象
+     * @param campUserExcelVOList 导入对象
      * @return 训练营-添加创客
      */
-    @PostMapping("/addUser")
-    public R addUser(@RequestBody AddUserDTO param) {
-        return R.ok(kxsCampUserService.save(param));
+    @PostMapping("/importUser")
+//    @PreAuthorize("@pms.hasPermission('sys_camp_add_user')")
+    public R importUser(@RequestExcel List<CampUserExcelVO> campUserExcelVOList, BindingResult bindingResult) {
+
+        return kxsCampService.importUserData(campUserExcelVOList, bindingResult);
     }
 
 
@@ -101,8 +117,10 @@ public class SysCampController {
      * @return 训练营-增减奖金池
      */
     @PostMapping("/changeBonus")
-    public R changeBonus(@RequestBody ChangeBonusDTO param) {
-        return R.ok(kxsCampBonusLogService.save(param));
+//    @PreAuthorize("@pms.hasPermission('sys_camp_change_bonus')")
+    public R changeBonus(@RequestBody @Valid KxsCampBonusLog param) {
+
+        return kxsCampBonusLogService.changeBonus(param);
     }
 
 
@@ -114,7 +132,12 @@ public class SysCampController {
      * @return 训练营-扣除记录
      */
     @GetMapping("/pageLog")
-    public R pageLog(Page<SysCampPageLogVO> page, SysCampPageLogDTO param) {
+//    @PreAuthorize("@pms.hasPermission('sys_camp_change_list')")
+    public R pageLog(Page<KxsCampBonusLog> page, @ParameterObject KxsCampBonusLog param) {
+
+        if(param.getCampId() == null){
+            return R.failed("训练营ID不能为空");
+        }
         return R.ok(kxsCampBonusLogService.page(page, new QueryWrapper<>(param)));
     }
 

+ 2 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampBonusLogService.java

@@ -1,6 +1,7 @@
 package com.kxs.system.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.common.core.util.R;
 import com.kxs.system.api.model.KxsCampBonusLog;
 
 /**
@@ -11,5 +12,6 @@ import com.kxs.system.api.model.KxsCampBonusLog;
  */
 public interface KxsCampBonusLogService extends IService<KxsCampBonusLog> {
 
+    R changeBonus(KxsCampBonusLog param);
 }
 

+ 29 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/KxsCampService.java

@@ -1,7 +1,12 @@
 package com.kxs.system.biz.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.kxs.common.core.util.R;
 import com.kxs.system.api.model.KxsCamp;
+import com.kxs.system.api.vo.admin.CampUserExcelVO;
+import org.springframework.validation.BindingResult;
+
+import java.util.List;
 
 /**
  * 训练营(KxsCamp)表服务接口
@@ -11,5 +16,29 @@ import com.kxs.system.api.model.KxsCamp;
  */
 public interface KxsCampService extends IService<KxsCamp> {
 
+    /**
+     * 添加数据
+     *
+     * @param param 参数
+     * @return {@link R}
+     */
+    R addData(KxsCamp param);
+
+    /**
+     * 更新数据
+     *
+     * @param param 参数
+     * @return {@link R}
+     */
+    R updateData(KxsCamp param);
+
+    /**
+     * 导入用户数据
+     *
+     * @param campUserExcelVOList 用户 Excel
+     * @param bindingResult       绑定结果
+     * @return {@link R}
+     */
+    R importUserData(List<CampUserExcelVO> campUserExcelVOList, BindingResult bindingResult);
 }
 

+ 37 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampBonusLogServiceImpl.java

@@ -1,10 +1,19 @@
 package com.kxs.system.biz.service.impl;
 
+import cn.hutool.core.util.NumberUtil;
 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.biz.service.KxsCampBonusLogService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
 
 /**
  * 训练营奖金池日志表(KxsCampBonusLog)表服务实现类
@@ -13,7 +22,35 @@ import org.springframework.stereotype.Service;
  * @since 2024-04-08 15:44:02
  */
 @Service("kxsCampBonusLogService")
+@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);
+
+        return R.ok();
+    }
 }
 

+ 115 - 0
kxs-system/kxs-system-biz/src/main/java/com/kxs/system/biz/service/impl/KxsCampServiceImpl.java

@@ -1,10 +1,32 @@
 package com.kxs.system.biz.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 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.exception.GlobalCustomerException;
+import com.kxs.common.core.util.R;
+import com.kxs.common.core.util.RetOps;
+import com.kxs.system.api.model.KxsCampUser;
+import com.kxs.system.api.vo.admin.CampUserExcelVO;
+import com.kxs.system.biz.constant.enums.SysErrorTypeEnum;
 import com.kxs.system.biz.mapper.KxsCampMapper;
 import com.kxs.system.api.model.KxsCamp;
+import com.kxs.system.biz.mapper.KxsCampUserMapper;
 import com.kxs.system.biz.service.KxsCampService;
+import com.kxs.user.api.feign.RemoteKxsUserService;
+import com.kxs.user.api.model.KxsUser;
+import com.pig4cloud.plugin.excel.vo.ErrorMessage;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.validation.BindingResult;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 
 /**
  * 训练营(KxsCamp)表服务实现类
@@ -13,7 +35,100 @@ import org.springframework.stereotype.Service;
  * @since 2024-04-08 15:44:02
  */
 @Service("kxsCampService")
+@RequiredArgsConstructor
 public class KxsCampServiceImpl extends ServiceImpl<KxsCampMapper, KxsCamp> implements KxsCampService {
 
+    private final RemoteKxsUserService remoteKxsUserService;
+
+    private final KxsCampUserMapper kxsCampUserMapper;
+
+    @Override
+    public R addData(KxsCamp param) {
+
+        R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getCreateUserId(), SecurityConstants.FROM_IN);
+        KxsUser user = RetOps.of(kxsUserR)
+                .getData()
+                .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
+
+        param.setCreateUsername(user.getUsername());
+        param.setCreateCode(user.getUserCode());
+
+        return R.ok(baseMapper.insert(param));
+    }
+
+    @Override
+    public R updateData(KxsCamp param) {
+
+        if(param.getId() == null){
+            return R.failed(SysErrorTypeEnum.PARAM_ERROR.getDescription());
+        }
+        KxsCamp kxsCamp = baseMapper.selectById(param.getId());
+        if(kxsCamp == null){
+            return R.failed(SysErrorTypeEnum.NOT_DATA.getDescription());
+        }
+
+        R<KxsUser> kxsUserR = remoteKxsUserService.loadUserById(param.getCreateUserId(), SecurityConstants.FROM_IN);
+        KxsUser user = RetOps.of(kxsUserR)
+                .getData()
+                .orElseThrow(() -> new GlobalCustomerException(ErrorTypeEnum.USER_NOT_FOUND.getDescription()));
+
+        param.setCreateUsername(user.getUsername());
+        param.setCreateCode(user.getUserCode());
+
+        return R.ok(baseMapper.updateById(param));
+    }
+
+    @Override
+    public R importUserData(List<CampUserExcelVO> campUserExcelVOList, BindingResult bindingResult) {
+
+        if (campUserExcelVOList.isEmpty()) {
+            return R.failed(SysErrorTypeEnum.IMPORT_EMPTY.getDescription());
+        }
+
+
+        // 通用校验获取失败的数据
+        List<ErrorMessage> errorMessageList = (List<ErrorMessage>) bindingResult.getTarget();
+        // 执行数据插入操作
+        for (CampUserExcelVO excel : campUserExcelVOList) {
+            Set<String> errorMsg = new HashSet<>();
+            //查询用户
+            R<KxsUser> kxsUserR = remoteKxsUserService.loadUserByCode(excel.getUserCode(), SecurityConstants.FROM_IN);
+            KxsUser user = RetOps.of(kxsUserR)
+                    .getData()
+                    .orElse(null);
+            KxsCamp kxsCamp = baseMapper.selectById(excel.getCampId());
+            if(kxsCamp == null){
+                return R.failed(excel.getCampId() + "训练营编号不存在,请重新上传!");
+            }
+            if (user == null) {
+                errorMsg.add(excel.getUserCode() + "创客未找到!");
+            }
+            //判断创客是否加入
+            KxsCampUser kxsCampUser = kxsCampUserMapper.selectOne(Wrappers.<KxsCampUser>lambdaQuery()
+                    .eq(KxsCampUser::getCampId, excel.getCampId())
+                    .eq(KxsCampUser::getUserId, user.getId()));
+            if(kxsCampUser != null){
+                errorMsg.add(excel.getUserCode() + "已在训练营!");
+            }
+
+            // 数据合法情况
+            if (CollUtil.isEmpty(errorMsg)) {
+                KxsCampUser campUser = new KxsCampUser();
+                campUser.setCampId(excel.getCampId());
+                campUser.setUserId(user.getId());
+                campUser.setUsername(user.getUsername());
+                campUser.setUserCode(user.getUserCode());
+                kxsCampUserMapper.insert(campUser);
+            }
+            else {
+                // 数据不合法
+                errorMessageList.add(new ErrorMessage(excel.getLineNum(), errorMsg));
+            }
+        }
+        if (CollUtil.isNotEmpty(errorMessageList)) {
+            return R.failed(JSON.toJSONString(errorMessageList));
+        }
+        return R.ok();
+    }
 }
 

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

@@ -23,6 +23,7 @@
         <result column="create_by" property="createBy" />
         <result column="update_by" property="updateBy" />
         <result column="remark" property="remark" />
+        <result column="pic_url" property="picUrl" />
 
     </resultMap>