2025-06-30 09:38:03 +08:00

824 lines
36 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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