824 lines
36 KiB
Plaintext
Raw Normal View History

2025-06-30 09:38:03 +08:00
#set($mapObject ="Map<String, Object>")
## 导入实例信息添加
#macro(TemlateDownloadDemo $MapName $Field)
#set($key = $Field.config.jnpfKey)
#set($mul = $Field.multiple)
#set($level = $Field.level)
#set($vModelThis = $Field.vModel)
#if($Field.beforeVmodel)
#set($vModelThis = $Field.beforeVmodel)
#end
#if($key == "createUser" || $key == "modifyUser" || $key == "createTime" || $key == "modifyTime" || $key == "currOrganize" || $key == "currPosition" || $key == "currDept" || $key == "billRule")
${MapName}.put("${vModelThis}", "系统自动生成");
#elseif($key == 'organizeSelect')
#if($mul)
${MapName}.put("${vModelThis}", "例:引迈信息/产品部,引迈信息/技术部");
#else
${MapName}.put("${vModelThis}", "例:引迈信息/技术部");
#end
#elseif($key == "depSelect")
#if($mul)
${MapName}.put("${vModelThis}", "例:产品部/部门编码,技术部/部门编码");
#else
${MapName}.put("${vModelThis}", "例:技术部/部门编码");
#end
#elseif($key == "posSelect")
#if($mul)
${MapName}.put("${vModelThis}", "例:技术经理/岗位编码,技术员/岗位编码");
#else
${MapName}.put("${vModelThis}", "例:技术员/岗位编码");
#end
#elseif($key == "userSelect")
#if($mul)
${MapName}.put("${vModelThis}", "例:张三/账号,李四/账号");
#else
${MapName}.put("${vModelThis}", "例:张三/账号");
#end
#elseif($key == "usersSelect")
#if($mul)
${MapName}.put("${vModelThis}", "例:方方/账号,技术部/部门编码");
#else
${MapName}.put("${vModelThis}", "例:方方/账号");
#end
#elseif($key == "roleSelect")
#if($mul)
${MapName}.put("${vModelThis}", "例:研发人员/角色编码,测试人员/角色编码");
#else
${MapName}.put("${vModelThis}", "例:研发人员/角色编码");
#end
#elseif($key == "groupSelect")
#if($mul)
${MapName}.put("${vModelThis}", "例:A分组/分组编码,B分组/分组编码");
#else
${MapName}.put("${vModelThis}", "例:A分组/分组编码");
#end
#elseif($key == 'datePicker')
${MapName}.put("${vModelThis}", "例: ${Field.format}");
#elseif($key == 'timePicker')
${MapName}.put("${vModelThis}", "例: ${Field.format}");
#elseif($key == 'areaSelect')
#if($level==0)
#if($mul)
${MapName}.put("${vModelThis}", "例:福建省,广东省");
#else
${MapName}.put("${vModelThis}", "例:福建省");
#end
#elseif($level==1)
#if($mul)
${MapName}.put("${vModelThis}", "例:福建省/莆田市,广东省/广州市");
#else
${MapName}.put("${vModelThis}", "例:福建省/莆田市");
#end
#elseif($level==2)
#if($mul)
${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区,广东省/广州市/荔湾区");
#else
${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区");
#end
#elseif($level==3)
#if($mul)
${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区/霞林街道,广东省/广州市/荔湾区/沙面街道");
#else
${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区/霞林街道");
#end
#end
#else
${MapName}.put("${vModelThis}", "");
#end
#end
## 主子副entity转成map isGetInfo是否不转换数据详情 isDetail 是否转换数据的详情
#macro(EntityToMap)
${mapObject} ${name}Map=JsonUtil.entityToMap(entity);
${name}Map.put("id", ${name}Map.get("${pKeyNameOriginal}"));
//副表数据
#foreach($child in ${columnTableHandle})
${child.modelUpName}Entity ${child.modelLowName}Entity = entity.get${child.modelUpName}();
if(ObjectUtil.isNotEmpty(${child.modelLowName}Entity)){
${mapObject} ${child.modelLowName}Map=JsonUtil.entityToMap(${child.modelLowName}Entity);
for(String key:${child.modelLowName}Map.keySet()){
${name}Map.put("jnpf_${child.tableName}_jnpf_"+key,${child.modelLowName}Map.get(key));
}
}
#end
//子表数据
#foreach($grid in ${childTableHandle})
List<${grid.aliasUpName}Entity> ${grid.aliasLowName}List = entity.get${grid.aliasUpName}();
${name}Map.put("${grid.tableModel}",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(${grid.aliasLowName}List)));
${name}Map.put("${grid.aliasLowName}List",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(${grid.aliasLowName}List)));
#end
#end
###########################以上为通用宏以下是controller方法#################################
## 获取列表信息
#macro(GetList)
/**
* 列表
*
* @param ${name}Pagination
* @return
*/
@Operation(summary = "获取列表")
@PostMapping("/getList")
public ActionResult list(@RequestBody ${Name}Pagination ${name}Pagination)throws Exception{
List<${table.entityName}> list= ${serviceName}.getList(${name}Pagination);
List<${mapObject}> realList=new ArrayList<>();
for (${Name}Entity entity : list) {
#EntityToMap()
realList.add(${name}Map);
}
//数据转换
boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" ));
realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getFormData(), ${Name}Constant.getColumnData(), ${name}Pagination.getModuleId(),isPc?${lineEdit}:false);
#if($isFlow)
//流程状态添加
generaterSwapUtil.getFlowStatus(realList);
#end
#if($treeTable || $groupTable)
if(isPc){
//分组和树形的树形数据转换
realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getColumnData(), "${peimaryKeyname}");
}
#end
//返回对象
PageListVO vo = new PageListVO();
vo.setList(realList);
PaginationVO page = JsonUtil.getJsonToBean(${name}Pagination, PaginationVO.class);
vo.setPagination(page);
return ActionResult.success(vo);
}
#end
## 新增
#macro(CreateMethod)
/**
* 创建
*
* @param ${name}Form
* @return
*/
@PostMapping(#if($isFlow)"/{id}"#end)
@Operation(summary = "创建")
public ActionResult create(#if($isFlow)@PathVariable("id") String id, #end@RequestBody @Valid ${Name}Form ${name}Form) {
String b = ${serviceName}.checkForm(${name}Form,0);
if (StringUtil.isNotEmpty(b)){
return ActionResult.fail(b );
}
try{
${name}Service.saveOrUpdate(${name}Form,#if($isFlow) id #else null #end,true);
}catch(Exception e){
return ActionResult.fail(MsgCode.FA028.get());
}
return ActionResult.success(MsgCode.SU001.get());
}
#end
## 编辑
#macro(UpdateMethod)
/**
* 编辑
* @param id
* @param ${name}Form
* @return
*/
@PutMapping("/{id}")
@Operation(summary = "更新")
public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid ${Name}Form ${name}Form,
@RequestParam(value = "isImport", required = false) boolean isImport){
${Name}Entity entity= ${name}Service.getInfo(id);
if(entity!=null){
${name}Form.set${peimaryKeyName}(String.valueOf(entity.get${peimaryKeyName}()));
if (!isImport) {
String b = ${name}Service.checkForm(${name}Form,1);
if (StringUtil.isNotEmpty(b)){
return ActionResult.fail(b );
}
}
try{
${name}Service.saveOrUpdate(${name}Form,id,false);
}catch (DataException e1){
return ActionResult.fail(e1.getMessage());
}catch(Exception e){
return ActionResult.fail(MsgCode.FA029.get());
}
return ActionResult.success(MsgCode.SU004.get());
}else{
return ActionResult.fail(MsgCode.FA002.get());
}
}
#end
## 获取详情(不转数据)
#macro(GetInfoMethod)
/**
* 获取详情(编辑页)
* 编辑页面使用-不转换数据
* @param id
* @return
*/
@Operation(summary = "信息")
@GetMapping("/{id}")
public ActionResult info(@PathVariable("id") String id){
${Name}Entity entity= ${name}Service.getInfo(id);
if(entity==null){
return ActionResult.fail(MsgCode.FA001.get());
}
##
#EntityToMap()
${name}Map = generaterSwapUtil.swapDataForm(${name}Map,${Name}Constant.getFormData(),${Name}Constant.TABLEFIELDKEY,${Name}Constant.TABLERENAMES);
return ActionResult.success(${name}Map);
}
#end
## 详情(转换数据)
#macro(GetDetailMethod)
/**
* 表单信息(详情页)
* 详情页面使用-转换数据
* @param id
* @return
*/
@Operation(summary = "表单信息(详情页)")
@GetMapping("/detail/{id}")
public ActionResult detailInfo(@PathVariable("id") String id){
${Name}Entity entity= ${name}Service.getInfo(id);
if(entity==null){
return ActionResult.fail(MsgCode.FA001.get());
}
#EntityToMap()
boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" ));
${name}Map = generaterSwapUtil.swapDataDetail(${name}Map,${Name}Constant.getFormData(),"${VisualDevId}",isPc?${lineEdit}:false);
//子表数据
#foreach($grid in ${childTableHandle})
${name}Map.put("${grid.aliasLowName}List",${name}Map.get("${grid.tableModel}"));
#end
return ActionResult.success(${name}Map);
}
#end
## 删除
#macro(DeleteMethod)
/**
* 删除
* @param id
* @return
*/
@Operation(summary = "删除")
@DeleteMapping("/{id}")
#if(${DS})
@DSTransactional
#else
@Transactional
#end
public ActionResult delete(@PathVariable("id") String id,@RequestParam(name = "forceDel",defaultValue = "false") boolean forceDel) throws Exception{
${Name}Entity entity= ${name}Service.getInfo(id);
if(entity!=null){
#if($isFlow)
if(!forceDel){
String errMsg = generaterSwapUtil.deleteFlowTask(entity.getFlowTaskId());
if (StringUtil.isNotEmpty(errMsg)) {
throw new DataException(errMsg);
}
}
#end
#if($logicalDelete)
//假删除
entity.setDeleteMark(1);
entity.setDeleteUserId(userProvider.get().getUserId());
entity.setDeleteTime(new Date());
${name}Service.setIgnoreLogicDelete().updateById(entity);
#else
//主表数据删除
${name}Service.delete(entity);
## 副表
#if(${columnTableHandle.size()}>0)
#foreach($cl in ${columnTableHandle})
QueryWrapper<${cl.modelUpName}Entity> queryWrapper${cl.modelUpName}=new QueryWrapper<>();
queryWrapper${cl.modelUpName}.lambda().eq(${cl.modelUpName}Entity::get${cl.relationUpField},entity.get${cl.mainUpKey}());
//副表数据删除
${cl.modelLowName}Service.remove(queryWrapper${cl.modelUpName});
#end
#end
## 子表
#foreach($tableModel in ${childTableHandle})
#set($mainFeild="${tableModel.relationField}")
#set($MainFeild="${tableModel.relationField.substring(0,1).toUpperCase()}${tableModel.relationField.substring(1)}")
#set($childFeild="${tableModel.tablefield}")
#set($ChildFeild="${tableModel.tablefield.substring(0,1).toUpperCase()}${tableModel.tablefield.substring(1)}")
QueryWrapper<${tableModel.aliasUpName}Entity> queryWrapper${tableModel.aliasUpName}=new QueryWrapper<>();
queryWrapper${tableModel.aliasUpName}.lambda().eq(${tableModel.aliasUpName}Entity::get${ChildFeild},entity.get${MainFeild}());
//子表数据删除
${tableModel.aliasLowName}Service.remove(queryWrapper${tableModel.aliasUpName});
#end
#end
}
return ActionResult.success(MsgCode.SU003.get());
}
#end
## 批量删除
#macro(BatchRemoveMethod)
/**
* 批量删除
* @param obj
* @return
*/
@DeleteMapping("/batchRemove")
#if(${DS})
@DSTransactional
#else
@Transactional
#end
@Operation(summary = "批量删除")
public ActionResult batchRemove(@RequestBody Object obj){
$mapObject objectMap = JsonUtil.entityToMap(obj);
List<String> idList = JsonUtil.getJsonToList(objectMap.get("ids"), String.class);
String errInfo = "";
List<String> successList = new ArrayList<>();
for (String allId : idList){
try {
this.delete(allId,false);
successList.add(allId);
} catch (Exception e) {
errInfo = e.getMessage();
}
}
if (successList.size() == 0 && StringUtil.isNotEmpty(errInfo)){
return ActionResult.fail(errInfo);
}
return ActionResult.success(MsgCode.SU003.get());
}
#end
## 批量打印
#macro(BatchPrintMethod)
#end
## 导入
#macro(UploaderMethod)
@Operation(summary = "上传文件")
@PostMapping("/Uploader")
public ActionResult<Object> Uploader() {
List<MultipartFile> list = UpUtil.getFileAll();
MultipartFile file = list.get(0);
if (file.getOriginalFilename().endsWith(".xlsx") || file.getOriginalFilename().endsWith(".xls")) {
String filePath = XSSEscape.escape(configValueUtil.getTemporaryFilePath());
String fileName = XSSEscape.escape(RandomUtil.uuId() + "." + UpUtil.getFileType(file));
//上传文件
#if(${isCloud}=="cloud")
FileInfo fileInfo = fileUploadApi.uploadFile(file, filePath, fileName);
#else
FileInfo fileInfo = FileUploadUtils.uploadFile(file, filePath, fileName);
#end
DownloadVO vo = DownloadVO.builder().build();
vo.setName(fileInfo.getFilename());
return ActionResult.success(vo);
} else {
return ActionResult.fail(MsgCode.FA017.get());
}
}
/**
* 模板下载
*
* @return
*/
@Operation(summary = "模板下载")
@GetMapping("/TemplateDownload")
public ActionResult<DownloadVO> TemplateDownload(@RequestParam("menuId") String menuId){
DownloadVO vo = DownloadVO.builder().build();
UserInfo userInfo = userProvider.get();
String menuFullName = generaterSwapUtil.getMenuName(menuId);
//主表对象
List<ExcelExportEntity> entitys = new ArrayList<>();
List<String> selectKeys = new ArrayList<>();
//以下添加字段
## 导入字段添加到entity
#foreach($fieldModel in $importFields)
#set($config = $fieldModel.config)
#set($vModel = ${fieldModel.vModel})
#if($vModel.toLowerCase().startsWith("tablefield"))
//${vModel}子表对象
ExcelExportEntity ${vModel}ExcelEntity = new ExcelExportEntity("${fieldModel.label}(${vModel})","${vModel}");
List<ExcelExportEntity> ${vModel}ExcelEntityList = new ArrayList<>();
#foreach($child in ${fieldModel.childList})
#set($itemFields =$child.fieLdsModel)
${vModel}ExcelEntityList.add(new ExcelExportEntity("${itemFields.config.label}($vModel-${itemFields.vModel})" ,"${itemFields.vModel}"));
selectKeys.add("$vModel-${itemFields.vModel}");
#end
${vModel}ExcelEntity.setList(${vModel}ExcelEntityList);
if(${vModel}ExcelEntityList.size() > 0){
entitys.add(${vModel}ExcelEntity);
}
#else
entitys.add(new ExcelExportEntity("${config.label}($vModel)" ,"$vModel"));
selectKeys.add("${vModel}");
#end
#end
ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),selectKeys);
List<${mapObject}> list = new ArrayList<>();
list.add(excelModel.getDataMap());
ExportParams exportParams = new ExportParams(null, menuFullName + "模板");
exportParams.setStyle(ExcelExportStyler.class);
exportParams.setType(ExcelType.XSSF);
try{
@Cleanup Workbook workbook = new HSSFWorkbook();
if (entitys.size()>0){
if (list.size()==0){
list.add(new HashMap<>());
}
//复杂表头-表头和数据处理
ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class);
List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false);
list = VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false);
}
## excel处理
workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list);
ExcelHelper helper = new ExcelHelper();
helper.init(workbook, exportParams, entitys, excelModel);
helper.doPreHandle();
helper.doPostHandle();
}
String fileName = menuFullName + "导入模板.xls";
MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
#if(${isCloud}=="cloud")
String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY);
FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName);
#else
String temporaryFilePath = configValueUtil.getTemporaryFilePath();
FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
#end
vo.setName(fileInfo.getFilename());
vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
} catch (Exception e) {
log.error("模板信息导出Excel错误:{}", e.getMessage());
e.printStackTrace();
}
return ActionResult.success(vo);
}
/**
* 导入预览
*
* @return
*/
@Operation(summary = "导入预览" )
@GetMapping("/ImportPreview")
public ActionResult<${mapObject}> ImportPreview(String fileName) throws Exception {
${mapObject} headAndDataMap = new HashMap<>(2);
#if(${isCloud}=="cloud")
String filePath = fileApi.getLocalBasePath() + configValueUtil.getTemporaryFilePath();
UploadFileModel uploadFileModel =new UploadFileModel();
uploadFileModel.setFolderName(filePath);
uploadFileModel.setObjectName(fileName);
fileUploadApi.downToLocal(uploadFileModel);
#else
String filePath = FileUploadUtils.getLocalBasePath() + configValueUtil.getTemporaryFilePath();
FileUploadUtils.downLocal(configValueUtil.getTemporaryFilePath(), filePath, fileName);
#end
File temporary = new File(XSSEscape.escapePath(filePath + fileName));
#if($importHasChildren || ${complexFieldList.size()} > 0)
int headerRowIndex = 2;
#else
int headerRowIndex = 1;
#end
ImportParams params = new ImportParams();
params.setTitleRows(0);
params.setHeadRows(headerRowIndex);
params.setNeedVerify(true);
try {
InputStream inputStream = ExcelUtil.solveOrginTitle(temporary, headerRowIndex);
List<Map> excelDataList = ExcelUtil.importExcelByInputStream(inputStream, 0, headerRowIndex, Map.class);
//数据超过1000条
if(excelDataList != null && excelDataList.size() > 1000) {
return ActionResult.fail(MsgCode.ETD117.get());
}
ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class);
UploaderTemplateModel uploaderTemplateModel = JsonUtil.getJsonToBean(columnDataModel.getUploaderTemplateJson(), UploaderTemplateModel.class);
List<String> selectKey = uploaderTemplateModel.getSelectKey();
//子表合并
List<$mapObject> results = FormExecelUtils.dataMergeChildTable(excelDataList,selectKey);
// 导入字段
List<ExcelImFieldModel> columns = new ArrayList<>();
## 添加导入所有字段信息
#foreach($fieldModel in $importFieldsNew)
#set($config = $fieldModel.config)
#set($vModel = ${fieldModel.vModel})
#if($vModel.toLowerCase().startsWith("tablefield"))
#if(${fieldModel.childList.size()}>0)
//${vModel}子表对象
List<ExcelImFieldModel> ${vModel}columns = new ArrayList<>();
#foreach($child in ${fieldModel.childList})
#set($itemFields =$child.fieLdsModel)
${vModel}columns.add(new ExcelImFieldModel("${itemFields.vModel}" ,"#if(${itemFields.config.required})*#end${itemFields.config.label}"));
#end
columns.add(new ExcelImFieldModel("${vModel}","${fieldModel.label}","table",${vModel}columns));
#end
#elseif($vModel.contains("complexHeader"))
#set($item = ${fieldModel})
#if(${item.childColumns.size()}>0 && ${item.uploadFieldList.size()}>0)
//${item.fullName} 复杂表头对象
List<ExcelImFieldModel> ${item.id}columns = new ArrayList<>();
#foreach($itemFields in ${item.uploadFieldList})
${item.id}columns.add(new ExcelImFieldModel("${itemFields.vModel}" ,"#if(${itemFields.config.required})*#end${itemFields.label}"));
#end
columns.add(new ExcelImFieldModel("${item.id}","${item.fullName}","complexHeader",${item.id}columns));
#end
#else
columns.add(new ExcelImFieldModel("${vModel}","${config.label}","${config.jnpfKey}"));
#end
#end
headAndDataMap.put("dataRow" , results);
headAndDataMap.put("headerRow" , JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(columns)));
} catch (Exception e){
e.printStackTrace();
return ActionResult.fail(MsgCode.VS407.get());
}
return ActionResult.success(headAndDataMap);
}
/**
* 导入数据
*
* @return
*/
@Operation(summary = "导入数据" )
@PostMapping("/ImportData")
public ActionResult<ExcelImportModel> ImportData(@RequestBody VisualImportModel visualImportModel) throws Exception {
List<$mapObject> listData = visualImportModel.getList();
ImportFormCheckUniqueModel uniqueModel = new ImportFormCheckUniqueModel();
uniqueModel.setDbLinkId(${Name}Constant.DBLINKID);
uniqueModel.setUpdate(Objects.equals("${importType}", "2"));
#if($isFlow)uniqueModel.setFlowId(visualImportModel.getFlowId()); #end
Map<String,String> tablefieldkey = new HashMap<>();
for(String key:${Name}Constant.TABLEFIELDKEY.keySet()){
tablefieldkey.put(key,${Name}Constant.TABLERENAMES.get(${Name}Constant.TABLEFIELDKEY.get(key)));
}
ExcelImportModel excelImportModel = generaterSwapUtil.importData(${Name}Constant.getFormData(),listData,uniqueModel, tablefieldkey,${Name}Constant.getTableList());
List<ImportDataModel> importDataModel = uniqueModel.getImportDataModel();
for (ImportDataModel model : importDataModel) {
String id = model.getId();
$mapObject result = model.getResultData();
if(StringUtil.isNotEmpty(id)){
update(id, JsonUtil.getJsonToBean(result,${Name}Form.class), true);
}else {
create(#if($isFlow)RandomUtil.uuId(),#end JsonUtil.getJsonToBean(result,${Name}Form.class));
}
}
return ActionResult.success(excelImportModel);
}
/**
* 导出异常报告
*
* @return
*/
@Operation(summary = "导出异常报告")
@PostMapping("/ImportExceptionData")
public ActionResult<DownloadVO> ImportExceptionData(@RequestBody VisualImportModel visualImportModel) {
DownloadVO vo = DownloadVO.builder().build();
UserInfo userInfo = userProvider.get();
String menuFullName = generaterSwapUtil.getMenuName(visualImportModel.getMenuId());
//主表对象
List<ExcelExportEntity> entitys = new ArrayList<>();
entitys.add(new ExcelExportEntity("异常原因", "errorsInfo",30));
List<String> selectKeys = new ArrayList<>();
//以下添加字段
## 导入字段添加到entity
#foreach($fieldModel in $importFields)
#set($config = $fieldModel.config)
#set($vModel = ${fieldModel.vModel})
#if($vModel.toLowerCase().startsWith("tablefield"))
//${vModel}子表对象
ExcelExportEntity ${vModel}ExcelEntity = new ExcelExportEntity("${fieldModel.label}(${vModel})","${vModel}");
List<ExcelExportEntity> ${vModel}ExcelEntityList = new ArrayList<>();
#foreach($child in ${fieldModel.childList})
#set($itemFields =$child.fieLdsModel)
${vModel}ExcelEntityList.add(new ExcelExportEntity("${itemFields.config.label}($vModel-${itemFields.vModel})" ,"${itemFields.vModel}"));
selectKeys.add("$vModel-${itemFields.vModel}");
#end
${vModel}ExcelEntity.setList(${vModel}ExcelEntityList);
entitys.add(${vModel}ExcelEntity);
#else
entitys.add(new ExcelExportEntity("${config.label}($vModel)" ,"$vModel"));
selectKeys.add("${vModel}");
#end
#end
ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),selectKeys);
List<${mapObject}> list = new ArrayList<>();
list.addAll(visualImportModel.getList());
ExportParams exportParams = new ExportParams(null, menuFullName + "模板");
exportParams.setStyle(ExcelExportStyler.class);
exportParams.setType(ExcelType.XSSF);
exportParams.setFreezeCol(1);
try{
@Cleanup Workbook workbook = new HSSFWorkbook();
if (entitys.size()>0){
if (list.size()==0){
list.add(new HashMap<>());
}
//复杂表头-表头和数据处理
ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class);
List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false);
list = VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false);
}
workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list);
ExcelHelper helper = new ExcelHelper();
helper.init(workbook, exportParams, entitys, excelModel);
helper.doPreHandle();
helper.doPostHandle();
}
String fileName = menuFullName + "错误报告_" + DateUtil.dateNow("yyyyMMddHHmmss") + ".xls";
MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
#if(${isCloud}=="cloud")
String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY);
FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName);
#else
String temporaryFilePath = configValueUtil.getTemporaryFilePath();
FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
#end
vo.setName(fileInfo.getFilename());
vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
} catch (Exception e) {
e.printStackTrace();
}
return ActionResult.success(vo);
}
#end
## 导出
#macro(ExportMethod)
/**
* 导出Excel
*
* @return
*/
@Operation(summary = "导出Excel")
@PostMapping("/Actions/Export")
public ActionResult Export(@RequestBody ${Name}Pagination ${name}Pagination) throws IOException {
if (StringUtil.isEmpty(${name}Pagination.getSelectKey())){
return ActionResult.fail(MsgCode.IMP011.get());
}
List<${table.entityName}> list= ${serviceName}.getList(${name}Pagination);
List<${mapObject}> realList=new ArrayList<>();
for (${Name}Entity entity : list) {
#EntityToMap()
realList.add(${name}Map);
}
//数据转换
realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getFormData(), ${Name}Constant.getColumnData(), ${name}Pagination.getModuleId(),${lineEdit});
String[]keys=!StringUtil.isEmpty(${name}Pagination.getSelectKey())?${name}Pagination.getSelectKey():new String[0];
UserInfo userInfo=userProvider.get();
String menuFullName = generaterSwapUtil.getMenuName(${name}Pagination.getMenuId());
#if(${isCloud}=="cloud")
DownloadVO vo=this.creatModelExcel(fileApi.getPath(FileTypeConstant.TEMPORARY),realList,keys,userInfo,menuFullName);
#else
DownloadVO vo=this.creatModelExcel(configValueUtil.getTemporaryFilePath(),realList,keys,userInfo,menuFullName);
#end
return ActionResult.success(vo);
}
/**
* 导出表格方法
*/
public DownloadVO creatModelExcel(String path,List<${mapObject}>list,String[]keys,UserInfo userInfo,String menuFullName){
DownloadVO vo=DownloadVO.builder().build();
List<ExcelExportEntity> entitys=new ArrayList<>();
if(keys.length>0){
## 子表对象
#foreach($cl in $childTableHandle)
ExcelExportEntity ${cl.tableModel}ExcelEntity = new ExcelExportEntity("${cl.label}(${cl.tableModel})","${cl.tableModel}");
List<ExcelExportEntity> ${cl.tableModel}List = new ArrayList<>();
#end
#set($lineEditName = "#if(${lineEdit})_name#end")
for(String key:keys){
switch(key){
#if($columnListSize.size()>0)
## 主表
#foreach($fieldModel in ${mastTableHandle})
#set($config = $fieldModel.config)
#set($vModel = ${fieldModel.vModel})
#if($vModel)
case "${vModel}" :
entitys.add(new ExcelExportEntity("${config.label}" ,"${vModel}${lineEditName}"));
break;
#end
#end
## 副表
#foreach($clid in $columnTableHandle)
#set($fieLdsModelList = $clid.fieLdsModelList)
#foreach($cf in $fieLdsModelList)
#set($field = ${cf.field})
#if($field)
#set($label = $cf.mastTable.fieLdsModel.config.label)
#set($lowName= ${cf.table.toLowerCase()})
case "${cf.vModel}" :
entitys.add(new ExcelExportEntity("${label}" ,"${cf.vModel}${lineEditName}"));
break;
#end
#end
#end
## 子表
#foreach($cl in $childTableHandle)
#set($clForm = $cl.childList)
#foreach($clField in $clForm)
#set($clForm = $clField.fieLdsModel)
#if($!{clField.fieLdsModel.vModel})
case "${cl.tableModel}-${clField.fieLdsModel.vModel}":
${cl.tableModel}List.add(new ExcelExportEntity("${clField.fieLdsModel.config.label}" ,"${clField.fieLdsModel.vModel}${lineEditName}"));
break;
#end
#end
#end
default:
break;
#end
}
}
#foreach($cl in $childTableHandle)
if(${cl.tableModel}List.size() > 0){
${cl.tableModel}ExcelEntity.setList(${cl.tableModel}List);
entitys.add(${cl.tableModel}ExcelEntity);
}
#end
}
ExportParams exportParams = new ExportParams(null, "表单信息");
exportParams.setType(ExcelType.XSSF);
try{
@Cleanup Workbook workbook = new HSSFWorkbook();
if (entitys.size()>0){
if (list.size()==0){
list.add(new HashMap<>());
}
//去除空数据
List<$mapObject> dataList = new ArrayList<>();
for ($mapObject map : list) {
int i = 0;
for (String key : keys) {
//子表
if (key.toLowerCase().startsWith("tablefield")) {
String tableField = key.substring(0, key.indexOf("-" ));
String field = key.substring(key.indexOf("-" ) + 1);
Object o = map.get(tableField);
if (o != null) {
List<$mapObject> childList = (List<$mapObject>) o;
for ($mapObject childMap : childList) {
if (childMap.get(field) != null) {
i++;
}
}
}
} else {
Object o = map.get(key);
if (o != null) {
i++;
}
}
}
if (i > 0) {
dataList.add(map);
}
}
List<ExcelExportEntity> mergerEntitys = new ArrayList<>(entitys);
List<$mapObject> mergerList=new ArrayList<>(dataList);
//复杂表头-表头和数据处理
ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class);
List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, Objects.equals(columnDataModel.getType(), 4));
dataList = VisualUtils.complexHeaderDataHandel(dataList, complexHeaderList, Objects.equals(columnDataModel.getType(), 4));
}
exportParams.setStyle(ExcelExportStyler.class);
workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList);
VisualUtils.mergerVertical(workbook, mergerEntitys, mergerList);
## 表格样式添加
ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),Arrays.asList(keys));
ExcelHelper helper = new ExcelHelper();
helper.init(workbook, exportParams, entitys, excelModel);
helper.doPreHandle();
helper.doPostHandle();
}
String fileName = menuFullName +"_"+ DateUtil.dateNow("yyyyMMddHHmmss") + ".xls";
MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
#if(${isCloud}=="cloud")
String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY);
FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName);
#else
String temporaryFilePath = configValueUtil.getTemporaryFilePath();
FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
#end
vo.setName(fileInfo.getFilename());
vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
} catch (Exception e) {
log.error("信息导出Excel错误:{}", e.getMessage());
e.printStackTrace();
}
return vo;
}
#end