1:枚举的调用,dataType.saveOrUpdate(data, entryService, true, true);
2: List<Object> data = parseData.queryMediaData(dataType);
要点:
A: 使用switch配合枚举的使用。灵活运用。
B: 枚举可以传入entryService Bean进行业务处理。
try (FileInputStream fileInputStream = new FileInputStream(logFile);) {
List<String> list = IOUtils.readLines(fileInputStream, "UTF-8");
if (CollectionUtils.isNotEmpty(list)) {
for (String str : list) {
switch (dataType) {
case COLUMN:
dataList.addAll(json2BColumn(str, DataType.COLUMN, currDate, tencentData));
break;
case COVER:
dataList.addAll(json2BCover(str, DataType.COVER, currDate, tencentData));
break;
case VIDEO:
dataList.addAll(json2BVideo(str, DataType.VIDEO, currDate, tencentData));
break;
case CHANGE_VIDEO:
dataList.addAll(json2ChangeVideo(str, DataType.CHANGE_VIDEO, currDate, tencentData));
break;
default:
throw new RuntimeException("unknown data type, dataType is: " + dataType);
}
}
}
// saveOrUpdateTencentData(tencentData);
}
public enum DataType {
VIDEO(000, "video") {
@Override
public Integer getState(Object obj) {
BVideo bVideo = (BVideo) obj;
return bVideo.getState();
}
@Override
public int inject(List<Object> data, InjectService injectService, EntryService entryService) {
List<CdnRecord> list = new ArrayList<>();
data.forEach(o -> {
CdnRecord record = (CdnRecord) o;
list.add(record);
});
try {
return injectService.injectCdnRecord(list);
}
catch (Exception e) {
throw new RuntimeException(String.format("inject error"), e);
}
}
@Override
public int saveOrUpdate(List<Object> validData, EntryService entryService, boolean isImport, boolean isApproval) {
List<BVideo> bVideoValidList = new ArrayList<>();
validData.forEach(o -> bVideoValidList.add((BVideo) o));
return entryService.saveOrUpdateBVideo(bVideoValidList, isImport, isApproval);
}
},
COVER(001, "cover") {
@Override
public Integer getState(Object obj) {
BCover bCover = (BCover) obj;
return bCover.getState();
}
@Override
public int inject(List<Object> data, InjectService injectService, EntryService entryService) {
List<TIptvsyncRecord> list = new ArrayList<>();
data.forEach(o -> {
TIptvsyncRecord iptv = (TIptvsyncRecord) o;
list.add(iptv);
});
try {
return injectService.injectIPTV(list);
}
catch (Exception e) {
throw new RuntimeException(String.format("inject error"), e);
}
}
@Override
public int saveOrUpdate(List<Object> validData, EntryService entryService, boolean isImport, boolean isApproval) {
List<BCover> bCoverValidList = new ArrayList<>();
validData.forEach(o -> bCoverValidList.add((BCover) o));
return entryService.saveOrUpdateBCover(bCoverValidList, isImport, isApproval);
}
},
COLUMN(002, "column") {
@Override
public Integer getState(Object obj) {
BColumn bColumn = (BColumn) obj;
return bColumn.getState();
}
@Override
public int inject(List<Object> data, InjectService injectService, EntryService entryService) {
throw new RuntimeException("column not support inject");
}
@Override
public int saveOrUpdate(List<Object> validData, EntryService entryService, boolean isImport, boolean isApproval) {
List<BColumn> bcvList = new ArrayList<>();
validData.forEach(o -> bcvList.add((BColumn) o));
return entryService.saveOrUpdateBColumn(bcvList, isImport, isApproval);
}
},
CHANGE_VIDEO(-003, "changevideo") {
@Override
public Integer getState(Object obj) {
return 0;
}
@Override
public int inject(List<Object> data, InjectService injectService, EntryService entryService) {
throw new RuntimeException("change video not support inject");
}
@Override
public int saveOrUpdate(List<Object> validData, EntryService entryService, boolean isImport, boolean isApproval) {
List<ChangeVideo> cvvList = new ArrayList<>();
validData.forEach(o -> cvvList.add((ChangeVideo) o));
return entryService.saveOrUpdateChangeVideo(cvvList, isImport, isApproval);
}
};
/**
* 数据类型转换为枚举
*
* @param type
* @return
*/
public static DataType getDataType(int type) {
DataType[] values = DataType.values();
for (DataType dataType : values) {
if (dataType.type == type) {
return dataType;
}
}
throw new RuntimeException("undefined data type!");
}
private int type;
private String typeName;
private DataType(int type, String typeName) {
this.type = type;
this.typeName = typeName;
}
/**
* 获取对象状态
*
* @param obj 对象实例
* @return
*/
public abstract Integer getState(Object obj);
public int getType() {
return this.type;
}
public String getTypeName() {
return this.typeName;
}
/**
* 成功注入数量
*
* @param data 需要注入的数据
* @param injectService 注入服务
* @param entryService 保存数据服务
* @return
*/
public abstract int inject(List<Object> data, InjectService injectService, EntryService entryService);
/**
* 保存或更新对象,该方法会级联操作对象下的图片对象
*
* @param validData 需要保存对象的列表
* @param entryService 实际执行的服务类接口
* @param isImport 是否导入
* @param isApproval 是否审批
* @return 影响行数
*/
public abstract int saveOrUpdate(List<Object> data, EntryService entryService, boolean isImport, boolean isApproval);
}