forked from rongchao/epmet-cloud-rizhao
48 changed files with 2276 additions and 0 deletions
@ -0,0 +1,81 @@ |
|||||
|
package com.epmet.commons.tools.utils; |
||||
|
|
||||
|
|
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
import java.util.Random; |
||||
|
import java.util.concurrent.atomic.AtomicLong; |
||||
|
|
||||
|
/** |
||||
|
* 唯一ID生成器 |
||||
|
*/ |
||||
|
public class UniqueIdGenerator { |
||||
|
|
||||
|
private static UniqueValue uniqueValue = new UniqueValue(); |
||||
|
private static String middle; |
||||
|
static { |
||||
|
String threadCode = StringUtils.right(String.valueOf(Math.abs(System.nanoTime()+"".hashCode())), 2); |
||||
|
middle = StringUtils.leftPad(threadCode, 2, "0"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 唯一时间值 |
||||
|
*/ |
||||
|
private static class UniqueValue { |
||||
|
|
||||
|
private AtomicLong uniqueValue = new AtomicLong(0L); |
||||
|
private volatile String currentTime = DateUtils.format(new Date(), DateUtils.DATE_TIME_NO_SPLIT); |
||||
|
private volatile String lastTime = currentTime; |
||||
|
|
||||
|
/** |
||||
|
* 获取当前时间:yyyyMMddHHmmSS |
||||
|
* 如果到了下一秒,则唯一值从0开始 |
||||
|
* |
||||
|
* @return |
||||
|
*/ |
||||
|
public String getCurrentTime() { |
||||
|
currentTime = DateUtils.format(new Date(), DateUtils.DATE_TIME_NO_SPLIT); |
||||
|
if (!currentTime.equals(lastTime)) { |
||||
|
lastTime = currentTime; |
||||
|
Random random = new Random(); |
||||
|
uniqueValue.set(Long.valueOf(random.nextInt(10))); |
||||
|
} |
||||
|
return currentTime; |
||||
|
} |
||||
|
|
||||
|
public String getCurrentValue() { |
||||
|
return StringUtils.leftPad(String.valueOf(uniqueValue.incrementAndGet()), 5, "0"); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 生成一个24位唯一ID |
||||
|
* 15位时间+2位中间值(防止多服务冲突)+2个线程code+5位秒级递增值 |
||||
|
* |
||||
|
* @return |
||||
|
*/ |
||||
|
public static String generate() { |
||||
|
StringBuilder builder = new StringBuilder(32); |
||||
|
builder.append(uniqueValue.getCurrentTime()) |
||||
|
.append(middle) |
||||
|
.append(getUniqueThreadCode()) |
||||
|
.append(uniqueValue.getCurrentValue()); |
||||
|
|
||||
|
return builder.toString(); |
||||
|
} |
||||
|
|
||||
|
public static String getUniqueThreadCode() { |
||||
|
String threadCode = StringUtils.left(String.valueOf(Thread.currentThread().hashCode()), 2); |
||||
|
return StringUtils.leftPad(threadCode, 2, "0"); |
||||
|
} |
||||
|
|
||||
|
public static void main(String[] args) throws InterruptedException { |
||||
|
|
||||
|
System.out.println(UniqueIdGenerator.uniqueValue.currentTime); |
||||
|
System.out.println(UniqueIdGenerator.middle); |
||||
|
System.out.println(UniqueIdGenerator.getUniqueThreadCode()); |
||||
|
System.out.println(uniqueValue.getCurrentValue()); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,97 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dto.screen; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 评价指标字典 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class IndexDictDTO implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 主键id |
||||
|
*/ |
||||
|
private String id; |
||||
|
|
||||
|
/** |
||||
|
* 指标编码(唯一) |
||||
|
*/ |
||||
|
private String indexCode; |
||||
|
|
||||
|
/** |
||||
|
* 指标名 |
||||
|
*/ |
||||
|
private String indexName; |
||||
|
|
||||
|
/** |
||||
|
* 指标描述 |
||||
|
*/ |
||||
|
private String indexDesc; |
||||
|
|
||||
|
/** |
||||
|
* 父级指标id,如果是一级指标,PID=0 |
||||
|
*/ |
||||
|
private String pid; |
||||
|
|
||||
|
/** |
||||
|
* 指标级别(1,2,3,4,5) |
||||
|
*/ |
||||
|
private String level; |
||||
|
|
||||
|
/** |
||||
|
* 删除标识 0.未删除 1.已删除 |
||||
|
*/ |
||||
|
private Integer delFlag; |
||||
|
|
||||
|
/** |
||||
|
* 乐观锁 |
||||
|
*/ |
||||
|
private Integer revision; |
||||
|
|
||||
|
/** |
||||
|
* 创建人 |
||||
|
*/ |
||||
|
private String createdBy; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
private Date createdTime; |
||||
|
|
||||
|
/** |
||||
|
* 更新人 |
||||
|
*/ |
||||
|
private String updatedBy; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
private Date updatedTime; |
||||
|
|
||||
|
} |
@ -0,0 +1,92 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dto.screen; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 客户指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class IndexGroupDTO implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 主键id |
||||
|
*/ |
||||
|
private String id; |
||||
|
|
||||
|
/** |
||||
|
* 客户id |
||||
|
*/ |
||||
|
private String customerId; |
||||
|
|
||||
|
/** |
||||
|
* 指标id |
||||
|
*/ |
||||
|
private String indexCode; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用:启用:enable 禁用:disabled |
||||
|
*/ |
||||
|
private String status; |
||||
|
|
||||
|
/** |
||||
|
* 当前指标关联的上一级指标分组,如果没有上一级,则为0 |
||||
|
*/ |
||||
|
private String parentIndexGroupId; |
||||
|
|
||||
|
/** |
||||
|
* 删除标识 0.未删除 1.已删除 |
||||
|
*/ |
||||
|
private Integer delFlag; |
||||
|
|
||||
|
/** |
||||
|
* 乐观锁 |
||||
|
*/ |
||||
|
private Integer revision; |
||||
|
|
||||
|
/** |
||||
|
* 创建人 |
||||
|
*/ |
||||
|
private String createdBy; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
private Date createdTime; |
||||
|
|
||||
|
/** |
||||
|
* 更新人 |
||||
|
*/ |
||||
|
private String updatedBy; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
private Date updatedTime; |
||||
|
|
||||
|
} |
@ -0,0 +1,92 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dto.screen; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class IndexGroupDetailDTO implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 主键id |
||||
|
*/ |
||||
|
private String id; |
||||
|
|
||||
|
/** |
||||
|
* index_group.id |
||||
|
*/ |
||||
|
private String indexGroupId; |
||||
|
|
||||
|
/** |
||||
|
* 指标id |
||||
|
*/ |
||||
|
private String indexCode; |
||||
|
|
||||
|
/** |
||||
|
* 权重(同一组权重总和=1) |
||||
|
*/ |
||||
|
private BigDecimal weight; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用:启用:enable 禁用:disabled |
||||
|
*/ |
||||
|
private String status; |
||||
|
|
||||
|
/** |
||||
|
* 删除标识 0.未删除 1.已删除 |
||||
|
*/ |
||||
|
private Integer delFlag; |
||||
|
|
||||
|
/** |
||||
|
* 乐观锁 |
||||
|
*/ |
||||
|
private Integer revision; |
||||
|
|
||||
|
/** |
||||
|
* 创建人 |
||||
|
*/ |
||||
|
private String createdBy; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
private Date createdTime; |
||||
|
|
||||
|
/** |
||||
|
* 更新人 |
||||
|
*/ |
||||
|
private String updatedBy; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
private Date updatedTime; |
||||
|
|
||||
|
} |
@ -0,0 +1,92 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dto.screen; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.math.BigDecimal; |
||||
|
import java.util.Date; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
public class IndexGroupDetailTemplateDTO implements Serializable { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 主键id |
||||
|
*/ |
||||
|
private String id; |
||||
|
|
||||
|
/** |
||||
|
* index_group.id |
||||
|
*/ |
||||
|
private String indexGroupId; |
||||
|
|
||||
|
/** |
||||
|
* 指标id |
||||
|
*/ |
||||
|
private String indexCode; |
||||
|
|
||||
|
/** |
||||
|
* 权重(同一组权重总和=1) |
||||
|
*/ |
||||
|
private BigDecimal weight; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用:启用:enable 禁用:disabled |
||||
|
*/ |
||||
|
private String status; |
||||
|
|
||||
|
/** |
||||
|
* 删除标识 0.未删除 1.已删除 |
||||
|
*/ |
||||
|
private Integer delFlag; |
||||
|
|
||||
|
/** |
||||
|
* 乐观锁 |
||||
|
*/ |
||||
|
private Integer revision; |
||||
|
|
||||
|
/** |
||||
|
* 创建人 |
||||
|
*/ |
||||
|
private String createdBy; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
private Date createdTime; |
||||
|
|
||||
|
/** |
||||
|
* 更新人 |
||||
|
*/ |
||||
|
private String updatedBy; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
private Date updatedTime; |
||||
|
|
||||
|
} |
@ -0,0 +1,68 @@ |
|||||
|
package com.epmet.controller; |
||||
|
|
||||
|
import com.alibaba.excel.EasyExcel; |
||||
|
import com.alibaba.excel.ExcelReader; |
||||
|
import com.alibaba.excel.read.metadata.ReadSheet; |
||||
|
import com.epmet.commons.tools.utils.Result; |
||||
|
import com.epmet.model.IndexExcelDataListener; |
||||
|
import com.epmet.model.IndexModel; |
||||
|
import com.epmet.service.screen.IndexDictService; |
||||
|
import com.epmet.service.screen.IndexGroupDetailTemplateService; |
||||
|
import com.epmet.service.screen.IndexGroupTemplateService; |
||||
|
import lombok.extern.slf4j.Slf4j; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.PostMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||
|
import org.springframework.web.bind.annotation.RequestPart; |
||||
|
import org.springframework.web.bind.annotation.RestController; |
||||
|
import org.springframework.web.multipart.MultipartFile; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.io.InputStream; |
||||
|
|
||||
|
/** |
||||
|
* @author liujianjun |
||||
|
*/ |
||||
|
@RequestMapping("indexdict") |
||||
|
@RestController |
||||
|
@Slf4j |
||||
|
public class IndexDictController { |
||||
|
|
||||
|
@Autowired |
||||
|
private IndexDictService indexDictService; |
||||
|
@Autowired |
||||
|
private IndexGroupTemplateService indexGroupTemplateService; |
||||
|
@Autowired |
||||
|
private IndexGroupDetailTemplateService indexGroupDetailTemplateService; |
||||
|
|
||||
|
/** |
||||
|
* url:http://localhost:8108/data/stats/indexdict/initFromExcel
|
||||
|
* desc:从excel初始化指标,分组,权重 |
||||
|
* |
||||
|
* @param file |
||||
|
* @return |
||||
|
*/ |
||||
|
@PostMapping("initFromExcel") |
||||
|
public Result<String> testTx(@RequestPart("file") MultipartFile file) { |
||||
|
ExcelReader excelReader = null; |
||||
|
try { |
||||
|
InputStream inputStream = null; |
||||
|
try { |
||||
|
inputStream = file.getInputStream(); |
||||
|
} catch (IOException e) { |
||||
|
return new Result<String>().error("读取文件失败"); |
||||
|
} |
||||
|
excelReader = EasyExcel.read(inputStream).build(); |
||||
|
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
|
||||
|
ReadSheet readSheet = EasyExcel.readSheet(1).head(IndexModel.class) |
||||
|
.registerReadListener(new IndexExcelDataListener(indexDictService, indexGroupTemplateService, indexGroupDetailTemplateService)) |
||||
|
.build(); |
||||
|
excelReader.read(readSheet); |
||||
|
} finally { |
||||
|
if (excelReader != null) { |
||||
|
excelReader.finish(); |
||||
|
} |
||||
|
} |
||||
|
return new Result<>(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dao.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.dao.BaseDao; |
||||
|
import com.epmet.entity.screen.IndexDictEntity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
|
||||
|
/** |
||||
|
* 评价指标字典 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface IndexDictDao extends BaseDao<IndexDictEntity> { |
||||
|
|
||||
|
int deleteAll(); |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dao.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.dao.BaseDao; |
||||
|
import com.epmet.entity.screen.IndexGroupEntity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface IndexGroupDao extends BaseDao<IndexGroupEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dao.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.dao.BaseDao; |
||||
|
import com.epmet.entity.screen.IndexGroupDetailEntity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface IndexGroupDetailDao extends BaseDao<IndexGroupDetailEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dao.screen; |
||||
|
|
||||
|
|
||||
|
import com.epmet.commons.mybatis.dao.BaseDao; |
||||
|
import com.epmet.entity.screen.IndexGroupDetailTemplateEntity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface IndexGroupDetailTemplateDao extends BaseDao<IndexGroupDetailTemplateEntity> { |
||||
|
|
||||
|
int deleteAll(); |
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.dao.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.dao.BaseDao; |
||||
|
import com.epmet.entity.screen.IndexGroupTemplateEntity; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
|
||||
|
/** |
||||
|
* 默认指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Mapper |
||||
|
public interface IndexGroupTemplateDao extends BaseDao<IndexGroupTemplateEntity> { |
||||
|
|
||||
|
int deleteAll(); |
||||
|
} |
@ -0,0 +1,53 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.entity.screen; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
/** |
||||
|
* 评价指标字典 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper=false) |
||||
|
@TableName("index_dict") |
||||
|
public class IndexDictEntity extends BaseEpmetEntity { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 指标名 |
||||
|
*/ |
||||
|
private String indexName; |
||||
|
|
||||
|
/** |
||||
|
* 指标描述 |
||||
|
*/ |
||||
|
private String indexDesc; |
||||
|
|
||||
|
/** |
||||
|
* 指标级别(1,2,3,4,5) |
||||
|
*/ |
||||
|
private String level; |
||||
|
|
||||
|
} |
@ -0,0 +1,60 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.entity.screen; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper=false) |
||||
|
@TableName("index_group_detail") |
||||
|
public class IndexGroupDetailEntity extends BaseEpmetEntity { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* index_group.id |
||||
|
*/ |
||||
|
private String indexGroupId; |
||||
|
|
||||
|
/** |
||||
|
* 指标id |
||||
|
*/ |
||||
|
private String indexId; |
||||
|
|
||||
|
/** |
||||
|
* 权重(同一组权重总和=1) |
||||
|
*/ |
||||
|
private BigDecimal weight; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用:启用:enable 禁用:disabled |
||||
|
*/ |
||||
|
private String status; |
||||
|
|
||||
|
} |
@ -0,0 +1,65 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.entity.screen; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper=false) |
||||
|
@TableName("index_group_detail_template") |
||||
|
public class IndexGroupDetailTemplateEntity extends BaseEpmetEntity { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* index_group.id |
||||
|
*/ |
||||
|
private String indexGroupId; |
||||
|
|
||||
|
/** |
||||
|
* 指标id |
||||
|
*/ |
||||
|
private String indexId; |
||||
|
|
||||
|
/** |
||||
|
* 权重(同一组权重总和=1) |
||||
|
*/ |
||||
|
private BigDecimal weight; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用:启用:enable 禁用:disabled |
||||
|
*/ |
||||
|
private String status; |
||||
|
|
||||
|
/** |
||||
|
* 阈值 如果是百分比 则为除以100以后的值 |
||||
|
*/ |
||||
|
private BigDecimal threshold; |
||||
|
|
||||
|
} |
@ -0,0 +1,58 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.entity.screen; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper=false) |
||||
|
@TableName("index_group") |
||||
|
public class IndexGroupEntity extends BaseEpmetEntity { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 客户id |
||||
|
*/ |
||||
|
private String customerId; |
||||
|
|
||||
|
/** |
||||
|
* 指标id |
||||
|
*/ |
||||
|
private String indexId; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用:启用:enable 禁用:disabled |
||||
|
*/ |
||||
|
private String status; |
||||
|
|
||||
|
/** |
||||
|
* 当前指标关联的上一级指标分组,如果没有上一级,则为0 |
||||
|
*/ |
||||
|
private String parentIndexGroupId; |
||||
|
|
||||
|
} |
@ -0,0 +1,53 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.entity.screen; |
||||
|
|
||||
|
import com.baomidou.mybatisplus.annotation.TableName; |
||||
|
import com.epmet.commons.mybatis.entity.BaseEpmetEntity; |
||||
|
import lombok.Data; |
||||
|
import lombok.EqualsAndHashCode; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Data |
||||
|
@EqualsAndHashCode(callSuper=false) |
||||
|
@TableName("index_group_template") |
||||
|
public class IndexGroupTemplateEntity extends BaseEpmetEntity { |
||||
|
|
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
/** |
||||
|
* 指标id |
||||
|
*/ |
||||
|
private String indexId; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用:启用:enable 禁用:disabled |
||||
|
*/ |
||||
|
private String status; |
||||
|
|
||||
|
/** |
||||
|
* 当前指标关联的上一级指标分组,如果没有上一级,则为0 |
||||
|
*/ |
||||
|
private String parentIndexGroupId; |
||||
|
|
||||
|
} |
@ -0,0 +1,272 @@ |
|||||
|
package com.epmet.model; |
||||
|
|
||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||
|
import com.alibaba.excel.event.AnalysisEventListener; |
||||
|
import com.alibaba.fastjson.JSON; |
||||
|
import com.epmet.commons.tools.utils.UniqueIdGenerator; |
||||
|
import com.epmet.entity.screen.IndexDictEntity; |
||||
|
import com.epmet.entity.screen.IndexGroupDetailTemplateEntity; |
||||
|
import com.epmet.entity.screen.IndexGroupTemplateEntity; |
||||
|
import com.epmet.service.screen.IndexDictService; |
||||
|
import com.epmet.service.screen.IndexGroupDetailTemplateService; |
||||
|
import com.epmet.service.screen.IndexGroupTemplateService; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.math.RoundingMode; |
||||
|
import java.util.*; |
||||
|
import java.util.concurrent.atomic.AtomicInteger; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* 读取转换异常 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
*/ |
||||
|
public class IndexExcelDataListener extends AnalysisEventListener<IndexModel> { |
||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(IndexExcelDataListener.class); |
||||
|
/** |
||||
|
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 |
||||
|
*/ |
||||
|
private static volatile boolean isGroup = false; |
||||
|
; |
||||
|
AtomicInteger total = new AtomicInteger(0); |
||||
|
Map<String, IndexDictEntity> indexDicMap = new HashMap<>(); |
||||
|
Map<String, IndexGroupTemplateEntity> indexGroupMap = new HashMap<>(); |
||||
|
Map<String, IndexGroupDetailTemplateEntity> indexGroupDetailMap = new HashMap<>(); |
||||
|
List<IndexModel> indexModelList = new ArrayList<>(); |
||||
|
private String preWheight; |
||||
|
|
||||
|
private Integer wheightSum = 0; |
||||
|
/** |
||||
|
* 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。 |
||||
|
*/ |
||||
|
private IndexDictService indexDictService; |
||||
|
|
||||
|
private IndexGroupTemplateService indexGroupTemplateService; |
||||
|
|
||||
|
private IndexGroupDetailTemplateService indexGroupDetailTemplateService; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来 |
||||
|
* |
||||
|
* @param indexDictService |
||||
|
*/ |
||||
|
public IndexExcelDataListener(IndexDictService indexDictService, IndexGroupTemplateService indexGroupTemplateService, IndexGroupDetailTemplateService indexGroupDetailTemplateService) { |
||||
|
this.indexDictService = indexDictService; |
||||
|
this.indexGroupTemplateService = indexGroupTemplateService; |
||||
|
this.indexGroupDetailTemplateService = indexGroupDetailTemplateService; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 这个每一条数据解析都会来调用 |
||||
|
* |
||||
|
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()} |
||||
|
* @param context |
||||
|
*/ |
||||
|
@Override |
||||
|
public void invoke(IndexModel data, AnalysisContext context) { |
||||
|
if (data == null || data.getIsUsed() == null || data.getIsUsed() != 1) { |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
//合并单元格的 权重 处理
|
||||
|
String weight = data.getWeight(); |
||||
|
if (StringUtils.isNotBlank(weight)) { |
||||
|
weight = weight.replace("%", ""); |
||||
|
data.setWeight(weight); |
||||
|
preWheight = data.getWeight(); |
||||
|
} else { |
||||
|
data.setWeight(preWheight); |
||||
|
} |
||||
|
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data)); |
||||
|
|
||||
|
IndexDictEntity entity = new IndexDictEntity(); |
||||
|
IndexDictEntity entity2 = new IndexDictEntity(); |
||||
|
IndexDictEntity entity3 = new IndexDictEntity(); |
||||
|
IndexDictEntity entity4 = new IndexDictEntity(); |
||||
|
IndexDictEntity entity5 = new IndexDictEntity(); |
||||
|
|
||||
|
indexModelList.add(data); |
||||
|
buildIndexDicEntity(data, entity, entity2, entity3, entity4, entity5); |
||||
|
|
||||
|
buildIndexGroupEntity(); |
||||
|
|
||||
|
total.addAndGet(1); |
||||
|
|
||||
|
|
||||
|
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
||||
|
/*if (isGroup) { |
||||
|
saveData(); |
||||
|
// 存储完成清理 list
|
||||
|
list.clear(); |
||||
|
}*/ |
||||
|
} |
||||
|
|
||||
|
private void buildIndexGroupEntity() { |
||||
|
List<IndexModel> collect = indexModelList.stream().sorted(Comparator.comparing(IndexModel::getLevel1Index)).collect(Collectors.toList()); |
||||
|
collect.forEach(index -> { |
||||
|
if (index.getLevel1Index().equals("党员相关")) { |
||||
|
IndexDictEntity indexDictEntity = indexDicMap.get(index.getLevel1Index()); |
||||
|
String level1GroupId = UniqueIdGenerator.generate(); |
||||
|
IndexGroupTemplateEntity group1 = indexGroupMap.get(index.getLevel1Index()); |
||||
|
if (group1 == null) { |
||||
|
group1 = new IndexGroupTemplateEntity(); |
||||
|
group1.setIndexId(indexDictEntity.getId()); |
||||
|
group1.setParentIndexGroupId("0"); |
||||
|
group1.setId(level1GroupId); |
||||
|
indexGroupMap.put(index.getLevel1Index(), group1); |
||||
|
} |
||||
|
|
||||
|
String level4Index = index.getLevel4Index(); |
||||
|
indexDictEntity = indexDicMap.get(level4Index); |
||||
|
String level2GroupId = UniqueIdGenerator.generate(); |
||||
|
|
||||
|
IndexGroupTemplateEntity group2 = indexGroupMap.get(level4Index); |
||||
|
IndexGroupDetailTemplateEntity templateEntity = null; |
||||
|
if (group2 == null) { |
||||
|
group2 = new IndexGroupTemplateEntity(); |
||||
|
group2.setIndexId(indexDictEntity.getId()); |
||||
|
group2.setParentIndexGroupId(level1GroupId); |
||||
|
group2.setId(level2GroupId); |
||||
|
indexGroupMap.put(level4Index, group2); |
||||
|
//构建 分组明细
|
||||
|
templateEntity = indexGroupDetailMap.get(level4Index); |
||||
|
if (templateEntity == null) { |
||||
|
buildIndexGroupDetail(indexDictEntity, index, group1.getId(), 2); |
||||
|
} |
||||
|
} |
||||
|
indexDictEntity = indexDicMap.get(index.getLevel5Index()); |
||||
|
|
||||
|
templateEntity = indexGroupDetailMap.get(index.getLevel5Index()); |
||||
|
if (templateEntity == null) { |
||||
|
buildIndexGroupDetail(indexDictEntity, index, group2.getId(), 5); |
||||
|
} |
||||
|
} else { |
||||
|
//todo 测试完去掉
|
||||
|
//if ("街道相关".equals(index.getLevel1Index())) {
|
||||
|
IndexDictEntity indexDictEntity = indexDicMap.get(index.getLevel1Index()); |
||||
|
String level1GroupId = UniqueIdGenerator.generate(); |
||||
|
IndexGroupTemplateEntity group1 = indexGroupMap.get(index.getLevel1Index()); |
||||
|
if (group1 == null) { |
||||
|
group1 = new IndexGroupTemplateEntity(); |
||||
|
group1.setIndexId(indexDictEntity.getId()); |
||||
|
group1.setParentIndexGroupId("0"); |
||||
|
group1.setId(level1GroupId); |
||||
|
indexGroupMap.put(index.getLevel1Index(), group1); |
||||
|
} |
||||
|
|
||||
|
String level2Index = index.getLevel2Index(); |
||||
|
indexDictEntity = indexDicMap.get(level2Index); |
||||
|
String level2GroupId = UniqueIdGenerator.generate(); |
||||
|
|
||||
|
IndexGroupTemplateEntity group2 = indexGroupMap.get(level2Index); |
||||
|
IndexGroupDetailTemplateEntity templateEntity = null; |
||||
|
if (group2 == null) { |
||||
|
group2 = new IndexGroupTemplateEntity(); |
||||
|
group2.setIndexId(indexDictEntity.getId()); |
||||
|
group2.setParentIndexGroupId(level1GroupId); |
||||
|
group2.setId(level2GroupId); |
||||
|
indexGroupMap.put(level2Index, group2); |
||||
|
//构建 分组明细
|
||||
|
templateEntity = indexGroupDetailMap.get(level2Index); |
||||
|
if (templateEntity == null) { |
||||
|
buildIndexGroupDetail(indexDictEntity, index, group1.getId(), 2); |
||||
|
} |
||||
|
} |
||||
|
indexDictEntity = indexDicMap.get(index.getLevel5Index()); |
||||
|
|
||||
|
templateEntity = indexGroupDetailMap.get(index.getLevel5Index()); |
||||
|
if (templateEntity == null) { |
||||
|
buildIndexGroupDetail(indexDictEntity, index, group2.getId(), 5); |
||||
|
} |
||||
|
} |
||||
|
//}
|
||||
|
}); |
||||
|
LOGGER.info("所有指标分组数据解析完成:{}", JSON.toJSONString(indexGroupMap.values())); |
||||
|
LOGGER.info("所有指标分组明细数据解析完成:{}", JSON.toJSONString(indexGroupDetailMap.values())); |
||||
|
} |
||||
|
|
||||
|
private void buildIndexGroupDetail(IndexDictEntity indexDictEntity, IndexModel index, String groupId, Integer level) { |
||||
|
IndexGroupDetailTemplateEntity templateEntity; |
||||
|
templateEntity = new IndexGroupDetailTemplateEntity(); |
||||
|
templateEntity.setIndexGroupId(groupId); |
||||
|
templateEntity.setIndexId(indexDictEntity.getId()); |
||||
|
|
||||
|
if (level == 5) { |
||||
|
String level5WeightStr = index.getLevel5Weight().replace("%", ""); |
||||
|
templateEntity.setWeight(new BigDecimal(level5WeightStr).divide(new BigDecimal(100), 4, RoundingMode.HALF_UP)); |
||||
|
indexGroupDetailMap.put(index.getLevel5Index(), templateEntity); |
||||
|
} else { |
||||
|
indexGroupDetailMap.put(indexDictEntity.getIndexName(), templateEntity); |
||||
|
templateEntity.setWeight(new BigDecimal(index.getWeight()).divide(new BigDecimal(100), 4, RoundingMode.HALF_UP)); |
||||
|
} |
||||
|
templateEntity.setId(UniqueIdGenerator.generate()); |
||||
|
if (StringUtils.isNotBlank(index.getThreshold())) { |
||||
|
String thresholdStr = index.getThreshold().replace("%", ""); |
||||
|
templateEntity.setThreshold(new BigDecimal(thresholdStr).divide(new BigDecimal(100), 4, RoundingMode.HALF_UP)); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void buildIndexDicEntity(IndexModel data, IndexDictEntity entity, IndexDictEntity entity2, IndexDictEntity entity3, IndexDictEntity entity4, IndexDictEntity entity5) { |
||||
|
if (!indexDicMap.containsKey(data.getLevel1Index())) { |
||||
|
entity.setId(UniqueIdGenerator.generate()); |
||||
|
entity.setIndexName(data.getLevel1Index()); |
||||
|
entity.setLevel("1"); |
||||
|
indexDicMap.put(data.getLevel1Index(), entity); |
||||
|
} |
||||
|
if (!indexDicMap.containsKey(data.getLevel2Index())) { |
||||
|
entity2.setId(UniqueIdGenerator.generate()); |
||||
|
entity2.setIndexName(data.getLevel2Index()); |
||||
|
entity2.setLevel("2"); |
||||
|
indexDicMap.put(data.getLevel2Index(), entity2); |
||||
|
} |
||||
|
if (!indexDicMap.containsKey(data.getLevel3Index())) { |
||||
|
entity3.setId(UniqueIdGenerator.generate()); |
||||
|
entity3.setIndexName(data.getLevel3Index()); |
||||
|
entity3.setLevel("3"); |
||||
|
indexDicMap.put(data.getLevel3Index(), entity3); |
||||
|
} |
||||
|
if (!indexDicMap.containsKey(data.getLevel4Index())) { |
||||
|
entity4.setId(UniqueIdGenerator.generate()); |
||||
|
entity4.setIndexName(data.getLevel4Index()); |
||||
|
entity4.setLevel("4"); |
||||
|
indexDicMap.put(data.getLevel4Index(), entity4); |
||||
|
} |
||||
|
if (!indexDicMap.containsKey(data.getLevel5Index())) { |
||||
|
entity5.setId(UniqueIdGenerator.generate()); |
||||
|
entity5.setIndexName(data.getLevel5Index()); |
||||
|
entity5.setLevel("5"); |
||||
|
indexDicMap.put(data.getLevel5Index(), entity5); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 所有数据解析完成了 都会来调用 |
||||
|
* |
||||
|
* @param context |
||||
|
*/ |
||||
|
@Override |
||||
|
public void doAfterAllAnalysed(AnalysisContext context) { |
||||
|
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
|
||||
|
saveData(); |
||||
|
LOGGER.info("所有数据解析完成!total:{}", total.intValue()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 加上存储数据库 |
||||
|
*/ |
||||
|
private void saveData() { |
||||
|
LOGGER.info("{}条数据,开始存储数据库!", indexDicMap.size()); |
||||
|
indexDictService.deleteAndInsertBatch(indexDicMap.values()); |
||||
|
|
||||
|
buildIndexGroupEntity(); |
||||
|
|
||||
|
indexGroupTemplateService.deleteAndInsertBatch(indexGroupMap.values()); |
||||
|
indexGroupDetailTemplateService.deleteAndInsertBatch(indexGroupDetailMap.values()); |
||||
|
LOGGER.info("存储数据库成功!指标:{}个,分组:{}个,详情:{}个", indexDicMap.values().size(), indexGroupMap.values().size(), indexGroupDetailMap.values().size()); |
||||
|
} |
||||
|
} |
@ -0,0 +1,26 @@ |
|||||
|
package com.epmet.model; |
||||
|
|
||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
@Data |
||||
|
public class IndexModel { |
||||
|
@ExcelProperty(value = "一级指标") |
||||
|
private String level1Index; |
||||
|
@ExcelProperty(value = "二级指标") |
||||
|
private String level2Index; |
||||
|
@ExcelProperty(value = "三级指标") |
||||
|
private String level3Index; |
||||
|
@ExcelProperty(value = "四级指标") |
||||
|
private String level4Index; |
||||
|
@ExcelProperty(value = "五级指标") |
||||
|
private String level5Index; |
||||
|
@ExcelProperty(value = "是否采用") |
||||
|
private Integer isUsed; |
||||
|
@ExcelProperty(value = "权重") |
||||
|
private String weight; |
||||
|
@ExcelProperty(value = "五级权重") |
||||
|
private String level5Weight; |
||||
|
@ExcelProperty(value = "阈值") |
||||
|
private String threshold; |
||||
|
} |
@ -0,0 +1,54 @@ |
|||||
|
package com.epmet.model; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.io.Serializable; |
||||
|
import java.util.HashSet; |
||||
|
import java.util.Objects; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
@Data |
||||
|
public class ParseIndexExcelResult implements Serializable { |
||||
|
private String id; |
||||
|
private String groupId; |
||||
|
/** |
||||
|
* 当前指标关联的上一级指标分组,如果没有上一级,则为0 |
||||
|
*/ |
||||
|
private String parentIndexGroupId; |
||||
|
/** |
||||
|
* 指标编码(唯一) |
||||
|
*/ |
||||
|
private String indexCode; |
||||
|
|
||||
|
/** |
||||
|
* 指标名 |
||||
|
*/ |
||||
|
private String indexName; |
||||
|
|
||||
|
/** |
||||
|
* 指标描述 |
||||
|
*/ |
||||
|
private String indexDesc; |
||||
|
|
||||
|
/** |
||||
|
* 指标级别(1,2,3,4,5) |
||||
|
*/ |
||||
|
private String level; |
||||
|
|
||||
|
private Set<ParseIndexExcelResult> children = new HashSet<>(); |
||||
|
|
||||
|
@Override |
||||
|
public boolean equals(Object o) { |
||||
|
if (this == o) return true; |
||||
|
if (o == null || getClass() != o.getClass()) return false; |
||||
|
ParseIndexExcelResult that = (ParseIndexExcelResult) o; |
||||
|
return indexCode.equals(that.indexCode) && |
||||
|
indexName.equals(that.indexName) && |
||||
|
level.equals(that.level); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public int hashCode() { |
||||
|
return Objects.hash(indexCode, indexName, indexDesc, level); |
||||
|
} |
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.BaseService; |
||||
|
import com.epmet.entity.screen.IndexDictEntity; |
||||
|
|
||||
|
import java.util.Collection; |
||||
|
|
||||
|
/** |
||||
|
* 评价指标字典 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
public interface IndexDictService extends BaseService<IndexDictEntity> { |
||||
|
|
||||
|
Boolean deleteAndInsertBatch(Collection<IndexDictEntity> values); |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.BaseService; |
||||
|
import com.epmet.entity.screen.IndexGroupDetailEntity; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
public interface IndexGroupDetailService extends BaseService<IndexGroupDetailEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.BaseService; |
||||
|
import com.epmet.entity.screen.IndexGroupDetailTemplateEntity; |
||||
|
|
||||
|
import java.util.Collection; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
public interface IndexGroupDetailTemplateService extends BaseService<IndexGroupDetailTemplateEntity> { |
||||
|
|
||||
|
Boolean deleteAndInsertBatch(Collection<IndexGroupDetailTemplateEntity> values); |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.BaseService; |
||||
|
import com.epmet.entity.screen.IndexGroupEntity; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
public interface IndexGroupService extends BaseService<IndexGroupEntity> { |
||||
|
|
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.BaseService; |
||||
|
import com.epmet.entity.screen.IndexGroupTemplateEntity; |
||||
|
|
||||
|
import java.util.Collection; |
||||
|
|
||||
|
/** |
||||
|
* 默认指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
public interface IndexGroupTemplateService extends BaseService<IndexGroupTemplateEntity> { |
||||
|
|
||||
|
Boolean deleteAndInsertBatch(Collection<IndexGroupTemplateEntity> values); |
||||
|
} |
@ -0,0 +1,43 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen.impl; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
||||
|
import com.epmet.dao.screen.IndexDictDao; |
||||
|
import com.epmet.entity.screen.IndexDictEntity; |
||||
|
import com.epmet.service.screen.IndexDictService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.Collection; |
||||
|
|
||||
|
/** |
||||
|
* 评价指标字典 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class IndexDictServiceImpl extends BaseServiceImpl<IndexDictDao, IndexDictEntity> implements IndexDictService { |
||||
|
|
||||
|
|
||||
|
@Override |
||||
|
public Boolean deleteAndInsertBatch(Collection<IndexDictEntity> values) { |
||||
|
int n = baseDao.deleteAll(); |
||||
|
return this.insertBatch(values,10); |
||||
|
} |
||||
|
} |
@ -0,0 +1,36 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen.impl; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
||||
|
import com.epmet.dao.screen.IndexGroupDetailDao; |
||||
|
import com.epmet.entity.screen.IndexGroupDetailEntity; |
||||
|
import com.epmet.service.screen.IndexGroupDetailService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class IndexGroupDetailServiceImpl extends BaseServiceImpl<IndexGroupDetailDao, IndexGroupDetailEntity> implements IndexGroupDetailService { |
||||
|
|
||||
|
|
||||
|
} |
@ -0,0 +1,42 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen.impl; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
||||
|
import com.epmet.dao.screen.IndexGroupDetailTemplateDao; |
||||
|
import com.epmet.entity.screen.IndexGroupDetailTemplateEntity; |
||||
|
import com.epmet.service.screen.IndexGroupDetailTemplateService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.Collection; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标详情 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class IndexGroupDetailTemplateServiceImpl extends BaseServiceImpl<IndexGroupDetailTemplateDao, IndexGroupDetailTemplateEntity> implements IndexGroupDetailTemplateService { |
||||
|
|
||||
|
@Override |
||||
|
public Boolean deleteAndInsertBatch(Collection<IndexGroupDetailTemplateEntity> values) { |
||||
|
baseDao.deleteAll(); |
||||
|
return this.insertBatch(values, 10); |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen.impl; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
||||
|
import com.epmet.dao.screen.IndexGroupDao; |
||||
|
import com.epmet.entity.screen.IndexGroupEntity; |
||||
|
import com.epmet.service.screen.IndexGroupService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class IndexGroupServiceImpl extends BaseServiceImpl<IndexGroupDao, IndexGroupEntity> implements IndexGroupService { |
||||
|
|
||||
|
} |
@ -0,0 +1,43 @@ |
|||||
|
/** |
||||
|
* Copyright 2018 人人开源 https://www.renren.io
|
||||
|
* <p> |
||||
|
* This program is free software: you can redistribute it and/or modify |
||||
|
* it under the terms of the GNU General Public License as published by |
||||
|
* the Free Software Foundation, either version 3 of the License, or |
||||
|
* (at your option) any later version. |
||||
|
* <p> |
||||
|
* This program is distributed in the hope that it will be useful, |
||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
|
* GNU General Public License for more details. |
||||
|
* <p> |
||||
|
* You should have received a copy of the GNU General Public License |
||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
*/ |
||||
|
|
||||
|
package com.epmet.service.screen.impl; |
||||
|
|
||||
|
import com.epmet.commons.mybatis.service.impl.BaseServiceImpl; |
||||
|
import com.epmet.dao.screen.IndexGroupTemplateDao; |
||||
|
import com.epmet.entity.screen.IndexGroupTemplateEntity; |
||||
|
import com.epmet.service.screen.IndexGroupTemplateService; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
|
||||
|
import java.util.Collection; |
||||
|
|
||||
|
/** |
||||
|
* 客户指标分组 |
||||
|
* |
||||
|
* @author generator generator@elink-cn.com |
||||
|
* @since v1.0.0 2020-08-19 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class IndexGroupTemplateServiceImpl extends BaseServiceImpl<IndexGroupTemplateDao, IndexGroupTemplateEntity> implements IndexGroupTemplateService { |
||||
|
|
||||
|
@Override |
||||
|
public Boolean deleteAndInsertBatch(Collection<IndexGroupTemplateEntity> values) { |
||||
|
|
||||
|
baseDao.deleteAll(); |
||||
|
return this.insertBatch(values, 10); |
||||
|
} |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package com.epmet.util; |
||||
|
|
||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||
|
import com.alibaba.excel.event.AnalysisEventListener; |
||||
|
import org.apache.poi.ss.formula.functions.T; |
||||
|
|
||||
|
public class ExcelListener extends AnalysisEventListener<T> { |
||||
|
@Override |
||||
|
public void invoke(T t, AnalysisContext analysisContext) { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void doAfterAllAnalysed(AnalysisContext analysisContext) { |
||||
|
System.out.println(analysisContext); |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
package com.epmet.util; |
||||
|
|
||||
|
import java.io.File; |
||||
|
import java.io.InputStream; |
||||
|
|
||||
|
public class TestFileUtil { |
||||
|
|
||||
|
public static InputStream getResourcesFileInputStream(String fileName) { |
||||
|
return Thread.currentThread().getContextClassLoader().getResourceAsStream("" + fileName); |
||||
|
} |
||||
|
|
||||
|
public static String getPath() { |
||||
|
return TestFileUtil.class.getResource("/").getPath(); |
||||
|
} |
||||
|
|
||||
|
public static File createNewFile(String pathName) { |
||||
|
File file = new File(getPath() + pathName); |
||||
|
if (file.exists()) { |
||||
|
file.delete(); |
||||
|
} else { |
||||
|
if (!file.getParentFile().exists()) { |
||||
|
file.getParentFile().mkdirs(); |
||||
|
} |
||||
|
} |
||||
|
return file; |
||||
|
} |
||||
|
|
||||
|
public static File readFile(String pathName) { |
||||
|
return new File(getPath() + pathName); |
||||
|
} |
||||
|
|
||||
|
public static File readUserHomeFile(String pathName) { |
||||
|
return new File(System.getProperty("user.home") + File.separator + pathName); |
||||
|
} |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
<?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.epmet.dao.screen.IndexDictDao"> |
||||
|
<delete id="deleteAll"> |
||||
|
delete from index_dict |
||||
|
</delete> |
||||
|
</mapper> |
@ -0,0 +1,7 @@ |
|||||
|
<?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.epmet.dao.screen.IndexGroupDao"> |
||||
|
|
||||
|
|
||||
|
</mapper> |
@ -0,0 +1,6 @@ |
|||||
|
<?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.epmet.dao.screen.IndexGroupDetailDao"> |
||||
|
|
||||
|
</mapper> |
@ -0,0 +1,9 @@ |
|||||
|
<?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.epmet.dao.screen.IndexGroupDetailTemplateDao"> |
||||
|
|
||||
|
<delete id="deleteAll"> |
||||
|
delete from index_group_detail_template |
||||
|
</delete> |
||||
|
</mapper> |
@ -0,0 +1,8 @@ |
|||||
|
<?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.epmet.dao.screen.IndexGroupTemplateDao"> |
||||
|
<delete id="deleteAll"> |
||||
|
delete from index_group_template |
||||
|
</delete> |
||||
|
</mapper> |
@ -0,0 +1,17 @@ |
|||||
|
package com.epmet.stats.test.model; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
/** |
||||
|
* 基础数据类.这里的排序和excel里面的排序一致 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
**/ |
||||
|
@Data |
||||
|
public class DemoData { |
||||
|
private String string; |
||||
|
private Date date; |
||||
|
private Double doubleData; |
||||
|
} |
@ -0,0 +1,84 @@ |
|||||
|
package com.epmet.stats.test.model; |
||||
|
|
||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||
|
import com.alibaba.excel.event.AnalysisEventListener; |
||||
|
import com.alibaba.fastjson.JSON; |
||||
|
import com.epmet.dao.screen.ScreenCustomerAgencyDao; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 模板的读取类 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
*/ |
||||
|
// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
|
||||
|
public class DemoDataListener extends AnalysisEventListener<DemoData> { |
||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class); |
||||
|
/** |
||||
|
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 |
||||
|
*/ |
||||
|
private static final int BATCH_COUNT = 5; |
||||
|
List<DemoData> list = new ArrayList<DemoData>(); |
||||
|
/** |
||||
|
* 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。 |
||||
|
*/ |
||||
|
private ScreenCustomerAgencyDao demoDAO; |
||||
|
|
||||
|
public DemoDataListener() { |
||||
|
// 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
|
||||
|
demoDAO = null; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来 |
||||
|
* |
||||
|
* @param demoDAO |
||||
|
*/ |
||||
|
public DemoDataListener(ScreenCustomerAgencyDao demoDAO) { |
||||
|
this.demoDAO = demoDAO; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 这个每一条数据解析都会来调用 |
||||
|
* |
||||
|
* @param data |
||||
|
* one row value. Is is same as {@link AnalysisContext#readRowHolder()} |
||||
|
* @param context |
||||
|
*/ |
||||
|
@Override |
||||
|
public void invoke(DemoData data, AnalysisContext context) { |
||||
|
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data)); |
||||
|
list.add(data); |
||||
|
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
||||
|
if (list.size() >= BATCH_COUNT) { |
||||
|
saveData(); |
||||
|
// 存储完成清理 list
|
||||
|
list.clear(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 所有数据解析完成了 都会来调用 |
||||
|
* |
||||
|
* @param context |
||||
|
*/ |
||||
|
@Override |
||||
|
public void doAfterAllAnalysed(AnalysisContext context) { |
||||
|
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
|
||||
|
saveData(); |
||||
|
LOGGER.info("所有数据解析完成!"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 加上存储数据库 |
||||
|
*/ |
||||
|
private void saveData() { |
||||
|
LOGGER.info("{}条数据,开始存储数据库!", list.size()); |
||||
|
//demoDAO.save(list);
|
||||
|
LOGGER.info("存储数据库成功!"); |
||||
|
} |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
package com.epmet.stats.test.read; |
||||
|
|
||||
|
import com.alibaba.excel.annotation.ExcelProperty; |
||||
|
import com.alibaba.excel.annotation.format.DateTimeFormat; |
||||
|
import com.alibaba.excel.annotation.format.NumberFormat; |
||||
|
import lombok.Data; |
||||
|
|
||||
|
/** |
||||
|
* 基础数据类.这里的排序和excel里面的排序一致 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
**/ |
||||
|
@Data |
||||
|
public class ConverterData { |
||||
|
/** |
||||
|
* 我自定义 转换器,不管数据库传过来什么 。我给他加上“自定义:” |
||||
|
*/ |
||||
|
@ExcelProperty(converter = CustomStringStringConverter.class) |
||||
|
private String string; |
||||
|
/** |
||||
|
* 这里用string 去接日期才能格式化。我想接收年月日格式 |
||||
|
*/ |
||||
|
@DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒") |
||||
|
private String date; |
||||
|
/** |
||||
|
* 我想接收百分比的数字 |
||||
|
*/ |
||||
|
@NumberFormat("#.##%") |
||||
|
private String doubleData; |
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
package com.epmet.stats.test.read; |
||||
|
|
||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||
|
import com.alibaba.excel.event.AnalysisEventListener; |
||||
|
import com.alibaba.fastjson.JSON; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 模板的读取类 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
*/ |
||||
|
public class ConverterDataListener extends AnalysisEventListener<ConverterData> { |
||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(ConverterDataListener.class); |
||||
|
/** |
||||
|
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 |
||||
|
*/ |
||||
|
private static final int BATCH_COUNT = 5; |
||||
|
List<ConverterData> list = new ArrayList<ConverterData>(); |
||||
|
|
||||
|
@Override |
||||
|
public void invoke(ConverterData data, AnalysisContext context) { |
||||
|
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data)); |
||||
|
list.add(data); |
||||
|
if (list.size() >= BATCH_COUNT) { |
||||
|
saveData(); |
||||
|
list.clear(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void doAfterAllAnalysed(AnalysisContext context) { |
||||
|
saveData(); |
||||
|
LOGGER.info("所有数据解析完成!"); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 加上存储数据库 |
||||
|
*/ |
||||
|
private void saveData() { |
||||
|
LOGGER.info("{}条数据,开始存储数据库!", list.size()); |
||||
|
LOGGER.info("存储数据库成功!"); |
||||
|
} |
||||
|
} |
@ -0,0 +1,59 @@ |
|||||
|
package com.epmet.stats.test.read; |
||||
|
|
||||
|
import com.alibaba.excel.converters.Converter; |
||||
|
import com.alibaba.excel.enums.CellDataTypeEnum; |
||||
|
import com.alibaba.excel.metadata.CellData; |
||||
|
import com.alibaba.excel.metadata.GlobalConfiguration; |
||||
|
import com.alibaba.excel.metadata.property.ExcelContentProperty; |
||||
|
|
||||
|
/** |
||||
|
* String and string converter |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
*/ |
||||
|
public class CustomStringStringConverter implements Converter<String> { |
||||
|
@Override |
||||
|
public Class supportJavaTypeKey() { |
||||
|
return String.class; |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public CellDataTypeEnum supportExcelTypeKey() { |
||||
|
return CellDataTypeEnum.STRING; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 这里读的时候会调用 |
||||
|
* |
||||
|
* @param cellData |
||||
|
* NotNull |
||||
|
* @param contentProperty |
||||
|
* Nullable |
||||
|
* @param globalConfiguration |
||||
|
* NotNull |
||||
|
* @return |
||||
|
*/ |
||||
|
@Override |
||||
|
public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty, |
||||
|
GlobalConfiguration globalConfiguration) { |
||||
|
return "自定义:" + cellData.getStringValue(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 这里是写的时候会调用 不用管 |
||||
|
* |
||||
|
* @param value |
||||
|
* NotNull |
||||
|
* @param contentProperty |
||||
|
* Nullable |
||||
|
* @param globalConfiguration |
||||
|
* NotNull |
||||
|
* @return |
||||
|
*/ |
||||
|
@Override |
||||
|
public CellData convertToExcelData(String value, ExcelContentProperty contentProperty, |
||||
|
GlobalConfiguration globalConfiguration) { |
||||
|
return new CellData(value); |
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
package com.epmet.stats.test.read; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 假设这个是你的DAO存储。当然还要这个类让spring管理,当然你不用需要存储,也不需要这个类。 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
**/ |
||||
|
public class DemoDAO { |
||||
|
|
||||
|
public void save(List<DemoData> list) { |
||||
|
// 如果是mybatis,尽量别直接调用多次insert,自己写一个mapper里面新增一个方法batchInsert,所有数据一次性插入
|
||||
|
} |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
package com.epmet.stats.test.read; |
||||
|
|
||||
|
import lombok.Data; |
||||
|
|
||||
|
import java.util.Date; |
||||
|
|
||||
|
/** |
||||
|
* 基础数据类.这里的排序和excel里面的排序一致 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
**/ |
||||
|
@Data |
||||
|
public class DemoData { |
||||
|
private String string; |
||||
|
private Date date; |
||||
|
private Double doubleData; |
||||
|
} |
@ -0,0 +1,97 @@ |
|||||
|
package com.epmet.stats.test.read; |
||||
|
|
||||
|
import com.alibaba.excel.context.AnalysisContext; |
||||
|
import com.alibaba.excel.event.AnalysisEventListener; |
||||
|
import com.alibaba.fastjson.JSON; |
||||
|
import com.epmet.model.IndexModel; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
|
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.concurrent.atomic.AtomicInteger; |
||||
|
|
||||
|
/** |
||||
|
* 模板的读取类 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
*/ |
||||
|
// 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
|
||||
|
public class DemoDataListener extends AnalysisEventListener<IndexModel> { |
||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(DemoDataListener.class); |
||||
|
/** |
||||
|
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收 |
||||
|
*/ |
||||
|
private static final int BATCH_COUNT = 5; |
||||
|
List<IndexModel> list = new ArrayList<IndexModel>(); |
||||
|
AtomicInteger total = new AtomicInteger(0); |
||||
|
|
||||
|
private String preWheight; |
||||
|
/** |
||||
|
* 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。 |
||||
|
*/ |
||||
|
private DemoDAO demoDAO; |
||||
|
|
||||
|
public DemoDataListener() { |
||||
|
// 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
|
||||
|
demoDAO = new DemoDAO(); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来 |
||||
|
* |
||||
|
* @param demoDAO |
||||
|
*/ |
||||
|
public DemoDataListener(DemoDAO demoDAO) { |
||||
|
this.demoDAO = demoDAO; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 这个每一条数据解析都会来调用 |
||||
|
* |
||||
|
* @param data |
||||
|
* one row value. Is is same as {@link AnalysisContext#readRowHolder()} |
||||
|
* @param context |
||||
|
*/ |
||||
|
@Override |
||||
|
public void invoke(IndexModel data, AnalysisContext context) { |
||||
|
if (data == null || data.getIsUsed() == null || data.getIsUsed() != 1){ |
||||
|
return; |
||||
|
} |
||||
|
if ( data.getWeight() != null){ |
||||
|
preWheight = data.getWeight(); |
||||
|
}else{ |
||||
|
data.setWeight(preWheight); |
||||
|
} |
||||
|
LOGGER.info("解析到一条数据:{}", JSON.toJSONString(data)); |
||||
|
list.add(data); |
||||
|
total.addAndGet(1); |
||||
|
// 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
|
||||
|
if (list.size() >= BATCH_COUNT) { |
||||
|
saveData(); |
||||
|
// 存储完成清理 list
|
||||
|
list.clear(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 所有数据解析完成了 都会来调用 |
||||
|
* |
||||
|
* @param context |
||||
|
*/ |
||||
|
@Override |
||||
|
public void doAfterAllAnalysed(AnalysisContext context) { |
||||
|
// 这里也要保存数据,确保最后遗留的数据也存储到数据库
|
||||
|
saveData(); |
||||
|
LOGGER.info("所有数据解析完成!total:{}",total.intValue()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 加上存储数据库 |
||||
|
*/ |
||||
|
private void saveData() { |
||||
|
LOGGER.info("{}条数据,开始存储数据库!", list.size()); |
||||
|
//demoDAO.save(list);
|
||||
|
LOGGER.info("存储数据库成功!"); |
||||
|
} |
||||
|
} |
@ -0,0 +1,70 @@ |
|||||
|
package com.epmet.stats.test.read; |
||||
|
|
||||
|
import com.alibaba.excel.EasyExcel; |
||||
|
import com.alibaba.excel.ExcelReader; |
||||
|
import com.alibaba.excel.read.metadata.ReadSheet; |
||||
|
import com.epmet.model.IndexModel; |
||||
|
import com.epmet.util.TestFileUtil; |
||||
|
import org.junit.Ignore; |
||||
|
import org.junit.Test; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
|
||||
|
import java.io.File; |
||||
|
import java.io.FileNotFoundException; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 读的常见写法 |
||||
|
* |
||||
|
* @author Jiaju Zhuang |
||||
|
*/ |
||||
|
@Ignore |
||||
|
public class ReadTest { |
||||
|
|
||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(ReadTest.class); |
||||
|
|
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 读多个或者全部sheet,这里注意一个sheet不能读取多次,多次读取需要重新读取文件 |
||||
|
* <p> |
||||
|
* 1. 创建excel对应的实体对象 参照{@link DemoData} |
||||
|
* <p> |
||||
|
* 2. 由于默认一行行的读取excel,所以需要创建excel一行一行的回调监听器,参照{@link DemoDataListener} |
||||
|
* <p> |
||||
|
* 3. 直接读即可 |
||||
|
*/ |
||||
|
@Test |
||||
|
public void repeatedRead() throws FileNotFoundException { |
||||
|
String fileName = ""; |
||||
|
/* String fileName = TestFileUtil.getPath() + File.separator + "评价指标体系算法需求-备注.xlsx"; |
||||
|
// 读取全部sheet
|
||||
|
// 这里需要注意 DemoDataListener的doAfterAllAnalysed 会在每个sheet读取完毕后调用一次。然后所有sheet都会往同一个DemoDataListener里面写
|
||||
|
EasyExcel.read(fileName, IndexModel.class, new DemoDataListener()).doReadAll(); |
||||
|
*/ |
||||
|
// 读取部分sheet
|
||||
|
String excelName = "评价指标体系算法需求-备注.xlsx"; |
||||
|
fileName = TestFileUtil.getPath() + File.separator + excelName; |
||||
|
//fileName = this.getClass().getResource(File.separator).getPath().concat(excelName);
|
||||
|
ExcelReader excelReader = null; |
||||
|
try { |
||||
|
//ExcelImportUtil.importExcel(null);
|
||||
|
|
||||
|
//EasyExcel.read(new FileInputStream(new File(fileName)),IndexModel.class);
|
||||
|
excelReader = EasyExcel.read(fileName).build(); |
||||
|
// 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
|
||||
|
ReadSheet readSheet1 = |
||||
|
EasyExcel.readSheet(0).head(IndexModel.class).registerReadListener(new DemoDataListener()).build(); |
||||
|
ReadSheet readSheet2 = |
||||
|
EasyExcel.readSheet(1).head(IndexModel.class).registerReadListener(new DemoDataListener()).build(); |
||||
|
// 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
|
||||
|
excelReader.read(readSheet2); |
||||
|
} finally { |
||||
|
if (excelReader != null) { |
||||
|
// 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
|
||||
|
excelReader.finish(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
package com.epmet.stats.test.util; |
||||
|
|
||||
|
import java.io.File; |
||||
|
import java.io.InputStream; |
||||
|
|
||||
|
public class TestFileUtil { |
||||
|
|
||||
|
public static InputStream getResourcesFileInputStream(String fileName) { |
||||
|
return Thread.currentThread().getContextClassLoader().getResourceAsStream("" + fileName); |
||||
|
} |
||||
|
|
||||
|
public static String getPath() { |
||||
|
return TestFileUtil.class.getResource("/").getPath(); |
||||
|
} |
||||
|
|
||||
|
public static File createNewFile(String pathName) { |
||||
|
File file = new File(getPath() + pathName); |
||||
|
if (file.exists()) { |
||||
|
file.delete(); |
||||
|
} else { |
||||
|
if (!file.getParentFile().exists()) { |
||||
|
file.getParentFile().mkdirs(); |
||||
|
} |
||||
|
} |
||||
|
return file; |
||||
|
} |
||||
|
|
||||
|
public static File readFile(String pathName) { |
||||
|
return new File(getPath() + pathName); |
||||
|
} |
||||
|
|
||||
|
public static File readUserHomeFile(String pathName) { |
||||
|
return new File(System.getProperty("user.home") + File.separator + pathName); |
||||
|
} |
||||
|
} |
Binary file not shown.
Loading…
Reference in new issue