ControllerMarco.vm 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823
  1. #set($mapObject ="Map<String, Object>")
  2. ## 导入实例信息添加
  3. #macro(TemlateDownloadDemo $MapName $Field)
  4. #set($key = $Field.config.jnpfKey)
  5. #set($mul = $Field.multiple)
  6. #set($level = $Field.level)
  7. #set($vModelThis = $Field.vModel)
  8. #if($Field.beforeVmodel)
  9. #set($vModelThis = $Field.beforeVmodel)
  10. #end
  11. #if($key == "createUser" || $key == "modifyUser" || $key == "createTime" || $key == "modifyTime" || $key == "currOrganize" || $key == "currPosition" || $key == "currDept" || $key == "billRule")
  12. ${MapName}.put("${vModelThis}", "系统自动生成");
  13. #elseif($key == 'organizeSelect')
  14. #if($mul)
  15. ${MapName}.put("${vModelThis}", "例:引迈信息/产品部,引迈信息/技术部");
  16. #else
  17. ${MapName}.put("${vModelThis}", "例:引迈信息/技术部");
  18. #end
  19. #elseif($key == "depSelect")
  20. #if($mul)
  21. ${MapName}.put("${vModelThis}", "例:产品部/部门编码,技术部/部门编码");
  22. #else
  23. ${MapName}.put("${vModelThis}", "例:技术部/部门编码");
  24. #end
  25. #elseif($key == "posSelect")
  26. #if($mul)
  27. ${MapName}.put("${vModelThis}", "例:技术经理/岗位编码,技术员/岗位编码");
  28. #else
  29. ${MapName}.put("${vModelThis}", "例:技术员/岗位编码");
  30. #end
  31. #elseif($key == "userSelect")
  32. #if($mul)
  33. ${MapName}.put("${vModelThis}", "例:张三/账号,李四/账号");
  34. #else
  35. ${MapName}.put("${vModelThis}", "例:张三/账号");
  36. #end
  37. #elseif($key == "usersSelect")
  38. #if($mul)
  39. ${MapName}.put("${vModelThis}", "例:方方/账号,技术部/部门编码");
  40. #else
  41. ${MapName}.put("${vModelThis}", "例:方方/账号");
  42. #end
  43. #elseif($key == "roleSelect")
  44. #if($mul)
  45. ${MapName}.put("${vModelThis}", "例:研发人员/角色编码,测试人员/角色编码");
  46. #else
  47. ${MapName}.put("${vModelThis}", "例:研发人员/角色编码");
  48. #end
  49. #elseif($key == "groupSelect")
  50. #if($mul)
  51. ${MapName}.put("${vModelThis}", "例:A分组/分组编码,B分组/分组编码");
  52. #else
  53. ${MapName}.put("${vModelThis}", "例:A分组/分组编码");
  54. #end
  55. #elseif($key == 'datePicker')
  56. ${MapName}.put("${vModelThis}", "例: ${Field.format}");
  57. #elseif($key == 'timePicker')
  58. ${MapName}.put("${vModelThis}", "例: ${Field.format}");
  59. #elseif($key == 'areaSelect')
  60. #if($level==0)
  61. #if($mul)
  62. ${MapName}.put("${vModelThis}", "例:福建省,广东省");
  63. #else
  64. ${MapName}.put("${vModelThis}", "例:福建省");
  65. #end
  66. #elseif($level==1)
  67. #if($mul)
  68. ${MapName}.put("${vModelThis}", "例:福建省/莆田市,广东省/广州市");
  69. #else
  70. ${MapName}.put("${vModelThis}", "例:福建省/莆田市");
  71. #end
  72. #elseif($level==2)
  73. #if($mul)
  74. ${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区,广东省/广州市/荔湾区");
  75. #else
  76. ${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区");
  77. #end
  78. #elseif($level==3)
  79. #if($mul)
  80. ${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区/霞林街道,广东省/广州市/荔湾区/沙面街道");
  81. #else
  82. ${MapName}.put("${vModelThis}", "例:福建省/莆田市/城厢区/霞林街道");
  83. #end
  84. #end
  85. #else
  86. ${MapName}.put("${vModelThis}", "");
  87. #end
  88. #end
  89. ## 主子副,entity转成map isGetInfo是否不转换数据详情 isDetail 是否转换数据的详情
  90. #macro(EntityToMap)
  91. ${mapObject} ${name}Map=JsonUtil.entityToMap(entity);
  92. ${name}Map.put("id", ${name}Map.get("${pKeyNameOriginal}"));
  93. //副表数据
  94. #foreach($child in ${columnTableHandle})
  95. ${child.modelUpName}Entity ${child.modelLowName}Entity = entity.get${child.modelUpName}();
  96. if(ObjectUtil.isNotEmpty(${child.modelLowName}Entity)){
  97. ${mapObject} ${child.modelLowName}Map=JsonUtil.entityToMap(${child.modelLowName}Entity);
  98. for(String key:${child.modelLowName}Map.keySet()){
  99. ${name}Map.put("jnpf_${child.tableName}_jnpf_"+key,${child.modelLowName}Map.get(key));
  100. }
  101. }
  102. #end
  103. //子表数据
  104. #foreach($grid in ${childTableHandle})
  105. List<${grid.aliasUpName}Entity> ${grid.aliasLowName}List = entity.get${grid.aliasUpName}();
  106. ${name}Map.put("${grid.tableModel}",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(${grid.aliasLowName}List)));
  107. ${name}Map.put("${grid.aliasLowName}List",JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(${grid.aliasLowName}List)));
  108. #end
  109. #end
  110. ###########################以上为通用宏,以下是controller方法#################################
  111. ## 获取列表信息
  112. #macro(GetList)
  113. /**
  114. * 列表
  115. *
  116. * @param ${name}Pagination
  117. * @return
  118. */
  119. @Operation(summary = "获取列表")
  120. @PostMapping("/getList")
  121. public ActionResult list(@RequestBody ${Name}Pagination ${name}Pagination)throws Exception{
  122. List<${table.entityName}> list= ${serviceName}.getList(${name}Pagination);
  123. List<${mapObject}> realList=new ArrayList<>();
  124. for (${Name}Entity entity : list) {
  125. #EntityToMap()
  126. realList.add(${name}Map);
  127. }
  128. //数据转换
  129. boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" ));
  130. realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getFormData(), ${Name}Constant.getColumnData(), ${name}Pagination.getModuleId(),isPc?${lineEdit}:false);
  131. #if($isFlow)
  132. //流程状态添加
  133. generaterSwapUtil.getFlowStatus(realList);
  134. #end
  135. #if($treeTable || $groupTable)
  136. if(isPc){
  137. //分组和树形的树形数据转换
  138. realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getColumnData(), "${peimaryKeyname}");
  139. }
  140. #end
  141. //返回对象
  142. PageListVO vo = new PageListVO();
  143. vo.setList(realList);
  144. PaginationVO page = JsonUtil.getJsonToBean(${name}Pagination, PaginationVO.class);
  145. vo.setPagination(page);
  146. return ActionResult.success(vo);
  147. }
  148. #end
  149. ## 新增
  150. #macro(CreateMethod)
  151. /**
  152. * 创建
  153. *
  154. * @param ${name}Form
  155. * @return
  156. */
  157. @PostMapping(#if($isFlow)"/{id}"#end)
  158. @Operation(summary = "创建")
  159. public ActionResult create(#if($isFlow)@PathVariable("id") String id, #end@RequestBody @Valid ${Name}Form ${name}Form) {
  160. String b = ${serviceName}.checkForm(${name}Form,0);
  161. if (StringUtil.isNotEmpty(b)){
  162. return ActionResult.fail(b );
  163. }
  164. try{
  165. ${name}Service.saveOrUpdate(${name}Form,#if($isFlow) id #else null #end,true);
  166. }catch(Exception e){
  167. return ActionResult.fail(MsgCode.FA028.get());
  168. }
  169. return ActionResult.success(MsgCode.SU001.get());
  170. }
  171. #end
  172. ## 编辑
  173. #macro(UpdateMethod)
  174. /**
  175. * 编辑
  176. * @param id
  177. * @param ${name}Form
  178. * @return
  179. */
  180. @PutMapping("/{id}")
  181. @Operation(summary = "更新")
  182. public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid ${Name}Form ${name}Form,
  183. @RequestParam(value = "isImport", required = false) boolean isImport){
  184. ${Name}Entity entity= ${name}Service.getInfo(id);
  185. if(entity!=null){
  186. ${name}Form.set${peimaryKeyName}(String.valueOf(entity.get${peimaryKeyName}()));
  187. if (!isImport) {
  188. String b = ${name}Service.checkForm(${name}Form,1);
  189. if (StringUtil.isNotEmpty(b)){
  190. return ActionResult.fail(b );
  191. }
  192. }
  193. try{
  194. ${name}Service.saveOrUpdate(${name}Form,id,false);
  195. }catch (DataException e1){
  196. return ActionResult.fail(e1.getMessage());
  197. }catch(Exception e){
  198. return ActionResult.fail(MsgCode.FA029.get());
  199. }
  200. return ActionResult.success(MsgCode.SU004.get());
  201. }else{
  202. return ActionResult.fail(MsgCode.FA002.get());
  203. }
  204. }
  205. #end
  206. ## 获取详情(不转数据)
  207. #macro(GetInfoMethod)
  208. /**
  209. * 获取详情(编辑页)
  210. * 编辑页面使用-不转换数据
  211. * @param id
  212. * @return
  213. */
  214. @Operation(summary = "信息")
  215. @GetMapping("/{id}")
  216. public ActionResult info(@PathVariable("id") String id){
  217. ${Name}Entity entity= ${name}Service.getInfo(id);
  218. if(entity==null){
  219. return ActionResult.fail(MsgCode.FA001.get());
  220. }
  221. ##
  222. #EntityToMap()
  223. ${name}Map = generaterSwapUtil.swapDataForm(${name}Map,${Name}Constant.getFormData(),${Name}Constant.TABLEFIELDKEY,${Name}Constant.TABLERENAMES);
  224. return ActionResult.success(${name}Map);
  225. }
  226. #end
  227. ## 详情(转换数据)
  228. #macro(GetDetailMethod)
  229. /**
  230. * 表单信息(详情页)
  231. * 详情页面使用-转换数据
  232. * @param id
  233. * @return
  234. */
  235. @Operation(summary = "表单信息(详情页)")
  236. @GetMapping("/detail/{id}")
  237. public ActionResult detailInfo(@PathVariable("id") String id){
  238. ${Name}Entity entity= ${name}Service.getInfo(id);
  239. if(entity==null){
  240. return ActionResult.fail(MsgCode.FA001.get());
  241. }
  242. #EntityToMap()
  243. boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" ));
  244. ${name}Map = generaterSwapUtil.swapDataDetail(${name}Map,${Name}Constant.getFormData(),"${VisualDevId}",isPc?${lineEdit}:false);
  245. //子表数据
  246. #foreach($grid in ${childTableHandle})
  247. ${name}Map.put("${grid.aliasLowName}List",${name}Map.get("${grid.tableModel}"));
  248. #end
  249. return ActionResult.success(${name}Map);
  250. }
  251. #end
  252. ## 删除
  253. #macro(DeleteMethod)
  254. /**
  255. * 删除
  256. * @param id
  257. * @return
  258. */
  259. @Operation(summary = "删除")
  260. @DeleteMapping("/{id}")
  261. #if(${DS})
  262. @DSTransactional
  263. #else
  264. @Transactional
  265. #end
  266. public ActionResult delete(@PathVariable("id") String id,@RequestParam(name = "forceDel",defaultValue = "false") boolean forceDel) throws Exception{
  267. ${Name}Entity entity= ${name}Service.getInfo(id);
  268. if(entity!=null){
  269. #if($isFlow)
  270. if(!forceDel){
  271. String errMsg = generaterSwapUtil.deleteFlowTask(entity.getFlowTaskId());
  272. if (StringUtil.isNotEmpty(errMsg)) {
  273. throw new DataException(errMsg);
  274. }
  275. }
  276. #end
  277. #if($logicalDelete)
  278. //假删除
  279. entity.setDeleteMark(1);
  280. entity.setDeleteUserId(userProvider.get().getUserId());
  281. entity.setDeleteTime(new Date());
  282. ${name}Service.setIgnoreLogicDelete().updateById(entity);
  283. #else
  284. //主表数据删除
  285. ${name}Service.delete(entity);
  286. ## 副表
  287. #if(${columnTableHandle.size()}>0)
  288. #foreach($cl in ${columnTableHandle})
  289. QueryWrapper<${cl.modelUpName}Entity> queryWrapper${cl.modelUpName}=new QueryWrapper<>();
  290. queryWrapper${cl.modelUpName}.lambda().eq(${cl.modelUpName}Entity::get${cl.relationUpField},entity.get${cl.mainUpKey}());
  291. //副表数据删除
  292. ${cl.modelLowName}Service.remove(queryWrapper${cl.modelUpName});
  293. #end
  294. #end
  295. ## 子表
  296. #foreach($tableModel in ${childTableHandle})
  297. #set($mainFeild="${tableModel.relationField}")
  298. #set($MainFeild="${tableModel.relationField.substring(0,1).toUpperCase()}${tableModel.relationField.substring(1)}")
  299. #set($childFeild="${tableModel.tablefield}")
  300. #set($ChildFeild="${tableModel.tablefield.substring(0,1).toUpperCase()}${tableModel.tablefield.substring(1)}")
  301. QueryWrapper<${tableModel.aliasUpName}Entity> queryWrapper${tableModel.aliasUpName}=new QueryWrapper<>();
  302. queryWrapper${tableModel.aliasUpName}.lambda().eq(${tableModel.aliasUpName}Entity::get${ChildFeild},entity.get${MainFeild}());
  303. //子表数据删除
  304. ${tableModel.aliasLowName}Service.remove(queryWrapper${tableModel.aliasUpName});
  305. #end
  306. #end
  307. }
  308. return ActionResult.success(MsgCode.SU003.get());
  309. }
  310. #end
  311. ## 批量删除
  312. #macro(BatchRemoveMethod)
  313. /**
  314. * 批量删除
  315. * @param obj
  316. * @return
  317. */
  318. @DeleteMapping("/batchRemove")
  319. #if(${DS})
  320. @DSTransactional
  321. #else
  322. @Transactional
  323. #end
  324. @Operation(summary = "批量删除")
  325. public ActionResult batchRemove(@RequestBody Object obj){
  326. $mapObject objectMap = JsonUtil.entityToMap(obj);
  327. List<String> idList = JsonUtil.getJsonToList(objectMap.get("ids"), String.class);
  328. String errInfo = "";
  329. List<String> successList = new ArrayList<>();
  330. for (String allId : idList){
  331. try {
  332. this.delete(allId,false);
  333. successList.add(allId);
  334. } catch (Exception e) {
  335. errInfo = e.getMessage();
  336. }
  337. }
  338. if (successList.size() == 0 && StringUtil.isNotEmpty(errInfo)){
  339. return ActionResult.fail(errInfo);
  340. }
  341. return ActionResult.success(MsgCode.SU003.get());
  342. }
  343. #end
  344. ## 批量打印
  345. #macro(BatchPrintMethod)
  346. #end
  347. ## 导入
  348. #macro(UploaderMethod)
  349. @Operation(summary = "上传文件")
  350. @PostMapping("/Uploader")
  351. public ActionResult<Object> Uploader() {
  352. List<MultipartFile> list = UpUtil.getFileAll();
  353. MultipartFile file = list.get(0);
  354. if (file.getOriginalFilename().endsWith(".xlsx") || file.getOriginalFilename().endsWith(".xls")) {
  355. String filePath = XSSEscape.escape(configValueUtil.getTemporaryFilePath());
  356. String fileName = XSSEscape.escape(RandomUtil.uuId() + "." + UpUtil.getFileType(file));
  357. //上传文件
  358. #if(${isCloud}=="cloud")
  359. FileInfo fileInfo = fileUploadApi.uploadFile(file, filePath, fileName);
  360. #else
  361. FileInfo fileInfo = FileUploadUtils.uploadFile(file, filePath, fileName);
  362. #end
  363. DownloadVO vo = DownloadVO.builder().build();
  364. vo.setName(fileInfo.getFilename());
  365. return ActionResult.success(vo);
  366. } else {
  367. return ActionResult.fail(MsgCode.FA017.get());
  368. }
  369. }
  370. /**
  371. * 模板下载
  372. *
  373. * @return
  374. */
  375. @Operation(summary = "模板下载")
  376. @GetMapping("/TemplateDownload")
  377. public ActionResult<DownloadVO> TemplateDownload(@RequestParam("menuId") String menuId){
  378. DownloadVO vo = DownloadVO.builder().build();
  379. UserInfo userInfo = userProvider.get();
  380. String menuFullName = generaterSwapUtil.getMenuName(menuId);
  381. //主表对象
  382. List<ExcelExportEntity> entitys = new ArrayList<>();
  383. List<String> selectKeys = new ArrayList<>();
  384. //以下添加字段
  385. ## 导入字段添加到entity
  386. #foreach($fieldModel in $importFields)
  387. #set($config = $fieldModel.config)
  388. #set($vModel = ${fieldModel.vModel})
  389. #if($vModel.toLowerCase().startsWith("tablefield"))
  390. //${vModel}子表对象
  391. ExcelExportEntity ${vModel}ExcelEntity = new ExcelExportEntity("${fieldModel.label}(${vModel})","${vModel}");
  392. List<ExcelExportEntity> ${vModel}ExcelEntityList = new ArrayList<>();
  393. #foreach($child in ${fieldModel.childList})
  394. #set($itemFields =$child.fieLdsModel)
  395. ${vModel}ExcelEntityList.add(new ExcelExportEntity("${itemFields.config.label}($vModel-${itemFields.vModel})" ,"${itemFields.vModel}"));
  396. selectKeys.add("$vModel-${itemFields.vModel}");
  397. #end
  398. ${vModel}ExcelEntity.setList(${vModel}ExcelEntityList);
  399. if(${vModel}ExcelEntityList.size() > 0){
  400. entitys.add(${vModel}ExcelEntity);
  401. }
  402. #else
  403. entitys.add(new ExcelExportEntity("${config.label}($vModel)" ,"$vModel"));
  404. selectKeys.add("${vModel}");
  405. #end
  406. #end
  407. ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),selectKeys);
  408. List<${mapObject}> list = new ArrayList<>();
  409. list.add(excelModel.getDataMap());
  410. ExportParams exportParams = new ExportParams(null, menuFullName + "模板");
  411. exportParams.setStyle(ExcelExportStyler.class);
  412. exportParams.setType(ExcelType.XSSF);
  413. try{
  414. @Cleanup Workbook workbook = new HSSFWorkbook();
  415. if (entitys.size()>0){
  416. if (list.size()==0){
  417. list.add(new HashMap<>());
  418. }
  419. //复杂表头-表头和数据处理
  420. ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class);
  421. List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
  422. if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
  423. entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false);
  424. list = VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false);
  425. }
  426. ## excel处理
  427. workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list);
  428. ExcelHelper helper = new ExcelHelper();
  429. helper.init(workbook, exportParams, entitys, excelModel);
  430. helper.doPreHandle();
  431. helper.doPostHandle();
  432. }
  433. String fileName = menuFullName + "导入模板.xls";
  434. MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
  435. #if(${isCloud}=="cloud")
  436. String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY);
  437. FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName);
  438. #else
  439. String temporaryFilePath = configValueUtil.getTemporaryFilePath();
  440. FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
  441. #end
  442. vo.setName(fileInfo.getFilename());
  443. vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
  444. } catch (Exception e) {
  445. log.error("模板信息导出Excel错误:{}", e.getMessage());
  446. e.printStackTrace();
  447. }
  448. return ActionResult.success(vo);
  449. }
  450. /**
  451. * 导入预览
  452. *
  453. * @return
  454. */
  455. @Operation(summary = "导入预览" )
  456. @GetMapping("/ImportPreview")
  457. public ActionResult<${mapObject}> ImportPreview(String fileName) throws Exception {
  458. ${mapObject} headAndDataMap = new HashMap<>(2);
  459. #if(${isCloud}=="cloud")
  460. String filePath = fileApi.getLocalBasePath() + configValueUtil.getTemporaryFilePath();
  461. UploadFileModel uploadFileModel =new UploadFileModel();
  462. uploadFileModel.setFolderName(filePath);
  463. uploadFileModel.setObjectName(fileName);
  464. fileUploadApi.downToLocal(uploadFileModel);
  465. #else
  466. String filePath = FileUploadUtils.getLocalBasePath() + configValueUtil.getTemporaryFilePath();
  467. FileUploadUtils.downLocal(configValueUtil.getTemporaryFilePath(), filePath, fileName);
  468. #end
  469. File temporary = new File(XSSEscape.escapePath(filePath + fileName));
  470. #if($importHasChildren || ${complexFieldList.size()} > 0)
  471. int headerRowIndex = 2;
  472. #else
  473. int headerRowIndex = 1;
  474. #end
  475. ImportParams params = new ImportParams();
  476. params.setTitleRows(0);
  477. params.setHeadRows(headerRowIndex);
  478. params.setNeedVerify(true);
  479. try {
  480. InputStream inputStream = ExcelUtil.solveOrginTitle(temporary, headerRowIndex);
  481. List<Map> excelDataList = ExcelUtil.importExcelByInputStream(inputStream, 0, headerRowIndex, Map.class);
  482. //数据超过1000条
  483. if(excelDataList != null && excelDataList.size() > 1000) {
  484. return ActionResult.fail(MsgCode.ETD117.get());
  485. }
  486. ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class);
  487. UploaderTemplateModel uploaderTemplateModel = JsonUtil.getJsonToBean(columnDataModel.getUploaderTemplateJson(), UploaderTemplateModel.class);
  488. List<String> selectKey = uploaderTemplateModel.getSelectKey();
  489. //子表合并
  490. List<$mapObject> results = FormExecelUtils.dataMergeChildTable(excelDataList,selectKey);
  491. // 导入字段
  492. List<ExcelImFieldModel> columns = new ArrayList<>();
  493. ## 添加导入所有字段信息
  494. #foreach($fieldModel in $importFieldsNew)
  495. #set($config = $fieldModel.config)
  496. #set($vModel = ${fieldModel.vModel})
  497. #if($vModel.toLowerCase().startsWith("tablefield"))
  498. #if(${fieldModel.childList.size()}>0)
  499. //${vModel}子表对象
  500. List<ExcelImFieldModel> ${vModel}columns = new ArrayList<>();
  501. #foreach($child in ${fieldModel.childList})
  502. #set($itemFields =$child.fieLdsModel)
  503. ${vModel}columns.add(new ExcelImFieldModel("${itemFields.vModel}" ,"#if(${itemFields.config.required})*#end${itemFields.config.label}"));
  504. #end
  505. columns.add(new ExcelImFieldModel("${vModel}","${fieldModel.label}","table",${vModel}columns));
  506. #end
  507. #elseif($vModel.contains("complexHeader"))
  508. #set($item = ${fieldModel})
  509. #if(${item.childColumns.size()}>0 && ${item.uploadFieldList.size()}>0)
  510. //${item.fullName} 复杂表头对象
  511. List<ExcelImFieldModel> ${item.id}columns = new ArrayList<>();
  512. #foreach($itemFields in ${item.uploadFieldList})
  513. ${item.id}columns.add(new ExcelImFieldModel("${itemFields.vModel}" ,"#if(${itemFields.config.required})*#end${itemFields.label}"));
  514. #end
  515. columns.add(new ExcelImFieldModel("${item.id}","${item.fullName}","complexHeader",${item.id}columns));
  516. #end
  517. #else
  518. columns.add(new ExcelImFieldModel("${vModel}","${config.label}","${config.jnpfKey}"));
  519. #end
  520. #end
  521. headAndDataMap.put("dataRow" , results);
  522. headAndDataMap.put("headerRow" , JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(columns)));
  523. } catch (Exception e){
  524. e.printStackTrace();
  525. return ActionResult.fail(MsgCode.VS407.get());
  526. }
  527. return ActionResult.success(headAndDataMap);
  528. }
  529. /**
  530. * 导入数据
  531. *
  532. * @return
  533. */
  534. @Operation(summary = "导入数据" )
  535. @PostMapping("/ImportData")
  536. public ActionResult<ExcelImportModel> ImportData(@RequestBody VisualImportModel visualImportModel) throws Exception {
  537. List<$mapObject> listData = visualImportModel.getList();
  538. ImportFormCheckUniqueModel uniqueModel = new ImportFormCheckUniqueModel();
  539. uniqueModel.setDbLinkId(${Name}Constant.DBLINKID);
  540. uniqueModel.setUpdate(Objects.equals("${importType}", "2"));
  541. #if($isFlow)uniqueModel.setFlowId(visualImportModel.getFlowId()); #end
  542. Map<String,String> tablefieldkey = new HashMap<>();
  543. for(String key:${Name}Constant.TABLEFIELDKEY.keySet()){
  544. tablefieldkey.put(key,${Name}Constant.TABLERENAMES.get(${Name}Constant.TABLEFIELDKEY.get(key)));
  545. }
  546. ExcelImportModel excelImportModel = generaterSwapUtil.importData(${Name}Constant.getFormData(),listData,uniqueModel, tablefieldkey,${Name}Constant.getTableList());
  547. List<ImportDataModel> importDataModel = uniqueModel.getImportDataModel();
  548. for (ImportDataModel model : importDataModel) {
  549. String id = model.getId();
  550. $mapObject result = model.getResultData();
  551. if(StringUtil.isNotEmpty(id)){
  552. update(id, JsonUtil.getJsonToBean(result,${Name}Form.class), true);
  553. }else {
  554. create(#if($isFlow)RandomUtil.uuId(),#end JsonUtil.getJsonToBean(result,${Name}Form.class));
  555. }
  556. }
  557. return ActionResult.success(excelImportModel);
  558. }
  559. /**
  560. * 导出异常报告
  561. *
  562. * @return
  563. */
  564. @Operation(summary = "导出异常报告")
  565. @PostMapping("/ImportExceptionData")
  566. public ActionResult<DownloadVO> ImportExceptionData(@RequestBody VisualImportModel visualImportModel) {
  567. DownloadVO vo = DownloadVO.builder().build();
  568. UserInfo userInfo = userProvider.get();
  569. String menuFullName = generaterSwapUtil.getMenuName(visualImportModel.getMenuId());
  570. //主表对象
  571. List<ExcelExportEntity> entitys = new ArrayList<>();
  572. entitys.add(new ExcelExportEntity("异常原因", "errorsInfo",30));
  573. List<String> selectKeys = new ArrayList<>();
  574. //以下添加字段
  575. ## 导入字段添加到entity
  576. #foreach($fieldModel in $importFields)
  577. #set($config = $fieldModel.config)
  578. #set($vModel = ${fieldModel.vModel})
  579. #if($vModel.toLowerCase().startsWith("tablefield"))
  580. //${vModel}子表对象
  581. ExcelExportEntity ${vModel}ExcelEntity = new ExcelExportEntity("${fieldModel.label}(${vModel})","${vModel}");
  582. List<ExcelExportEntity> ${vModel}ExcelEntityList = new ArrayList<>();
  583. #foreach($child in ${fieldModel.childList})
  584. #set($itemFields =$child.fieLdsModel)
  585. ${vModel}ExcelEntityList.add(new ExcelExportEntity("${itemFields.config.label}($vModel-${itemFields.vModel})" ,"${itemFields.vModel}"));
  586. selectKeys.add("$vModel-${itemFields.vModel}");
  587. #end
  588. ${vModel}ExcelEntity.setList(${vModel}ExcelEntityList);
  589. entitys.add(${vModel}ExcelEntity);
  590. #else
  591. entitys.add(new ExcelExportEntity("${config.label}($vModel)" ,"$vModel"));
  592. selectKeys.add("${vModel}");
  593. #end
  594. #end
  595. ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),selectKeys);
  596. List<${mapObject}> list = new ArrayList<>();
  597. list.addAll(visualImportModel.getList());
  598. ExportParams exportParams = new ExportParams(null, menuFullName + "模板");
  599. exportParams.setStyle(ExcelExportStyler.class);
  600. exportParams.setType(ExcelType.XSSF);
  601. exportParams.setFreezeCol(1);
  602. try{
  603. @Cleanup Workbook workbook = new HSSFWorkbook();
  604. if (entitys.size()>0){
  605. if (list.size()==0){
  606. list.add(new HashMap<>());
  607. }
  608. //复杂表头-表头和数据处理
  609. ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class);
  610. List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
  611. if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
  612. entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false);
  613. list = VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false);
  614. }
  615. workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list);
  616. ExcelHelper helper = new ExcelHelper();
  617. helper.init(workbook, exportParams, entitys, excelModel);
  618. helper.doPreHandle();
  619. helper.doPostHandle();
  620. }
  621. String fileName = menuFullName + "错误报告_" + DateUtil.dateNow("yyyyMMddHHmmss") + ".xls";
  622. MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
  623. #if(${isCloud}=="cloud")
  624. String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY);
  625. FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName);
  626. #else
  627. String temporaryFilePath = configValueUtil.getTemporaryFilePath();
  628. FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
  629. #end
  630. vo.setName(fileInfo.getFilename());
  631. vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
  632. } catch (Exception e) {
  633. e.printStackTrace();
  634. }
  635. return ActionResult.success(vo);
  636. }
  637. #end
  638. ## 导出
  639. #macro(ExportMethod)
  640. /**
  641. * 导出Excel
  642. *
  643. * @return
  644. */
  645. @Operation(summary = "导出Excel")
  646. @PostMapping("/Actions/Export")
  647. public ActionResult Export(@RequestBody ${Name}Pagination ${name}Pagination) throws IOException {
  648. if (StringUtil.isEmpty(${name}Pagination.getSelectKey())){
  649. return ActionResult.fail(MsgCode.IMP011.get());
  650. }
  651. List<${table.entityName}> list= ${serviceName}.getList(${name}Pagination);
  652. List<${mapObject}> realList=new ArrayList<>();
  653. for (${Name}Entity entity : list) {
  654. #EntityToMap()
  655. realList.add(${name}Map);
  656. }
  657. //数据转换
  658. realList = generaterSwapUtil.swapDataList(realList, ${Name}Constant.getFormData(), ${Name}Constant.getColumnData(), ${name}Pagination.getModuleId(),${lineEdit});
  659. String[]keys=!StringUtil.isEmpty(${name}Pagination.getSelectKey())?${name}Pagination.getSelectKey():new String[0];
  660. UserInfo userInfo=userProvider.get();
  661. String menuFullName = generaterSwapUtil.getMenuName(${name}Pagination.getMenuId());
  662. #if(${isCloud}=="cloud")
  663. DownloadVO vo=this.creatModelExcel(fileApi.getPath(FileTypeConstant.TEMPORARY),realList,keys,userInfo,menuFullName);
  664. #else
  665. DownloadVO vo=this.creatModelExcel(configValueUtil.getTemporaryFilePath(),realList,keys,userInfo,menuFullName);
  666. #end
  667. return ActionResult.success(vo);
  668. }
  669. /**
  670. * 导出表格方法
  671. */
  672. public DownloadVO creatModelExcel(String path,List<${mapObject}>list,String[]keys,UserInfo userInfo,String menuFullName){
  673. DownloadVO vo=DownloadVO.builder().build();
  674. List<ExcelExportEntity> entitys=new ArrayList<>();
  675. if(keys.length>0){
  676. ## 子表对象
  677. #foreach($cl in $childTableHandle)
  678. ExcelExportEntity ${cl.tableModel}ExcelEntity = new ExcelExportEntity("${cl.label}(${cl.tableModel})","${cl.tableModel}");
  679. List<ExcelExportEntity> ${cl.tableModel}List = new ArrayList<>();
  680. #end
  681. #set($lineEditName = "#if(${lineEdit})_name#end")
  682. for(String key:keys){
  683. switch(key){
  684. #if($columnListSize.size()>0)
  685. ## 主表
  686. #foreach($fieldModel in ${mastTableHandle})
  687. #set($config = $fieldModel.config)
  688. #set($vModel = ${fieldModel.vModel})
  689. #if($vModel)
  690. case "${vModel}" :
  691. entitys.add(new ExcelExportEntity("${config.label}" ,"${vModel}${lineEditName}"));
  692. break;
  693. #end
  694. #end
  695. ## 副表
  696. #foreach($clid in $columnTableHandle)
  697. #set($fieLdsModelList = $clid.fieLdsModelList)
  698. #foreach($cf in $fieLdsModelList)
  699. #set($field = ${cf.field})
  700. #if($field)
  701. #set($label = $cf.mastTable.fieLdsModel.config.label)
  702. #set($lowName= ${cf.table.toLowerCase()})
  703. case "${cf.vModel}" :
  704. entitys.add(new ExcelExportEntity("${label}" ,"${cf.vModel}${lineEditName}"));
  705. break;
  706. #end
  707. #end
  708. #end
  709. ## 子表
  710. #foreach($cl in $childTableHandle)
  711. #set($clForm = $cl.childList)
  712. #foreach($clField in $clForm)
  713. #set($clForm = $clField.fieLdsModel)
  714. #if($!{clField.fieLdsModel.vModel})
  715. case "${cl.tableModel}-${clField.fieLdsModel.vModel}":
  716. ${cl.tableModel}List.add(new ExcelExportEntity("${clField.fieLdsModel.config.label}" ,"${clField.fieLdsModel.vModel}${lineEditName}"));
  717. break;
  718. #end
  719. #end
  720. #end
  721. default:
  722. break;
  723. #end
  724. }
  725. }
  726. #foreach($cl in $childTableHandle)
  727. if(${cl.tableModel}List.size() > 0){
  728. ${cl.tableModel}ExcelEntity.setList(${cl.tableModel}List);
  729. entitys.add(${cl.tableModel}ExcelEntity);
  730. }
  731. #end
  732. }
  733. ExportParams exportParams = new ExportParams(null, "表单信息");
  734. exportParams.setType(ExcelType.XSSF);
  735. try{
  736. @Cleanup Workbook workbook = new HSSFWorkbook();
  737. if (entitys.size()>0){
  738. if (list.size()==0){
  739. list.add(new HashMap<>());
  740. }
  741. //去除空数据
  742. List<$mapObject> dataList = new ArrayList<>();
  743. for ($mapObject map : list) {
  744. int i = 0;
  745. for (String key : keys) {
  746. //子表
  747. if (key.toLowerCase().startsWith("tablefield")) {
  748. String tableField = key.substring(0, key.indexOf("-" ));
  749. String field = key.substring(key.indexOf("-" ) + 1);
  750. Object o = map.get(tableField);
  751. if (o != null) {
  752. List<$mapObject> childList = (List<$mapObject>) o;
  753. for ($mapObject childMap : childList) {
  754. if (childMap.get(field) != null) {
  755. i++;
  756. }
  757. }
  758. }
  759. } else {
  760. Object o = map.get(key);
  761. if (o != null) {
  762. i++;
  763. }
  764. }
  765. }
  766. if (i > 0) {
  767. dataList.add(map);
  768. }
  769. }
  770. List<ExcelExportEntity> mergerEntitys = new ArrayList<>(entitys);
  771. List<$mapObject> mergerList=new ArrayList<>(dataList);
  772. //复杂表头-表头和数据处理
  773. ColumnDataModel columnDataModel = JsonUtil.getJsonToBean(${Name}Constant.getColumnData(), ColumnDataModel.class);
  774. List<HeaderModel> complexHeaderList = columnDataModel.getComplexHeaderList();
  775. if (!Objects.equals(columnDataModel.getType(), 3) && !Objects.equals(columnDataModel.getType(), 5)) {
  776. entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, Objects.equals(columnDataModel.getType(), 4));
  777. dataList = VisualUtils.complexHeaderDataHandel(dataList, complexHeaderList, Objects.equals(columnDataModel.getType(), 4));
  778. }
  779. exportParams.setStyle(ExcelExportStyler.class);
  780. workbook = ExcelExportUtil.exportExcel(exportParams, entitys, dataList);
  781. VisualUtils.mergerVertical(workbook, mergerEntitys, mergerList);
  782. ## 表格样式添加
  783. ExcelModel excelModel = generaterSwapUtil.getExcelParams(${Name}Constant.getFormData(),Arrays.asList(keys));
  784. ExcelHelper helper = new ExcelHelper();
  785. helper.init(workbook, exportParams, entitys, excelModel);
  786. helper.doPreHandle();
  787. helper.doPostHandle();
  788. }
  789. String fileName = menuFullName +"_"+ DateUtil.dateNow("yyyyMMddHHmmss") + ".xls";
  790. MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
  791. #if(${isCloud}=="cloud")
  792. String temporaryFilePath = fileApi.getPath(FileTypeConstant.TEMPORARY);
  793. FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, temporaryFilePath, fileName);
  794. #else
  795. String temporaryFilePath = configValueUtil.getTemporaryFilePath();
  796. FileInfo fileInfo = FileUploadUtils.uploadFile(multipartFile, temporaryFilePath, fileName);
  797. #end
  798. vo.setName(fileInfo.getFilename());
  799. vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + "Temporary") + "&name=" + fileName);
  800. } catch (Exception e) {
  801. log.error("信息导出Excel错误:{}", e.getMessage());
  802. e.printStackTrace();
  803. }
  804. return vo;
  805. }
  806. #end