
edi.rule.model.JSRuleImport Maven / Gradle / Ivy
package edi.rule.model;
import java.io.File;
import java.util.*;
import java.util.Map.Entry;
import com.fasterxml.jackson.annotation.JsonIgnore;
import edi.rule.annotation.JSRuleCheck;
import edi.rule.annotation.JSRuleInject;
import edi.rule.config.JSRuleMessage;
import edi.rule.core.JSRuleArgsVessel;
import edi.rule.extend.interfaces.IJSRuleActionModel;
import edi.rule.util.*;
import edi.rule.work.cache.JSRuleFrameCache;
import edi.rule.work.cache.JSRuleFieldInfo;
import edi.rule.work.constant.ZSConstant;
import edi.rule.work.custom.JSRuleException;
import edi.rule.work.processor.JSSAXSheetContent;
import lombok.Data;
/**
* @author 摩拉克斯
* @date 2022年6月30日 下午2:37:51
* 导入对象
*/
@Data
public class JSRuleImport> implements IJSRuleActionModel{
/**
* 导入csv对象
* */
@JSRuleCheck
public JSRuleImportCsv csv;
/**
* 导入excel对象
* */
@JSRuleCheck
public JSRuleImportExcel excel;
@JSRuleInject
@JsonIgnore
private JSRuleArgsVessel vessel;
@Override
public final Object start(A action) {
JSRuleImportCsv csv = getCsv();
JSRuleImportExcel excel = getExcel();
File file = null;
JSRuleUpload uploads = null;
try {
if (csv != null){
uploads = csv.getUploads();
file = initFile(uploads,action,ZSConstant.CSV_SUFFIX);
csv.setFile(file);
A csvAction = csv.getAction();
checkImportsAction(csvAction,"");
csvAction.getAdd().setData(ZSIo.ZSCsv.parseCsvFile(csv.getFile()));
return startAction(csvAction,vessel);
}else if (excel != null) {
uploads = excel.getUploads();
file = initFile(excel.getUploads(),action,ZSConstant.EXCEL_2007U_SUFFIX);
excel.setFile(file);
List actions = ZSRule.actionsInstance();
A sheetAction;
int i=0;
for (JSRuleImportSheet sheet:excel.getSheets()) {
sheetAction = sheet.getAction();
checkImportsAction(sheetAction,"sheet"+(i+1));
actions.add(ZSRule.buildPlugin(sheetAction.getName(), sheetAction.getAdd(),sheetAction.getDefine()));
if (ZSVessel.isEmpty(sheet.getFieldMappings())) {
Map imports = new HashMap<>();
for (Entry fieldInfoEntry:JSRuleFrameCache.getMappingInfo(sheetAction.getAdd().getClassName(),sheetAction.getName()).classFieldsInfo.entrySet()) {
imports.putAll(fieldInfoEntry.getValue().imports);
}
sheet.setFieldMappings(imports);
}
i++;
}
i=0;
for (JSSAXSheetContent content:ZSPoi.getExcelContent(excel)) {
actions.get(i).getAdd().setData(content.getResult());
i++;
}
return startActions(preStartActions(actions), vessel).getResult();
}
throw new JSRuleException(JSRuleMessage.read("unknown.imports.type"));
}finally {
if (isTempFile(uploads)) {
file.delete();
}
}
}
private void checkImportsAction(A action, String additional){
if(action==null){
throw new JSRuleException(JSRuleMessage.read("missing.action.model"),additional);
}
if (action.getAdd()==null){
throw new JSRuleException(action.cache.name,JSRuleMessage.read("missing.add.model"),additional);
}
if (ZSString.isBlank(action.getAdd().getClassName())){
throw new JSRuleException(action.cache.name,JSRuleMessage.read("missing.property.classes"),additional);
}
}
private File initFile(JSRuleUpload uploads,A action,String suffix){
File file;
if (isTempFile(uploads)){
if (ZSString.isBlank(uploads.getBase64Data())) {
throw new JSRuleException(action.cache.name, JSRuleMessage.read("the.property.of.base64Data.or.path.can't.be.all.empty"));
}
file = uploads.createTempFile(ZSString.getUUid(), suffix);
ZSIo.bytesToFile(Base64.getMimeDecoder().decode(uploads.getBase64Data()),file);
}else {
file = new File(uploads.getPath());
}
return file;
}
private boolean isTempFile(JSRuleUpload uploads){
return uploads!=null&&ZSString.isBlank(uploads.getPath(false));
}
/**
* 导入前将准备调用引擎处理的actions扩展给其子类,重写此方法可自定义处理actions,该actions用于调用add组件处理待插入的数据
* @param actions 待处理的actions对象
* @return 返回处理后的actions集合
* */
protected List preStartActions(List actions) {
return actions;
}
}