重写数据集相关接口,新增Excel导入相关接口

main
whb 7 months ago
parent 69f13908ec
commit e09853e7e9

@ -90,6 +90,11 @@
<artifactId>jsch</artifactId>
<version>${jsch.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.2.1</version>
</dependency>
</dependencies>
</project>

@ -0,0 +1,96 @@
package com.gccloud.dataroom.core.module.manage.controller;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gccloud.common.permission.ApiPermission;
import com.gccloud.common.utils.JSON;
import com.gccloud.common.vo.R;
import com.gccloud.dataroom.core.module.manage.dao.NeUploadExcelDao;
import com.gccloud.dataroom.core.module.manage.dto.DatasetEntityDTO;
import com.gccloud.dataroom.core.module.manage.entity.StuUploadExcelUser;
import com.gccloud.dataroom.core.utils.DemoDataListener;
import com.gccloud.dataset.constant.DatasetConstant;
import com.gccloud.dataset.dto.DatasetDTO;
import com.gccloud.dataset.entity.DatasetEntity;
import com.gccloud.dataset.service.IBaseDataSetService;
import com.gccloud.dataset.service.IDatasetLabelService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;
/**
* @author 17803
* @date 2024-09-03 9:35
*/
@Api(tags = "新数据集")
@RestController
@RequestMapping("/newDataset")
public class NeUploadExcelController {
@Resource
private IDatasetLabelService datasetLabelService;
@Autowired
private NeUploadExcelDao neUploadExcelDao;
@Autowired
private IBaseDataSetService dataSetService;
@ApiOperation("新增Excel")
@PostMapping("/newAdd")
@ApiPermission(permissions = {DatasetConstant.Permission.Dataset.ADD})
@Transactional(rollbackFor = Exception.class)
public R<String> newAdd(String datasetDTO, @RequestParam("file") @RequestPart MultipartFile file) throws IOException {
DatasetDTO datasetByJson = JSON.parseObject(datasetDTO, DatasetDTO.class);
// IBaseDataSetService dataSetService = dataSetServiceFactory.build(datasetByJson.getDatasetType());
String id = dataSetService.add(datasetByJson);
//存储excel数据 根据id关联
// 这里 需要指定读用哪个class去读然后读取第一个sheet 文件流会自动关闭
EasyExcel.read(file.getInputStream(), StuUploadExcelUser.class,
new DemoDataListener(neUploadExcelDao, datasetByJson.getRemark(), id)).sheet().doRead();
// 保存与标签的关联关系
List<String> labelIds = datasetByJson.getLabelIds();
if (labelIds == null || labelIds.isEmpty()) {
return R.success(id);
}
datasetLabelService.addByDatasetId(id, labelIds);
return R.success(id);
}
@ApiOperation("新详情")
@GetMapping("/NewInfo")
@ApiPermission(permissions = {DatasetConstant.Permission.Dataset.VIEW})
public R<DatasetEntityDTO> NewInfo(String id,Integer index,Integer size) {
DatasetEntity datasetEntity = dataSetService.getById(id);
DatasetEntityDTO datasetEntityDTO = new DatasetEntityDTO();
BeanUtils.copyProperties(datasetEntity,datasetEntityDTO);
IPage page = new Page(index,size);
neUploadExcelDao.selectPage(page, null);
datasetEntityDTO.setUploadExcelList(page.getRecords());
return R.success(datasetEntityDTO);
}
}

@ -0,0 +1,97 @@
package com.gccloud.dataroom.core.module.manage.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.gccloud.common.permission.ApiPermission;
import com.gccloud.common.service.ITreeService;
import com.gccloud.common.utils.BeanConvertUtils;
import com.gccloud.common.vo.R;
import com.gccloud.dataroom.core.module.manage.dao.NewCategoryDao;
import com.gccloud.dataroom.core.module.manage.dto.CategorySearchDTO;
import com.gccloud.dataroom.core.module.manage.entity.CategoryEntity;
import com.gccloud.dataroom.core.module.manage.service.NewCategoryService;
import com.gccloud.dataset.constant.DatasetConstant;
import com.gccloud.dataset.vo.CategoryVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import static com.gccloud.dataroom.core.module.map.service.IDataRoomMapService.SUPER_PARENT_ID;
/**
* @author 17803
* @date 2024-09-02 16:01
*/
@Api(tags = "新版数据集")
@RestController
@RequestMapping("/category")
@ConditionalOnProperty(prefix = "gc.starter.dataset.component", name = "DatasetCategoryController", havingValue = "DatasetCategoryController", matchIfMissing = true)
public class NewCategoryController {
@Autowired
private NewCategoryService categoryService;
@ApiOperation("新版依据类型查询对应的种类树")
@GetMapping("/queryTreeListByUserId")
@ApiPermission(permissions = {DatasetConstant.Permission.Dataset.CATEGORY_VIEW})
public R<List<CategoryVO>> queryTreeListByUserId(CategorySearchDTO searchDTO) {
List<CategoryVO> tree = categoryService.getTree(searchDTO);
return R.success(tree);
}
@ApiOperation("新增数据集")
@PostMapping("/addDataSource")
@ApiPermission(permissions = {DatasetConstant.Permission.Dataset.CATEGORY_EDIT})
public R<String> addDataSource(@RequestBody CategoryEntity categoryEntity) {
String id = categoryService.add(categoryEntity);
return R.success(id);
}
@ApiOperation("修改数据集")
@PostMapping("/updateDataSource")
@ApiPermission(permissions = {DatasetConstant.Permission.Dataset.CATEGORY_EDIT})
public R<Void> updateDataSource(@RequestBody CategoryEntity categoryEntity) {
categoryService.update(categoryEntity);
return R.success();
}
@ApiOperation("删除数据集")
@PostMapping("/deleteDataSource/{id}")
@ApiPermission(permissions = {DatasetConstant.Permission.Dataset.CATEGORY_EDIT})
public R<Void> deleteDataSource(@PathVariable String id) {
categoryService.delete(id);
return R.success();
}
@ApiOperation("名称查重数据集")
@PostMapping("/checkRepeatDataSource")
@ApiPermission(permissions = {DatasetConstant.Permission.Dataset.CATEGORY_VIEW})
public R<Boolean> checkRepeatDataSource(@RequestBody CategoryEntity entity) {
Boolean flag = categoryService.checkNameRepeat(entity);
return R.success(flag);
}
}

@ -0,0 +1,20 @@
package com.gccloud.dataroom.core.module.manage.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gccloud.dataroom.core.module.manage.entity.CategoryEntity;
import com.gccloud.dataroom.core.module.manage.entity.StuUploadExcelUser;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* @author 17803
* @date 2024-09-03 9:32
*/
@Mapper
public interface NeUploadExcelDao extends BaseMapper<StuUploadExcelUser> {
//批量导入
void insertBatch(List<StuUploadExcelUser> cachedDataList);
}

@ -0,0 +1,18 @@
package com.gccloud.dataroom.core.module.manage.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.gccloud.dataroom.core.module.manage.entity.CategoryEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* @author 17803
* @date 2024-09-02 16:15
*/
@Mapper
public interface NewCategoryDao extends BaseMapper<CategoryEntity> {
}

@ -0,0 +1,15 @@
package com.gccloud.dataroom.core.module.manage.dto;
import lombok.Data;
/**
* @author 17803
* @date 2024-09-02 16:10
*/
@Data
public class CategorySearchDTO extends com.gccloud.dataset.dto.CategorySearchDTO {
private String userId;
}

@ -0,0 +1,15 @@
package com.gccloud.dataroom.core.module.manage.dto;
import lombok.Data;
/**
* @author 17803
* @date 2024-09-03 9:38
*/
@Data
public class DatasetDTO extends com.gccloud.dataset.dto.DatasetDTO {
}

@ -0,0 +1,21 @@
package com.gccloud.dataroom.core.module.manage.dto;
import com.gccloud.dataroom.core.module.manage.entity.StuUploadExcelUser;
import com.gccloud.dataset.entity.DatasetEntity;
import lombok.Data;
import java.util.List;
/**
* @author 17803
* @date 2024-09-03 11:08
*/
@Data
public class DatasetEntityDTO extends DatasetEntity {
private List<StuUploadExcelUser> uploadExcelList;
}

@ -0,0 +1,15 @@
package com.gccloud.dataroom.core.module.manage.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* @author 17803
* @date 2024-09-02 16:11
*/
@Data
@TableName("ds_category_tree")
public class CategoryEntity extends com.gccloud.dataset.entity.CategoryEntity {
private String userId;
}

@ -0,0 +1,586 @@
package com.gccloud.dataroom.core.module.manage.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* excel
*
* @author whb
* stu_upload_excel_user
*/
@Data
@TableName("stu_upload_excel_user")
public class StuUploadExcelUser {
@ApiModelProperty("id")
private Integer id;
@ApiModelProperty("步骤一 a")
private String stepOneA;
@ApiModelProperty("步骤一 b")
@ExcelProperty(index = 0)
private String stepOneB;
@ApiModelProperty("步骤一 c")
@ExcelProperty(index = 1)
private String stepOneC;
@ApiModelProperty("步骤一 d")
@ExcelProperty(index = 2)
private String stepOneD;
@ApiModelProperty("4")
@ExcelProperty(index = 3)
private String stepTwoA;
@ApiModelProperty("5")
@ExcelProperty(index = 4)
private String stepTwoB;
@ApiModelProperty("6")
@ExcelProperty(index = 5)
private String stepTwoC;
@ApiModelProperty("7")
@ExcelProperty(index = 6)
private String stepThreeA;
@ApiModelProperty("8")
@ExcelProperty(index = 7)
private String stepThreeB;
@ApiModelProperty("9")
@ExcelProperty(index = 8)
private String stepThreeC;
@ApiModelProperty("10")
@ExcelProperty(index = 9)
private String stepThreeD;
@ApiModelProperty("11")
@ExcelProperty(index = 10)
private String stepFourA;
@ApiModelProperty("12")
@ExcelProperty(index = 11)
private String stepFourB;
@ApiModelProperty("13")
@ExcelProperty(index = 12)
private String stepFourC;
@ApiModelProperty("14")
@ExcelProperty(index = 13)
private String stepFourD;
@ApiModelProperty("15")
@ExcelProperty(index = 14)
private String stepFiveA;
@ApiModelProperty("16")
@ExcelProperty(index = 15)
private String stepFiveB;
@ApiModelProperty("17")
private String stepFiveC;
@ApiModelProperty("18")
private String stepFiveD;
@ApiModelProperty("19")
private String stepSixA;
@ApiModelProperty("20")
private String stepSixB;
@ApiModelProperty("21")
private String stepSixC;
@ApiModelProperty("22")
private String stepSixD;
@ApiModelProperty("23")
private String stepSevenA;
@ApiModelProperty("24")
private String stepSevenB;
@ApiModelProperty("25")
private String stepSevenC;
@ApiModelProperty("26")
private String stepSevenD;
@ApiModelProperty("27")
private String stepEightA;
@ApiModelProperty("28")
private String stepEightB;
@ApiModelProperty("29")
private String stepEightC;
@ApiModelProperty("30")
private String stepEightD;
@ApiModelProperty("31")
private String stepNineA;
@ApiModelProperty("32")
private String stepNineB;
@ApiModelProperty("33")
private String stepNineC;
@ApiModelProperty("正确次数")
private Integer successNumber;
@ApiModelProperty("用户ID")
private String userId;
@ApiModelProperty("提交状态(-1 未提交 1已提交")
private Integer subState;
@ApiModelProperty("归属模块(小模块)")
private String module;
@ApiModelProperty("34")
private String stepNineD;
@ApiModelProperty("35")
private String stepTenA;
@ApiModelProperty("36")
private String stepTenB;
@ApiModelProperty("37")
private String stepTenC;
@ApiModelProperty("38")
private String stepTenD;
@ApiModelProperty("39")
private String stepElevenA;
@ApiModelProperty("40")
private String stepElevenB;
@ApiModelProperty("41")
private String stepElevenC;
@ApiModelProperty("创建时间")
private Date createTime;
@ApiModelProperty("更新时间")
private Date updateTime;
@ApiModelProperty("错误字段")
private String errorField;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getStepOneA() {
return stepOneA;
}
public void setStepOneA(String stepOneA) {
this.stepOneA = stepOneA == null ? null : stepOneA.trim();
}
public String getStepOneB() {
return stepOneB;
}
public void setStepOneB(String stepOneB) {
this.stepOneB = stepOneB == null ? null : stepOneB.trim();
}
public String getStepOneC() {
return stepOneC;
}
public void setStepOneC(String stepOneC) {
this.stepOneC = stepOneC == null ? null : stepOneC.trim();
}
public String getStepOneD() {
return stepOneD;
}
public void setStepOneD(String stepOneD) {
this.stepOneD = stepOneD == null ? null : stepOneD.trim();
}
public String getStepTwoA() {
return stepTwoA;
}
public void setStepTwoA(String stepTwoA) {
this.stepTwoA = stepTwoA == null ? null : stepTwoA.trim();
}
public String getStepTwoB() {
return stepTwoB;
}
public void setStepTwoB(String stepTwoB) {
this.stepTwoB = stepTwoB == null ? null : stepTwoB.trim();
}
public String getStepTwoC() {
return stepTwoC;
}
public void setStepTwoC(String stepTwoC) {
this.stepTwoC = stepTwoC == null ? null : stepTwoC.trim();
}
public String getStepThreeA() {
return stepThreeA;
}
public void setStepThreeA(String stepThreeA) {
this.stepThreeA = stepThreeA == null ? null : stepThreeA.trim();
}
public String getStepThreeB() {
return stepThreeB;
}
public void setStepThreeB(String stepThreeB) {
this.stepThreeB = stepThreeB == null ? null : stepThreeB.trim();
}
public String getStepThreeC() {
return stepThreeC;
}
public void setStepThreeC(String stepThreeC) {
this.stepThreeC = stepThreeC == null ? null : stepThreeC.trim();
}
public String getStepThreeD() {
return stepThreeD;
}
public void setStepThreeD(String stepThreeD) {
this.stepThreeD = stepThreeD == null ? null : stepThreeD.trim();
}
public String getStepFourA() {
return stepFourA;
}
public void setStepFourA(String stepFourA) {
this.stepFourA = stepFourA == null ? null : stepFourA.trim();
}
public String getStepFourB() {
return stepFourB;
}
public void setStepFourB(String stepFourB) {
this.stepFourB = stepFourB == null ? null : stepFourB.trim();
}
public String getStepFourC() {
return stepFourC;
}
public void setStepFourC(String stepFourC) {
this.stepFourC = stepFourC == null ? null : stepFourC.trim();
}
public String getStepFourD() {
return stepFourD;
}
public void setStepFourD(String stepFourD) {
this.stepFourD = stepFourD == null ? null : stepFourD.trim();
}
public String getStepFiveA() {
return stepFiveA;
}
public void setStepFiveA(String stepFiveA) {
this.stepFiveA = stepFiveA == null ? null : stepFiveA.trim();
}
public String getStepFiveB() {
return stepFiveB;
}
public void setStepFiveB(String stepFiveB) {
this.stepFiveB = stepFiveB == null ? null : stepFiveB.trim();
}
public String getStepFiveC() {
return stepFiveC;
}
public void setStepFiveC(String stepFiveC) {
this.stepFiveC = stepFiveC == null ? null : stepFiveC.trim();
}
public String getStepFiveD() {
return stepFiveD;
}
public void setStepFiveD(String stepFiveD) {
this.stepFiveD = stepFiveD == null ? null : stepFiveD.trim();
}
public String getStepSixA() {
return stepSixA;
}
public void setStepSixA(String stepSixA) {
this.stepSixA = stepSixA == null ? null : stepSixA.trim();
}
public String getStepSixB() {
return stepSixB;
}
public void setStepSixB(String stepSixB) {
this.stepSixB = stepSixB == null ? null : stepSixB.trim();
}
public String getStepSixC() {
return stepSixC;
}
public void setStepSixC(String stepSixC) {
this.stepSixC = stepSixC == null ? null : stepSixC.trim();
}
public String getStepSixD() {
return stepSixD;
}
public void setStepSixD(String stepSixD) {
this.stepSixD = stepSixD == null ? null : stepSixD.trim();
}
public String getStepSevenA() {
return stepSevenA;
}
public void setStepSevenA(String stepSevenA) {
this.stepSevenA = stepSevenA == null ? null : stepSevenA.trim();
}
public String getStepSevenB() {
return stepSevenB;
}
public void setStepSevenB(String stepSevenB) {
this.stepSevenB = stepSevenB == null ? null : stepSevenB.trim();
}
public String getStepSevenC() {
return stepSevenC;
}
public void setStepSevenC(String stepSevenC) {
this.stepSevenC = stepSevenC == null ? null : stepSevenC.trim();
}
public String getStepSevenD() {
return stepSevenD;
}
public void setStepSevenD(String stepSevenD) {
this.stepSevenD = stepSevenD == null ? null : stepSevenD.trim();
}
public String getStepEightA() {
return stepEightA;
}
public void setStepEightA(String stepEightA) {
this.stepEightA = stepEightA == null ? null : stepEightA.trim();
}
public String getStepEightB() {
return stepEightB;
}
public void setStepEightB(String stepEightB) {
this.stepEightB = stepEightB == null ? null : stepEightB.trim();
}
public String getStepEightC() {
return stepEightC;
}
public void setStepEightC(String stepEightC) {
this.stepEightC = stepEightC == null ? null : stepEightC.trim();
}
public String getStepEightD() {
return stepEightD;
}
public void setStepEightD(String stepEightD) {
this.stepEightD = stepEightD == null ? null : stepEightD.trim();
}
public String getStepNineA() {
return stepNineA;
}
public void setStepNineA(String stepNineA) {
this.stepNineA = stepNineA == null ? null : stepNineA.trim();
}
public String getStepNineB() {
return stepNineB;
}
public void setStepNineB(String stepNineB) {
this.stepNineB = stepNineB == null ? null : stepNineB.trim();
}
public String getStepNineC() {
return stepNineC;
}
public void setStepNineC(String stepNineC) {
this.stepNineC = stepNineC == null ? null : stepNineC.trim();
}
public Integer getSuccessNumber() {
return successNumber;
}
public void setSuccessNumber(Integer successNumber) {
this.successNumber = successNumber;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId == null ? null : userId.trim();
}
public Integer getSubState() {
return subState;
}
public void setSubState(Integer subState) {
this.subState = subState;
}
public String getModule() {
return module;
}
public void setModule(String module) {
this.module = module == null ? null : module.trim();
}
public String getStepNineD() {
return stepNineD;
}
public void setStepNineD(String stepNineD) {
this.stepNineD = stepNineD == null ? null : stepNineD.trim();
}
public String getStepTenA() {
return stepTenA;
}
public void setStepTenA(String stepTenA) {
this.stepTenA = stepTenA == null ? null : stepTenA.trim();
}
public String getStepTenB() {
return stepTenB;
}
public void setStepTenB(String stepTenB) {
this.stepTenB = stepTenB == null ? null : stepTenB.trim();
}
public String getStepTenC() {
return stepTenC;
}
public void setStepTenC(String stepTenC) {
this.stepTenC = stepTenC == null ? null : stepTenC.trim();
}
public String getStepTenD() {
return stepTenD;
}
public void setStepTenD(String stepTenD) {
this.stepTenD = stepTenD == null ? null : stepTenD.trim();
}
public String getStepElevenA() {
return stepElevenA;
}
public void setStepElevenA(String stepElevenA) {
this.stepElevenA = stepElevenA == null ? null : stepElevenA.trim();
}
public String getStepElevenB() {
return stepElevenB;
}
public void setStepElevenB(String stepElevenB) {
this.stepElevenB = stepElevenB == null ? null : stepElevenB.trim();
}
public String getStepElevenC() {
return stepElevenC;
}
public void setStepElevenC(String stepElevenC) {
this.stepElevenC = stepElevenC == null ? null : stepElevenC.trim();
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public String getErrorField() {
return errorField;
}
public void setErrorField(String errorField) {
this.errorField = errorField == null ? null : errorField.trim();
}
}

@ -0,0 +1,13 @@
package com.gccloud.dataroom.core.module.manage.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gccloud.common.service.ISuperService;
import com.gccloud.dataroom.core.module.manage.entity.StuUploadExcelUser;
/**
* @author 17803
* @date 2024-09-03 9:32
*/
public interface NeUploadExcelService extends IService<StuUploadExcelUser> {
}

@ -0,0 +1,60 @@
package com.gccloud.dataroom.core.module.manage.service;
import com.gccloud.dataroom.core.module.manage.dto.CategorySearchDTO;
import com.gccloud.dataroom.core.module.manage.entity.CategoryEntity;
import com.gccloud.dataset.vo.CategoryVO;
import java.util.List;
/**
* @author 17803
* @date 2024-09-02 16:22
*/
public interface NewCategoryService {
/**
*
* @param searchDTO
* @return
*/
List<CategoryVO> getTree(CategorySearchDTO searchDTO);
// /**
// * 获取节点的所有子节点id包括子节点的子节点的...
// * @param id
// * @return
// */
// List<String> getAllChildrenId(String id);
/**
*
* @param entity
* @return
*/
String add(CategoryEntity entity);
/**
*
* @param entity
*/
void update(CategoryEntity entity);
/**
*
* @param id
*/
void delete(String id);
/**
*
* @param entity
* @return
*/
boolean checkNameRepeat(CategoryEntity entity);
}

@ -0,0 +1,20 @@
package com.gccloud.dataroom.core.module.manage.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gccloud.dataroom.core.module.basic.dao.DataRoomPagePreviewDao;
import com.gccloud.dataroom.core.module.basic.entity.PagePreviewEntity;
import com.gccloud.dataroom.core.module.manage.dao.NeUploadExcelDao;
import com.gccloud.dataroom.core.module.manage.entity.StuUploadExcelUser;
import com.gccloud.dataroom.core.module.manage.service.NeUploadExcelService;
import org.springframework.stereotype.Service;
/**
* @author 17803
* @date 2024-09-03 9:33
*/
@Service
public class NeUploadExcelServiceImpl extends ServiceImpl<NeUploadExcelDao, StuUploadExcelUser> implements NeUploadExcelService {
}

@ -0,0 +1,140 @@
package com.gccloud.dataroom.core.module.manage.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gccloud.common.exception.GlobalException;
import com.gccloud.common.service.ITreeService;
import com.gccloud.common.utils.BeanConvertUtils;
import com.gccloud.dataroom.core.module.manage.dao.NewCategoryDao;
import com.gccloud.dataroom.core.module.manage.dto.CategorySearchDTO;
import com.gccloud.dataroom.core.module.manage.entity.CategoryEntity;
import com.gccloud.dataroom.core.module.manage.service.NewCategoryService;
import com.gccloud.dataset.dao.CategoryDao;
import com.gccloud.dataset.service.ICategoryService;
import com.gccloud.dataset.vo.CategoryVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author 17803
* @date 2024-09-02 16:23
*/
@Service
public class NewCategoryServiceImpl extends ServiceImpl<NewCategoryDao, CategoryEntity> implements NewCategoryService {
/**
* id
*/
private static final String SUPER_PARENT_ID = "0";
/**
* id
*/
private static final String ID_SPLIT = ",";
@Resource
private ITreeService treeService;
@Override
public List<CategoryVO> getTree(CategorySearchDTO searchDTO) {
LambdaQueryWrapper<CategoryEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(searchDTO.getModuleCode()), CategoryEntity::getModuleCode, searchDTO.getModuleCode());
wrapper.eq(StringUtils.isNotBlank(searchDTO.getType()), CategoryEntity::getType, searchDTO.getType());
// 使用 or 将两个主要条件分开
wrapper.and(w ->
w.eq(CategoryEntity::getUserId, searchDTO.getUserId())
.or().eq(CategoryEntity::getId, 5)
);
List<CategoryEntity> list = this.list(wrapper);
List<CategoryVO> voList = BeanConvertUtils.convert(list, CategoryVO.class);
treeService.transToTree(voList);
voList.removeIf(categoryVO -> !SUPER_PARENT_ID.equals(categoryVO.getParentId()));
return voList;
}
// @Override
// public List<String> getAllChildrenId(String id) {
// CategoryEntity category = this.getById(id);
// String ids = category.getIds() + ID_SPLIT;
// LambdaQueryWrapper<CategoryEntity> wrapper = new LambdaQueryWrapper<>();
// wrapper.select(CategoryEntity::getId);
// wrapper.likeRight(CategoryEntity::getIds, ids);
// List<CategoryEntity> list = this.list(wrapper);
// return list.stream().map(CategoryEntity::getId).collect(Collectors.toList());
// }
@Override
public String add(CategoryEntity entity) {
boolean repeat = this.checkNameRepeat(entity);
if (repeat) {
throw new GlobalException("节点名称重复");
}
if (StringUtils.isBlank(entity.getParentId())) {
entity.setParentId(SUPER_PARENT_ID);
}
this.save(entity);
entity.setIds(entity.getId());
if (!SUPER_PARENT_ID.equals(entity.getParentId())) {
CategoryEntity parent = this.getById(entity.getParentId());
if (parent == null) {
throw new GlobalException("父节点不存在");
}
entity.setIds(parent.getIds() + ID_SPLIT + entity.getId());
}
this.updateById(entity);
return entity.getId();
}
@Override
public void update(CategoryEntity entity) {
boolean repeat = this.checkNameRepeat(entity);
if (repeat) {
throw new GlobalException("节点名称重复");
}
this.updateById(entity);
}
@Override
public void delete(String id) {
LambdaQueryWrapper<CategoryEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(CategoryEntity::getId);
queryWrapper.eq(CategoryEntity::getParentId, id);
if (this.list(queryWrapper).size() > 0) {
throw new GlobalException("该节点下存在子节点,无法删除");
}
this.removeById(id);
}
@Override
public boolean checkNameRepeat(CategoryEntity entity) {
LambdaQueryWrapper<CategoryEntity> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(CategoryEntity::getId);
queryWrapper.eq(CategoryEntity::getName, entity.getName());
queryWrapper.eq(StringUtils.isNotBlank(entity.getModuleCode()), CategoryEntity::getModuleCode, entity.getModuleCode());
queryWrapper.eq(StringUtils.isNotBlank(entity.getType()), CategoryEntity::getType, entity.getType());
queryWrapper.ne(StringUtils.isNotBlank(entity.getId()), CategoryEntity::getId, entity.getId());
queryWrapper.eq(CategoryEntity::getUserId, entity.getUserId());
if (StringUtils.isBlank(entity.getParentId())) {
queryWrapper.eq(CategoryEntity::getParentId, SUPER_PARENT_ID);
} else {
queryWrapper.eq(CategoryEntity::getParentId, entity.getParentId());
}
// NOTE 为了兼容mybatis-plus的升级这里不能使用count()方法
return this.list(queryWrapper).size() > 0;
}
}

@ -0,0 +1,149 @@
package com.gccloud.dataroom.core.utils;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.read.listener.ReadListener;
import com.alibaba.excel.util.ConverterUtils;
import com.alibaba.excel.util.ListUtils;
import com.gccloud.common.utils.JSON;
import com.gccloud.dataroom.core.module.manage.dao.NeUploadExcelDao;
import com.gccloud.dataroom.core.module.manage.entity.StuUploadExcelUser;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.Field;
import java.util.*;
// 有个很重要的点 DemoDataListener 不能被spring管理要每次读取excel都要new,然后里面用到spring可以构造方法传进去
@Slf4j
public class DemoDataListener implements ReadListener<StuUploadExcelUser> {
/**
* 5使100list 便
*
*/
private static final int BATCH_COUNT = 150;
private static final int MAX_COUNT = 1000; // 最大处理条数
/**
*
*/
private List<StuUploadExcelUser> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
/**
* DAOservice
*/
private NeUploadExcelDao demoDAO;
private String userId;
private String id;
private int processedCount = 0; // 记录已处理的数据条数
List<String> list = new ArrayList<String>();
/**
* 使spring,使Listenerspring
*
* @param demoDAO
*/
public DemoDataListener(NeUploadExcelDao demoDAO, String userId, String id) {
this.id = id;
this.userId = userId;
this.demoDAO = demoDAO;
}
/**
*
*
* @param headMap
* @param context
*/
@Override
public void invokeHead(Map<Integer, ReadCellData<?>> headMap, AnalysisContext context) {
// log.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
Map<Integer, String> integerStringMap = ConverterUtils.convertToStringMap(headMap, context);
//log.info("转换解析到的一条头数据:{}", integerStringMap);
Set<Integer> integers = integerStringMap.keySet();
for (Integer integer : integers) {
list.add(integerStringMap.get(integer));
}
// 如果想转成成 Map<Integer,String>
// 方案1 不要implements ReadListener 而是 extends AnalysisEventListener
// 方案2 调用 ConverterUtils.convertToStringMap(headMap, context) 自动会转换
}
/**
*
*
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(StuUploadExcelUser data, AnalysisContext context) {
// //log.info("解析到一条数据:{}", JSON.toJSONString(data));
// cachedDataList.add(data);
// // 达到BATCH_COUNT了需要去存储一次数据库防止数据几万条数据在内存容易OOM
//
// if (cachedDataList.size() >= BATCH_COUNT) {
// saveData();
// // 存储完成清理 list
// cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
// }
if (processedCount >= MAX_COUNT) {
// context.interrupt(); // 终止解析
return;
}
cachedDataList.add(data);
processedCount++;
if (cachedDataList.size() >= BATCH_COUNT || processedCount >= MAX_COUNT) {
saveData();
cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
}
}
/**
*
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
saveData();
log.info("所有数据解析完成!"+ ",当前线程:" + Thread.currentThread().getName());
}
/**
*
*/
private void saveData() {
cachedDataList.forEach(item->{
item.setUserId(userId);
item.setModule(id);
item.setStepOneA(JSON.toJSONString(list));
});
for (StuUploadExcelUser uploadExcelUser : cachedDataList) {
demoDAO.insert(uploadExcelUser);
}
//demoDAO.insertBatch(cachedDataList);
}
}

@ -0,0 +1,41 @@
<?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.gccloud.dataroom.core.module.manage.dao.NeUploadExcelDao">
<insert id="insertBatch" parameterType="java.util.List">
INSERT INTO stu_upload_excel_user (id, step_one_a, step_one_b, step_one_c, step_one_d,
step_two_a, step_two_b, step_two_c, step_three_a,
step_three_b, step_three_c, step_three_d, step_four_a,
step_four_b, step_four_c, step_four_d, step_five_a,
step_five_b, step_five_c, step_five_d, step_six_a,
step_six_b, step_six_c, step_six_d, step_seven_a,
step_seven_b, step_seven_c, step_seven_d, step_eight_a,
step_eight_b, step_eight_c, step_eight_d, step_nine_a,
step_nine_b, step_nine_c, success_number, user_id,
sub_state, module, step_nine_d, step_ten_a, step_ten_b,
step_ten_c, step_ten_d, step_eleven_a, step_eleven_b,
step_eleven_c, create_time, update_time, error_field)
VALUES
<foreach collection="list" item="item" index="index" separator=",">
(#{item.id,jdbcType=INTEGER}, #{item.stepOneA,jdbcType=VARCHAR}, #{item.stepOneB,jdbcType=VARCHAR},
#{item.stepOneC,jdbcType=VARCHAR}, #{item.stepOneD,jdbcType=VARCHAR}, #{item.stepTwoA,jdbcType=VARCHAR},
#{item.stepTwoB,jdbcType=VARCHAR}, #{item.stepTwoC,jdbcType=VARCHAR}, #{item.stepThreeA,jdbcType=VARCHAR},
#{item.stepThreeB,jdbcType=VARCHAR}, #{item.stepThreeC,jdbcType=VARCHAR}, #{item.stepThreeD,jdbcType=VARCHAR},
#{item.stepFourA,jdbcType=VARCHAR}, #{item.stepFourB,jdbcType=VARCHAR}, #{item.stepFourC,jdbcType=VARCHAR},
#{item.stepFourD,jdbcType=VARCHAR}, #{item.stepFiveA,jdbcType=VARCHAR}, #{item.stepFiveB,jdbcType=VARCHAR},
#{item.stepFiveC,jdbcType=VARCHAR}, #{item.stepFiveD,jdbcType=VARCHAR}, #{item.stepSixA,jdbcType=VARCHAR},
#{item.stepSixB,jdbcType=VARCHAR}, #{item.stepSixC,jdbcType=VARCHAR}, #{item.stepSixD,jdbcType=VARCHAR},
#{item.stepSevenA,jdbcType=VARCHAR}, #{item.stepSevenB,jdbcType=VARCHAR}, #{item.stepSevenC,jdbcType=VARCHAR},
#{item.stepSevenD,jdbcType=VARCHAR}, #{item.stepEightA,jdbcType=VARCHAR}, #{item.stepEightB,jdbcType=VARCHAR},
#{item.stepEightC,jdbcType=VARCHAR}, #{item.stepEightD,jdbcType=VARCHAR}, #{item.stepNineA,jdbcType=VARCHAR},
#{item.stepNineB,jdbcType=VARCHAR}, #{item.stepNineC,jdbcType=VARCHAR}, #{item.successNumber,jdbcType=INTEGER},
#{item.userId,jdbcType=VARCHAR}, #{item.subState,jdbcType=INTEGER}, #{item.module,jdbcType=VARCHAR},
#{item.stepNineD,jdbcType=VARCHAR}, #{item.stepTenA,jdbcType=VARCHAR}, #{item.stepTenB,jdbcType=VARCHAR},
#{item.stepTenC,jdbcType=VARCHAR}, #{item.stepTenD,jdbcType=VARCHAR}, #{item.stepElevenA,jdbcType=VARCHAR},
#{item.stepElevenB,jdbcType=VARCHAR}, #{item.stepElevenC,jdbcType=VARCHAR}, #{item.createTime,jdbcType=TIMESTAMP},
#{item.updateTime,jdbcType=TIMESTAMP}, #{item.errorField,jdbcType=VARCHAR})
</foreach>
</insert>
</mapper>
Loading…
Cancel
Save