diff --git a/renren-admin/src/main/java/io/renren/modules/resource/entity/AttrEntity.java b/renren-admin/src/main/java/io/renren/modules/resource/entity/AttrEntity.java index 296d03ec..5b5ed667 100644 --- a/renren-admin/src/main/java/io/renren/modules/resource/entity/AttrEntity.java +++ b/renren-admin/src/main/java/io/renren/modules/resource/entity/AttrEntity.java @@ -10,188 +10,192 @@ import java.util.Date; /** * 资源属性表 * - * @author dg + * @author dg * @since 1.0 2022-04-13 */ @Data -@EqualsAndHashCode(callSuper=false) +@EqualsAndHashCode(callSuper = false) @TableName("tb_data_attr") -public class AttrEntity implements Serializable{ - private static final long serialVersionUID = 1L; +public class AttrEntity implements Serializable { + private static final long serialVersionUID = 1L; - @TableId - private Long id; - /** - * 资源ID,表tb_data_resource主键 - */ - private Long dataResourceId; - /** - * 属性类型 - */ - private String attrType; - /** - * 属性值 - */ - private String attrValue; - /** - * 删除标志:0:正常使用;1:已删除;9:其他 - */ - private Integer delFlag; - /** - * 创建人 - */ - @TableField(fill = FieldFill.INSERT) - private Long creator; - /** - * 创建时间 - */ - @TableField(fill = FieldFill.INSERT) - private Date createDate; - /** - * 修改人 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Long updater; - /** - * 更新时间 - */ - @TableField(fill = FieldFill.INSERT_UPDATE) - private Date updateDate; - private String note1; - private String note2; - private String note3; - private String note4; - private String note5; + @TableId + private Long id; + /** + * 资源ID,表tb_data_resource主键 + */ + private Long dataResourceId; + /** + * 属性类型 + */ + private String attrType; + /** + * 属性值 + */ + private String attrValue; + /** + * 删除标志:0:正常使用;1:已删除;9:其他 + */ + private Integer delFlag; + /** + * 创建人 + */ + @TableField(fill = FieldFill.INSERT) + private Long creator; + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createDate; + /** + * 修改人 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + private String note1; + private String note2; + private String note3; + private String note4; + private String note5; - public Long getId() { - return id; - } + public AttrEntity() { + this.delFlag = 0; + } - public void setId(Long id) { - this.id = id; - } + public Long getId() { + return id; + } - public Long getDataResourceId() { - return dataResourceId; - } + public void setId(Long id) { + this.id = id; + } - public void setDataResourceId(Long dataResourceId) { - this.dataResourceId = dataResourceId; - } + public Long getDataResourceId() { + return dataResourceId; + } - public String getAttrType() { - return attrType; - } + public void setDataResourceId(Long dataResourceId) { + this.dataResourceId = dataResourceId; + } - public void setAttrType(String attrType) { - this.attrType = attrType; - } + public String getAttrType() { + return attrType; + } - public String getAttrValue() { - return attrValue; - } + public void setAttrType(String attrType) { + this.attrType = attrType; + } - public void setAttrValue(String attrValue) { - this.attrValue = attrValue; - } + public String getAttrValue() { + return attrValue; + } - public Integer getDelFlag() { - return delFlag; - } + public void setAttrValue(String attrValue) { + this.attrValue = attrValue; + } - public void setDelFlag(Integer delFlag) { - this.delFlag = delFlag; - } + public Integer getDelFlag() { + return delFlag; + } - public Long getCreator() { - return creator; - } + public void setDelFlag(Integer delFlag) { + this.delFlag = delFlag; + } - public void setCreator(Long creator) { - this.creator = creator; - } + public Long getCreator() { + return creator; + } - public Date getCreateDate() { - return createDate; - } + public void setCreator(Long creator) { + this.creator = creator; + } - public void setCreateDate(Date createDate) { - this.createDate = createDate; - } + public Date getCreateDate() { + return createDate; + } - public Long getUpdater() { - return updater; - } + public void setCreateDate(Date createDate) { + this.createDate = createDate; + } - public void setUpdater(Long updater) { - this.updater = updater; - } + public Long getUpdater() { + return updater; + } - public Date getUpdateDate() { - return updateDate; - } + public void setUpdater(Long updater) { + this.updater = updater; + } - public void setUpdateDate(Date updateDate) { - this.updateDate = updateDate; - } + public Date getUpdateDate() { + return updateDate; + } - public String getNote1() { - return note1; - } + public void setUpdateDate(Date updateDate) { + this.updateDate = updateDate; + } - public void setNote1(String note1) { - this.note1 = note1; - } + public String getNote1() { + return note1; + } - public String getNote2() { - return note2; - } + public void setNote1(String note1) { + this.note1 = note1; + } - public void setNote2(String note2) { - this.note2 = note2; - } + public String getNote2() { + return note2; + } - public String getNote3() { - return note3; - } + public void setNote2(String note2) { + this.note2 = note2; + } - public void setNote3(String note3) { - this.note3 = note3; - } + public String getNote3() { + return note3; + } - public String getNote4() { - return note4; - } + public void setNote3(String note3) { + this.note3 = note3; + } - public void setNote4(String note4) { - this.note4 = note4; - } + public String getNote4() { + return note4; + } - public String getNote5() { - return note5; - } + public void setNote4(String note4) { + this.note4 = note4; + } - public void setNote5(String note5) { - this.note5 = note5; - } + public String getNote5() { + return note5; + } - @Override - public String toString() { - return "AttrEntity{" + - "id=" + id + - ", dataResourceId=" + dataResourceId + - ", attrType='" + attrType + '\'' + - ", attrValue='" + attrValue + '\'' + - ", delFlag=" + delFlag + - ", creator=" + creator + - ", createDate=" + createDate + - ", updater=" + updater + - ", updateDate=" + updateDate + - ", note1='" + note1 + '\'' + - ", note2='" + note2 + '\'' + - ", note3='" + note3 + '\'' + - ", note4='" + note4 + '\'' + - ", note5='" + note5 + '\'' + - '}'; - } + public void setNote5(String note5) { + this.note5 = note5; + } + + @Override + public String toString() { + return "AttrEntity{" + + "id=" + id + + ", dataResourceId=" + dataResourceId + + ", attrType='" + attrType + '\'' + + ", attrValue='" + attrValue + '\'' + + ", delFlag=" + delFlag + + ", creator=" + creator + + ", createDate=" + createDate + + ", updater=" + updater + + ", updateDate=" + updateDate + + ", note1='" + note1 + '\'' + + ", note2='" + note2 + '\'' + + ", note3='" + note3 + '\'' + + ", note4='" + note4 + '\'' + + ", note5='" + note5 + '\'' + + '}'; + } } \ No newline at end of file diff --git a/renren-admin/src/main/java/io/renren/modules/resource/excel/ResourceExcelImportListener.java b/renren-admin/src/main/java/io/renren/modules/resource/excel/ResourceExcelImportListener.java new file mode 100644 index 00000000..1eb6ecd8 --- /dev/null +++ b/renren-admin/src/main/java/io/renren/modules/resource/excel/ResourceExcelImportListener.java @@ -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> { + 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> deptList; // 部门信息 + + private ResourceService resourceService; + + private List> list = new ArrayList<>(); + + Map 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 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 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> 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 date, int sheet, Long deptId) { + List 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; + } + +}