Commit 8bd31a9b authored by zhaowei's avatar zhaowei

Merge branch 'master' of https://gitlab.infra.miyatech.com/draw/draw

# Conflicts:
#	src/main/resources/application-prod.yml
#	src/main/resources/bussiness-config.yml
parents 3093aaa6 9f85c163
......@@ -188,6 +188,7 @@
<artifactId>xxl-job-core</artifactId>
<version>${xxljob.version}</version>
</dependency>
<dependency><!--参数转换-->
<groupId>ma.glasnost.orika</groupId>
<artifactId>orika-core</artifactId>
......@@ -206,6 +207,12 @@
<version>2.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.0.3</version>
</dependency>
</dependencies>
......
package com.miya.draw;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.support.ExcelTypeEnum;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
/**
* 自定义Excel处理类
*
* @author jack
* @since 2020/12/9
*/
public class EasyExcelUtil {
/**
* 读取 Excel
*
* @param excel 文件
* @return Excel 数据 list
*/
public static List<Object> readExcel(MultipartFile excel, Class classz) throws IOException {
ExcelListener excelListener = new ExcelListener();
// 这里 需要指定读用哪个class去读,然后读取第一个sheet
EasyExcel.read(excel.getInputStream(), classz, excelListener).sheet().doRead();
return excelListener.getList();
}
/**
* 读取 Excel
*
* @return Excel 数据 list
*/
public static List<Object> readExcel(InputStream inputStream, String extension, Class classz) {
ExcelListener excelListener = new ExcelListener();
// 这里 需要指定读用哪个class去读,然后读取第一个sheet
EasyExcel.read(inputStream, classz, excelListener).
// 不知道为什么流读取不到excelType
excelType(("." + extension).equalsIgnoreCase(ExcelTypeEnum.XLSX.getValue()) ? ExcelTypeEnum.XLSX
: ExcelTypeEnum.XLS).sheet().headRowNumber(1).doRead();
return excelListener.getList();
}
}
package com.miya.draw;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
/**
* 模板的读取类
* 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,
* 然后里面用到spring可以构造方法传进去
*/
@Slf4j
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
public class ExcelListener extends AnalysisEventListener {
/**
* 每隔5条存储数据库,实际使用中可以3000条,然后清理list ,方便内存回收
*/
private static final int BATCH_COUNT = 5;
List<Object> list = new ArrayList<>();
/**
* 这个每一条数据解析都会来调用
*
* @param data one row value. Is is same as {@link AnalysisContext#readRowHolder()}
* @param context
*/
@Override
public void invoke(Object data, AnalysisContext context) {
log.debug("解析到一条数据:{}", JSON.toJSONString(data));
list.add(data);
}
/**
* 所有数据解析完成了 都会来调用
*
* @param context
*/
@Override
public void doAfterAllAnalysed(AnalysisContext context) {
log.debug("所有数据解析完成!");
}
}
\ No newline at end of file
package com.miya.draw;
import com.alibaba.fastjson.JSON;
import com.miya.draw.entity.ActivityGoods;
import com.miya.draw.manager.IDrawManager;
import com.miya.draw.manager.IOtherManager;
import com.miya.draw.model.SyncTradeConfigModel;
import com.miya.draw.service.IActivityGoodsService;
import com.miya.draw.util.OrikaUtil;
import com.miya.draw.xxljob.DrawResultSyncJob;
import com.miya.draw.xxljob.TradeSyncJob;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.http.entity.ContentType;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
@SpringBootTest
class DrawApplicationTests {
@Autowired
protected TradeSyncJob tradeSyncJob;
@Autowired
protected DrawResultSyncJob drawResultSyncJob;
@Autowired
protected IDrawManager drawManager;
@Test
void contextLoads() {
}
@Test
public void testSyncJob() throws Exception {
SyncTradeConfigModel model = new SyncTradeConfigModel();
model.setMaxSize(3);
model.setWriteUnit(3);
tradeSyncJob.execute(null);
}
@Test
public void testSyncJob1() throws Exception {
SyncTradeConfigModel model = new SyncTradeConfigModel();
model.setMaxSize(10);
drawResultSyncJob.execute(JSON.toJSONString(model));
}
@Test
public void testJob1() throws Exception {
for (int i = 0; i < 10000; i++) {
drawManager.drawClick("15314614603");
}
}
@Autowired
private IOtherManager otherManager;
@Test
public void testSendCoupon() {
otherManager.sendCoupon("123", "", 1L);
}
@Resource
private IActivityGoodsService activityGoodsService;
@Test
public void insertGoods() throws IOException {
String path = "C:\\Users\\Administrator\\Desktop\\2.xlsx";
File file = new File(path);
FileInputStream fileInputStream = new FileInputStream(file);
MultipartFile multipartFile = new MockMultipartFile("copy" + file.getName(), file.getName(), ContentType.APPLICATION_OCTET_STREAM.toString(), fileInputStream);
List<Object> objects = EasyExcelUtil.readExcel(multipartFile, Model1.class);
List<Model1> model1List;
model1List = OrikaUtil.convertList(objects.stream().skip(1).collect(Collectors.toList()), Model1.class);
System.err.println(JSON.toJSONString(model1List));
System.err.println(model1List.size());
List<ActivityGoods> activityGoodsList = model1List.stream()
.map(x -> {
ActivityGoods activityGoods = OrikaUtil.convert(x, ActivityGoods.class);
activityGoods.setActivityId(3L);
activityGoods.setValidState(1);
activityGoods.setCreateTime(LocalDateTime.now());
activityGoods.setUpdateTime(LocalDateTime.now());
return activityGoods;
}).collect(Collectors.toList());
activityGoodsService.saveBatch(activityGoodsList);
}
@Data
public static class Model1 implements Serializable, Cloneable {
private String type1;
private String type2;
@ApiModelProperty(value = "货号")
private String code;
private String type3;
private String type4;
@ApiModelProperty(value = "新小类")
private String newType;
private String type5;
@ApiModelProperty(value = "活动商品名称")
private String goodsName;
@ApiModelProperty(value = "条形码")
private String barcode;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment