|
|
|
@ -0,0 +1,345 @@
|
|
|
|
|
package io.renren.modules.resource.excel;
|
|
|
|
|
|
|
|
|
|
import com.alibaba.excel.context.AnalysisContext;
|
|
|
|
|
import com.alibaba.excel.event.AnalysisEventListener;
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
import io.renren.modules.resource.dto.ResourceDTO;
|
|
|
|
|
import io.renren.modules.resource.entity.AttrEntity;
|
|
|
|
|
import io.renren.modules.resource.service.ResourceService;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 导入资源
|
|
|
|
|
*/
|
|
|
|
|
public class ResourceExcelImportListener extends AnalysisEventListener<Map<Integer, String>> {
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(ResourceExcelImportListener.class);
|
|
|
|
|
private int BATCH_COUNT = Runtime.getRuntime().availableProcessors() * 10;
|
|
|
|
|
|
|
|
|
|
private int sheet = 1; // 读取excel sheet
|
|
|
|
|
|
|
|
|
|
private List<Map<String, Object>> deptList; // 部门信息
|
|
|
|
|
|
|
|
|
|
private ResourceService resourceService;
|
|
|
|
|
|
|
|
|
|
private List<Map<Integer, String>> list = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
Map<Integer, String> headMap = null;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* When analysis one row trigger invoke function.
|
|
|
|
|
*
|
|
|
|
|
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()}
|
|
|
|
|
* @param context analysis context
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void invoke(Map<Integer, String> data, AnalysisContext context) {
|
|
|
|
|
list.add(data);
|
|
|
|
|
if (list.size() > BATCH_COUNT) {
|
|
|
|
|
dealDate();
|
|
|
|
|
list.clear();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* if have something to do after all analysis
|
|
|
|
|
*
|
|
|
|
|
* @param context
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void doAfterAllAnalysed(AnalysisContext context) {
|
|
|
|
|
dealDate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
|
|
|
|
|
if (this.headMap == null) {
|
|
|
|
|
this.headMap = headMap;
|
|
|
|
|
}
|
|
|
|
|
logger.info("sheet:" + sheet + "解析到一条头数据:{}", JSON.toJSONString(headMap));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 处理数据
|
|
|
|
|
*/
|
|
|
|
|
private void dealDate() {
|
|
|
|
|
list.stream().map(index -> {
|
|
|
|
|
Optional<Map<String, Object>> deptOptional =
|
|
|
|
|
deptList.stream().filter(dept -> index.values().contains(dept.getOrDefault("name", "").toString())).findAny();
|
|
|
|
|
if (!deptOptional.isPresent()) {
|
|
|
|
|
logger.info("找不到部门:{}", index.toString());
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
ResourceDTO resourceDTO = new ResourceDTO();
|
|
|
|
|
switch (sheet) {
|
|
|
|
|
case 0: // 需要跳过前6行
|
|
|
|
|
resourceDTO = getResourceDTO(resourceDTO, index, 0, Long.valueOf(deptOptional.get().get("id").toString()));
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
resourceDTO = getResourceDTO(resourceDTO, index, 1, Long.valueOf(deptOptional.get().get("id").toString()));
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
resourceDTO = getResourceDTO(resourceDTO, index, 2, Long.valueOf(deptOptional.get().get("id").toString()));
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
resourceDTO = getResourceDTO(resourceDTO, index, 3, Long.valueOf(deptOptional.get().get("id").toString()));
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
logger.error("不支持该sheet");
|
|
|
|
|
}
|
|
|
|
|
return resourceDTO;
|
|
|
|
|
}).filter(index -> index != null && StringUtils.isNotEmpty(index.getName())).forEach(index -> {
|
|
|
|
|
resourceService.insertWithAttrs(index);
|
|
|
|
|
logger.info("完成导入:{}", index.getName());
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @param resourceDTO
|
|
|
|
|
* @return 获取导入对应参数
|
|
|
|
|
*/
|
|
|
|
|
private ResourceDTO getResourceDTO(ResourceDTO resourceDTO, Map<Integer, String> date, int sheet, Long deptId) {
|
|
|
|
|
List<AttrEntity> infoList = new ArrayList<>();
|
|
|
|
|
resourceDTO.setCreateDate(new Date());
|
|
|
|
|
|
|
|
|
|
switch (sheet) {
|
|
|
|
|
case 0: {
|
|
|
|
|
resourceDTO.setType("应用资源");
|
|
|
|
|
resourceDTO.setName(date.get(1));
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity1 = new AttrEntity();
|
|
|
|
|
attrEntity1.setAttrType("应用状态");
|
|
|
|
|
attrEntity1.setAttrValue(date.get(2));
|
|
|
|
|
infoList.add(attrEntity1); // 应用状态
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity2 = new AttrEntity();
|
|
|
|
|
attrEntity2.setAttrType("应用类型");
|
|
|
|
|
attrEntity2.setAttrValue(date.get(3));
|
|
|
|
|
infoList.add(attrEntity2); // 应用类型
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity3 = new AttrEntity();
|
|
|
|
|
attrEntity3.setAttrType("应用领域");
|
|
|
|
|
attrEntity3.setAttrValue(date.get(4));
|
|
|
|
|
infoList.add(attrEntity3); // 应用领域
|
|
|
|
|
|
|
|
|
|
resourceDTO.setDescription(date.get(5)); // 描述
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity4 = new AttrEntity();
|
|
|
|
|
attrEntity4.setAttrType("发布端");
|
|
|
|
|
attrEntity4.setAttrValue(date.get(6));
|
|
|
|
|
infoList.add(attrEntity4); // 发布端
|
|
|
|
|
|
|
|
|
|
resourceDTO.setDeptName(date.get(7));
|
|
|
|
|
resourceDTO.setDeptContacts(date.get(8)); // 部门联系人
|
|
|
|
|
resourceDTO.setDeptPhone(date.get(9)); // 部门联系人电话
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity5 = new AttrEntity();
|
|
|
|
|
attrEntity5.setAttrType("应用展示视频");
|
|
|
|
|
attrEntity5.setAttrValue(date.get(10));
|
|
|
|
|
infoList.add(attrEntity5); // 应用展示视频
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity6 = new AttrEntity();
|
|
|
|
|
attrEntity6.setAttrType("应用图片");
|
|
|
|
|
attrEntity6.setAttrValue(date.get(11));
|
|
|
|
|
infoList.add(attrEntity6); // 应用图片
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity7 = new AttrEntity();
|
|
|
|
|
attrEntity7.setAttrType("功能介绍");
|
|
|
|
|
attrEntity7.setAttrValue(date.get(12));
|
|
|
|
|
infoList.add(attrEntity7); // 功能介绍
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity8 = new AttrEntity();
|
|
|
|
|
attrEntity8.setAttrType("部署区域");
|
|
|
|
|
attrEntity8.setAttrValue(date.get(13));
|
|
|
|
|
infoList.add(attrEntity8); // 部署区域
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity9 = new AttrEntity();
|
|
|
|
|
attrEntity9.setAttrType("是否统一登录");
|
|
|
|
|
attrEntity9.setAttrValue(date.get(14));
|
|
|
|
|
infoList.add(attrEntity9); // 是否统一登录
|
|
|
|
|
|
|
|
|
|
resourceDTO.setLink(date.get(15)); // 访问地址
|
|
|
|
|
resourceDTO.setShareCondition(date.get(16)); // 共享条件
|
|
|
|
|
resourceDTO.setShareMode(date.get(17)); // 共享类型
|
|
|
|
|
resourceDTO.setShareType(null);
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity10 = new AttrEntity();
|
|
|
|
|
attrEntity10.setAttrType("等保定级");
|
|
|
|
|
attrEntity10.setAttrValue(date.get(18));
|
|
|
|
|
infoList.add(attrEntity10); // 等保定级
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity11 = new AttrEntity();
|
|
|
|
|
attrEntity11.setAttrType("是否等保备案");
|
|
|
|
|
attrEntity11.setAttrValue(date.get(19));
|
|
|
|
|
infoList.add(attrEntity11); // 是否等保备案
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity12 = new AttrEntity();
|
|
|
|
|
attrEntity12.setAttrType("服务商");
|
|
|
|
|
attrEntity12.setAttrValue(date.get(20));
|
|
|
|
|
infoList.add(attrEntity12); // 服务商
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity13 = new AttrEntity();
|
|
|
|
|
attrEntity13.setAttrType("服务商联系人");
|
|
|
|
|
attrEntity13.setAttrValue(date.get(21));
|
|
|
|
|
infoList.add(attrEntity13); // 服务商联系人
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity14 = new AttrEntity();
|
|
|
|
|
attrEntity14.setAttrType("服务商联系电话");
|
|
|
|
|
attrEntity14.setAttrValue(date.get(22));
|
|
|
|
|
infoList.add(attrEntity14); // 服务商联系人
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity15 = new AttrEntity();
|
|
|
|
|
attrEntity15.setAttrType("常见问题");
|
|
|
|
|
attrEntity15.setAttrValue(date.get(23));
|
|
|
|
|
infoList.add(attrEntity15); // 常见问题
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 1: {
|
|
|
|
|
resourceDTO.setType("组件服务");
|
|
|
|
|
resourceDTO.setName(date.get(1));
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity1 = new AttrEntity();
|
|
|
|
|
attrEntity1.setAttrType("算法类别");
|
|
|
|
|
attrEntity1.setAttrValue(date.get(2));
|
|
|
|
|
infoList.add(attrEntity1); // 算法类别
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity2 = new AttrEntity();
|
|
|
|
|
attrEntity2.setAttrType("是否免批");
|
|
|
|
|
attrEntity2.setAttrValue(date.get(3));
|
|
|
|
|
infoList.add(attrEntity2); // 算法类别
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity3 = new AttrEntity();
|
|
|
|
|
attrEntity3.setAttrType("使用方式");
|
|
|
|
|
attrEntity3.setAttrValue(date.get(4));
|
|
|
|
|
infoList.add(attrEntity3); // 使用方式
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity4 = new AttrEntity();
|
|
|
|
|
attrEntity4.setAttrType("部署位置");
|
|
|
|
|
attrEntity4.setAttrValue(date.get(5));
|
|
|
|
|
infoList.add(attrEntity4); // 部署位置
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity5 = new AttrEntity();
|
|
|
|
|
attrEntity5.setAttrType("应用领域");
|
|
|
|
|
attrEntity5.setAttrValue(date.get(6));
|
|
|
|
|
infoList.add(attrEntity5); // 应用领域
|
|
|
|
|
|
|
|
|
|
resourceDTO.setShareCondition(date.get(7)); // 共享条件
|
|
|
|
|
resourceDTO.setShareMode(date.get(8)); // 共享类型
|
|
|
|
|
resourceDTO.setShareType(null);
|
|
|
|
|
|
|
|
|
|
resourceDTO.setDescription(date.get(9));
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity6 = new AttrEntity();
|
|
|
|
|
attrEntity6.setAttrType("算法介绍视频");
|
|
|
|
|
attrEntity6.setAttrValue(date.get(10));
|
|
|
|
|
infoList.add(attrEntity5); // 应用领域
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity7 = new AttrEntity();
|
|
|
|
|
attrEntity7.setAttrType("服务商");
|
|
|
|
|
attrEntity7.setAttrValue(date.get(11));
|
|
|
|
|
infoList.add(attrEntity7); // 服务商
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity8 = new AttrEntity();
|
|
|
|
|
attrEntity8.setAttrType("服务商联系人");
|
|
|
|
|
attrEntity8.setAttrValue(date.get(12));
|
|
|
|
|
infoList.add(attrEntity8); // 服务商联系人
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity9 = new AttrEntity();
|
|
|
|
|
attrEntity9.setAttrType("服务商联系电话");
|
|
|
|
|
attrEntity9.setAttrValue(date.get(13));
|
|
|
|
|
infoList.add(attrEntity9); // 服务商联系人
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity10 = new AttrEntity();
|
|
|
|
|
attrEntity10.setAttrType("关联应用");
|
|
|
|
|
attrEntity10.setAttrValue(date.get(14));
|
|
|
|
|
infoList.add(attrEntity10); // 关联应用
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity11 = new AttrEntity();
|
|
|
|
|
attrEntity11.setAttrType("算法优势");
|
|
|
|
|
attrEntity11.setAttrValue(date.get(15));
|
|
|
|
|
infoList.add(attrEntity11); // 算法优势
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity12 = new AttrEntity();
|
|
|
|
|
attrEntity12.setAttrType("应用场景");
|
|
|
|
|
attrEntity12.setAttrValue(date.get(16));
|
|
|
|
|
infoList.add(attrEntity12); // 应用场景
|
|
|
|
|
|
|
|
|
|
resourceDTO.setLink(date.get(17));
|
|
|
|
|
resourceDTO.setApiMethodType(date.get(18));
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity13 = new AttrEntity();
|
|
|
|
|
attrEntity13.setAttrType("技术文档");
|
|
|
|
|
attrEntity13.setAttrValue(date.get(19));
|
|
|
|
|
infoList.add(attrEntity13); // 技术文档
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity14 = new AttrEntity();
|
|
|
|
|
attrEntity14.setAttrType("试用地址");
|
|
|
|
|
attrEntity14.setAttrValue(date.get(20));
|
|
|
|
|
infoList.add(attrEntity14); // 试用地址
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity15 = new AttrEntity();
|
|
|
|
|
attrEntity15.setAttrType("是否收费");
|
|
|
|
|
attrEntity15.setAttrValue(date.get(21));
|
|
|
|
|
infoList.add(attrEntity15); // 是否收费
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity16 = new AttrEntity();
|
|
|
|
|
attrEntity16.setAttrType("计费标准信息");
|
|
|
|
|
attrEntity16.setAttrValue(date.get(22));
|
|
|
|
|
infoList.add(attrEntity16); // 计费标准信息
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity17 = new AttrEntity();
|
|
|
|
|
attrEntity17.setAttrType("常见问题");
|
|
|
|
|
attrEntity17.setAttrValue(date.get(23));
|
|
|
|
|
infoList.add(attrEntity17); // 常见问题
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case 2: {
|
|
|
|
|
resourceDTO.setType("知识库");
|
|
|
|
|
resourceDTO.setName(date.get(1));
|
|
|
|
|
resourceDTO.setLink(date.get(2));
|
|
|
|
|
resourceDTO.setDescription(date.get(3));
|
|
|
|
|
|
|
|
|
|
Date createDate = new Date(Long.parseLong(date.get(5)));
|
|
|
|
|
resourceDTO.setCreateDate(createDate);
|
|
|
|
|
|
|
|
|
|
AttrEntity attrEntity = new AttrEntity();
|
|
|
|
|
attrEntity.setAttrType("文件类型");
|
|
|
|
|
attrEntity.setAttrValue(date.get(6));
|
|
|
|
|
|
|
|
|
|
infoList.add(attrEntity);
|
|
|
|
|
|
|
|
|
|
this.headMap.keySet().stream().skip(6).forEach(key -> { // 表头后6个
|
|
|
|
|
AttrEntity attrEntity_ = new AttrEntity();
|
|
|
|
|
attrEntity_.setAttrType(this.headMap.get(key));
|
|
|
|
|
attrEntity_.setAttrValue(date.get(key));
|
|
|
|
|
infoList.add(attrEntity_);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
case 3: {
|
|
|
|
|
resourceDTO.setType("基础设施");
|
|
|
|
|
resourceDTO.setName(date.get(1));
|
|
|
|
|
|
|
|
|
|
this.headMap.keySet().stream().skip(1).forEach(key -> { // 表头后1个
|
|
|
|
|
AttrEntity attrEntity = new AttrEntity();
|
|
|
|
|
attrEntity.setAttrType(this.headMap.get(key));
|
|
|
|
|
attrEntity.setAttrValue(date.get(key));
|
|
|
|
|
infoList.add(attrEntity);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
resourceDTO.setInfoList(infoList);
|
|
|
|
|
resourceDTO.setDelFlag(0);
|
|
|
|
|
resourceDTO.setDeptId(deptId); // 所属部门
|
|
|
|
|
return resourceDTO;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|