ControllerMarco.vm 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791
  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, paramConst, ${name}Pagination.getModuleId(),isPc?${lineEdit}:false);
  131. #if($isFlow)
  132. //流程状态添加
  133. generaterSwapUtil.getFlowStatus(realList);
  134. #end
  135. #if($groupTable)
  136. if(isPc){
  137. //分组数据转换
  138. realList = generaterSwapUtil.groupTable(realList, paramConst.getGroupField(), paramConst.getFirstField());
  139. }
  140. #end
  141. #if($treeTable)
  142. if(isPc){
  143. //树形数据转换
  144. realList = generaterSwapUtil.treeTable(realList, paramConst.getColumnParentField(), "${peimaryKeyname}");
  145. }
  146. #end
  147. //返回对象
  148. PageListVO vo = new PageListVO();
  149. vo.setList(realList);
  150. PaginationVO page = JsonUtil.getJsonToBean(${name}Pagination, PaginationVO.class);
  151. vo.setPagination(page);
  152. return ActionResult.success(vo);
  153. }
  154. #end
  155. ## 新增
  156. #macro(CreateMethod)
  157. /**
  158. * 创建
  159. *
  160. * @param ${name}Form
  161. * @return
  162. */
  163. @PostMapping(#if($isFlow)"/{id}"#end)
  164. @Operation(summary = "创建")
  165. public ActionResult create(#if($isFlow)@PathVariable("id") String id, #end@RequestBody @Valid ${Name}Form ${name}Form) {
  166. String b = ${serviceName}.checkForm(${name}Form,0);
  167. if (StringUtil.isNotEmpty(b)){
  168. return ActionResult.fail(b );
  169. }
  170. try{
  171. ${name}Service.saveOrUpdate(${name}Form,#if($isFlow) id #else null #end,true);
  172. }catch(Exception e){
  173. return ActionResult.fail(MsgCode.FA028.get());
  174. }
  175. return ActionResult.success(MsgCode.SU001.get());
  176. }
  177. #end
  178. ## 编辑
  179. #macro(UpdateMethod)
  180. /**
  181. * 编辑
  182. * @param id
  183. * @param ${name}Form
  184. * @return
  185. */
  186. @PutMapping("/{id}")
  187. @Operation(summary = "更新")
  188. public ActionResult update(@PathVariable("id") String id,@RequestBody @Valid ${Name}Form ${name}Form,
  189. @RequestParam(value = "isImport", required = false) boolean isImport){
  190. ${Name}Entity entity= ${name}Service.getInfo(id);
  191. if(entity!=null){
  192. ${name}Form.set${peimaryKeyName}(String.valueOf(entity.get${peimaryKeyName}()));
  193. if (!isImport) {
  194. String b = ${name}Service.checkForm(${name}Form,1);
  195. if (StringUtil.isNotEmpty(b)){
  196. return ActionResult.fail(b );
  197. }
  198. }
  199. try{
  200. ${name}Service.saveOrUpdate(${name}Form,id,false);
  201. }catch (DataException e1){
  202. return ActionResult.fail(e1.getMessage());
  203. }catch(Exception e){
  204. return ActionResult.fail(MsgCode.FA029.get());
  205. }
  206. return ActionResult.success(MsgCode.SU004.get());
  207. }else{
  208. return ActionResult.fail(MsgCode.FA002.get());
  209. }
  210. }
  211. #if($isFlow)
  212. @PostMapping("/saveState")
  213. @Operation(summary = "修改状态")
  214. public ActionResult saveState(@RequestParam("flowTaskId") String flowTaskId, @RequestParam("flowState") Integer flowState){
  215. ${name}Service.saveState(flowTaskId, flowState);
  216. return ActionResult.fail(MsgCode.FA002.get());
  217. }
  218. #end
  219. #end
  220. ## 获取详情(不转数据)
  221. #macro(GetInfoMethod)
  222. /**
  223. * 获取详情(编辑页)
  224. * 编辑页面使用-不转换数据
  225. * @param id
  226. * @return
  227. */
  228. @Operation(summary = "信息")
  229. @GetMapping("/{id}")
  230. public ActionResult info(@PathVariable("id") String id){
  231. ${Name}Entity entity= ${name}Service.getInfo(id);
  232. if(entity==null){
  233. return ActionResult.fail(MsgCode.FA001.get());
  234. }
  235. ##
  236. #EntityToMap()
  237. ${name}Map = generaterSwapUtil.swapDataForm(${name}Map,paramConst);
  238. return ActionResult.success(${name}Map);
  239. }
  240. #end
  241. ## 详情(转换数据)
  242. #macro(GetDetailMethod)
  243. /**
  244. * 表单信息(详情页)
  245. * 详情页面使用-转换数据
  246. * @param id
  247. * @return
  248. */
  249. @Operation(summary = "表单信息(详情页)")
  250. @GetMapping("/detail/{id}")
  251. public ActionResult detailInfo(@PathVariable("id") String id){
  252. ${Name}Entity entity= ${name}Service.getInfo(id);
  253. if(entity==null){
  254. return ActionResult.fail(MsgCode.FA001.get());
  255. }
  256. #EntityToMap()
  257. boolean isPc = "pc".equals(ServletUtil.getHeader("jnpf-origin" ));
  258. ${name}Map = generaterSwapUtil.swapDataDetail(${name}Map,paramConst.getFields(),"${VisualDevId}",isPc?${lineEdit}:false);
  259. //子表数据
  260. #foreach($grid in ${childTableHandle})
  261. ${name}Map.put("${grid.aliasLowName}List",${name}Map.get("${grid.tableModel}"));
  262. #end
  263. return ActionResult.success(${name}Map);
  264. }
  265. #end
  266. ## 删除
  267. #macro(DeleteMethod)
  268. /**
  269. * 删除
  270. * @param id
  271. * @return
  272. */
  273. @Operation(summary = "删除")
  274. @DeleteMapping("/{id}")
  275. #if(${DS})
  276. @DSTransactional
  277. #else
  278. @Transactional
  279. #end
  280. public ActionResult delete(@PathVariable("id") String id,@RequestParam(name = "forceDel",defaultValue = "false") boolean forceDel) throws Exception{
  281. ${Name}Entity entity= ${name}Service.getInfo(id);
  282. if(entity!=null){
  283. #if($isFlow)
  284. if(!forceDel){
  285. String errMsg = generaterSwapUtil.deleteFlowTask(entity.getFlowTaskId());
  286. if (StringUtil.isNotEmpty(errMsg)) {
  287. throw new DataException(errMsg);
  288. }
  289. }
  290. #end
  291. #if($logicalDelete)
  292. //假删除
  293. UpdateWrapper<${Name}Entity> wrapper${Name}=new UpdateWrapper<>();
  294. wrapper${Name}.lambda().set(${Name}Entity::getDeleteMark,1);
  295. wrapper${Name}.lambda().set(${Name}Entity::getDeleteUserId,UserProvider.getUser().getUserId());
  296. wrapper${Name}.lambda().set(${Name}Entity::getDeleteTime,new Date());
  297. wrapper${Name}.lambda().eq(${Name}Entity::get${peimaryKeyName},entity.get${peimaryKeyName}());
  298. ${name}Service.update(wrapper${Name});
  299. ## 副表
  300. #if(${columnTableHandle.size()}>0)
  301. #foreach($cl in ${columnTableHandle})
  302. UpdateWrapper<${cl.modelUpName}Entity> updateWrapper${cl.modelUpName}=new UpdateWrapper<>();
  303. updateWrapper${cl.modelUpName}.lambda().set(${cl.modelUpName}Entity::getDeleteMark,1);
  304. updateWrapper${cl.modelUpName}.lambda().set(${cl.modelUpName}Entity::getDeleteUserId,UserProvider.getUser().getUserId());
  305. updateWrapper${cl.modelUpName}.lambda().set(${cl.modelUpName}Entity::getDeleteTime,new Date());
  306. updateWrapper${cl.modelUpName}.lambda().eq(${cl.modelUpName}Entity::get${cl.relationUpField},entity.get${cl.mainUpKey}());
  307. //副表数据假删除
  308. ${cl.modelLowName}Service.update(updateWrapper${cl.modelUpName});
  309. #end
  310. #end
  311. ## 子表
  312. #foreach($tableModel in ${childTableHandle})
  313. #set($mainFeild="${tableModel.relationField}")
  314. #set($MainFeild="${tableModel.relationField.substring(0,1).toUpperCase()}${tableModel.relationField.substring(1)}")
  315. #set($childFeild="${tableModel.tablefield}")
  316. #set($ChildFeild="${tableModel.tablefield.substring(0,1).toUpperCase()}${tableModel.tablefield.substring(1)}")
  317. UpdateWrapper<${tableModel.aliasUpName}Entity> updateWrapper${tableModel.aliasUpName}=new UpdateWrapper<>();
  318. updateWrapper${tableModel.aliasUpName}.lambda().set(${tableModel.aliasUpName}Entity::getDeleteMark,1);
  319. updateWrapper${tableModel.aliasUpName}.lambda().set(${tableModel.aliasUpName}Entity::getDeleteUserId,UserProvider.getUser().getUserId());
  320. updateWrapper${tableModel.aliasUpName}.lambda().set(${tableModel.aliasUpName}Entity::getDeleteTime,new Date());
  321. updateWrapper${tableModel.aliasUpName}.lambda().eq(${tableModel.aliasUpName}Entity::get${ChildFeild},entity.get${MainFeild}());
  322. //子表数据删除
  323. ${tableModel.aliasLowName}Service.update(updateWrapper${tableModel.aliasUpName});
  324. #end
  325. #else
  326. //主表数据删除
  327. ${name}Service.removeById(entity);
  328. ## 副表
  329. #if(${columnTableHandle.size()}>0)
  330. #foreach($cl in ${columnTableHandle})
  331. QueryWrapper<${cl.modelUpName}Entity> queryWrapper${cl.modelUpName}=new QueryWrapper<>();
  332. queryWrapper${cl.modelUpName}.lambda().eq(${cl.modelUpName}Entity::get${cl.relationUpField},entity.get${cl.mainUpKey}());
  333. //副表数据删除
  334. ${cl.modelLowName}Service.removeByIds(${cl.modelLowName}Service.list(queryWrapper${cl.modelUpName}));
  335. #end
  336. #end
  337. ## 子表
  338. #foreach($tableModel in ${childTableHandle})
  339. #set($mainFeild="${tableModel.relationField}")
  340. #set($MainFeild="${tableModel.relationField.substring(0,1).toUpperCase()}${tableModel.relationField.substring(1)}")
  341. #set($childFeild="${tableModel.tablefield}")
  342. #set($ChildFeild="${tableModel.tablefield.substring(0,1).toUpperCase()}${tableModel.tablefield.substring(1)}")
  343. QueryWrapper<${tableModel.aliasUpName}Entity> queryWrapper${tableModel.aliasUpName}=new QueryWrapper<>();
  344. queryWrapper${tableModel.aliasUpName}.lambda().eq(${tableModel.aliasUpName}Entity::get${ChildFeild},entity.get${MainFeild}());
  345. //子表数据删除
  346. ${tableModel.aliasLowName}Service.removeByIds(${tableModel.aliasLowName}Service.list(queryWrapper${tableModel.aliasUpName}));
  347. #end
  348. #end
  349. }
  350. return ActionResult.success(MsgCode.SU003.get());
  351. }
  352. #end
  353. ## 批量删除
  354. #macro(BatchRemoveMethod)
  355. /**
  356. * 批量删除
  357. * @param obj
  358. * @return
  359. */
  360. @DeleteMapping("/batchRemove")
  361. #if(${DS})
  362. @DSTransactional
  363. #else
  364. @Transactional
  365. #end
  366. @Operation(summary = "批量删除")
  367. public ActionResult batchRemove(@RequestBody Object obj){
  368. $mapObject objectMap = JsonUtil.entityToMap(obj);
  369. List<String> idList = JsonUtil.getJsonToList(objectMap.get("ids"), String.class);
  370. String errInfo = "";
  371. List<String> successList = new ArrayList<>();
  372. for (String allId : idList){
  373. try {
  374. this.delete(allId,false);
  375. successList.add(allId);
  376. } catch (Exception e) {
  377. errInfo = e.getMessage();
  378. }
  379. }
  380. if (successList.size() == 0 && StringUtil.isNotEmpty(errInfo)){
  381. return ActionResult.fail(errInfo);
  382. }
  383. return ActionResult.success(MsgCode.SU003.get());
  384. }
  385. #end
  386. ## 批量打印
  387. #macro(BatchPrintMethod)
  388. #end
  389. ## 导入
  390. #macro(UploaderMethod)
  391. @Operation(summary = "上传文件")
  392. @PostMapping("/Uploader")
  393. public ActionResult<Object> Uploader() {
  394. List<MultipartFile> list = UpUtil.getFileAll();
  395. MultipartFile file = list.get(0);
  396. if (file.getOriginalFilename().endsWith(".xlsx") || file.getOriginalFilename().endsWith(".xls")) {
  397. String fileName = XSSEscape.escape(RandomUtil.uuId() + "." + UpUtil.getFileType(file));
  398. //上传文件
  399. #if(${isCloud}=="cloud")
  400. FileInfo fileInfo = fileUploadApi.uploadFile(file, FileTypeConstant.TEMPORARY, fileName);
  401. #else
  402. FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), file);
  403. #end
  404. DownloadVO vo = DownloadVO.builder().build();
  405. vo.setName(fileInfo.getFilename());
  406. return ActionResult.success(vo);
  407. } else {
  408. return ActionResult.fail(MsgCode.FA017.get());
  409. }
  410. }
  411. /**
  412. * 模板下载
  413. *
  414. * @return
  415. */
  416. @Operation(summary = "模板下载")
  417. @GetMapping("/TemplateDownload")
  418. public ActionResult<DownloadVO> TemplateDownload(@RequestParam("menuId") String menuId){
  419. DownloadVO vo = DownloadVO.builder().build();
  420. UserInfo userInfo = userProvider.get();
  421. String menuFullName = generaterSwapUtil.getMenuName(menuId);
  422. //主表对象
  423. List<ExcelExportEntity> entitys = new ArrayList<>();
  424. List<String> selectKeys = new ArrayList<>();
  425. //以下添加字段
  426. ## 导入字段添加到entity
  427. #foreach($fieldModel in $importFields)
  428. #set($config = $fieldModel.config)
  429. #set($vModel = ${fieldModel.vModel})
  430. #if($vModel.toLowerCase().startsWith("tablefield"))
  431. //${vModel}子表对象
  432. ExcelExportEntity ${vModel}ExcelEntity = new ExcelExportEntity("${fieldModel.label}(${vModel})","${vModel}");
  433. List<ExcelExportEntity> ${vModel}ExcelEntityList = new ArrayList<>();
  434. #foreach($child in ${fieldModel.childList})
  435. #set($itemFields =$child.fieLdsModel)
  436. ${vModel}ExcelEntityList.add(new ExcelExportEntity("${itemFields.config.label}($vModel-${itemFields.vModel})" ,"${itemFields.vModel}"));
  437. selectKeys.add("$vModel-${itemFields.vModel}");
  438. #end
  439. ${vModel}ExcelEntity.setList(${vModel}ExcelEntityList);
  440. if(${vModel}ExcelEntityList.size() > 0){
  441. entitys.add(${vModel}ExcelEntity);
  442. }
  443. #else
  444. entitys.add(new ExcelExportEntity("${config.label}($vModel)" ,"$vModel"));
  445. selectKeys.add("${vModel}");
  446. #end
  447. #end
  448. ExcelModel excelModel = generaterSwapUtil.getExcelParams(paramConst.getFields().toJSONString(),selectKeys);
  449. List<${mapObject}> list = new ArrayList<>();
  450. list.add(excelModel.getDataMap());
  451. ExportParams exportParams = new ExportParams(null, menuFullName + "模板");
  452. exportParams.setStyle(ExcelExportStyler.class);
  453. exportParams.setType(ExcelType.XSSF);
  454. try{
  455. @Cleanup Workbook workbook = new HSSFWorkbook();
  456. if (entitys.size()>0){
  457. if (list.size()==0){
  458. list.add(new HashMap<>());
  459. }
  460. //复杂表头-表头和数据处理
  461. List<HeaderModel> complexHeaderList = JsonUtil.getJsonToList(paramConst.getComplexHeaderList(), HeaderModel.class);
  462. if (!Objects.equals(paramConst.getColumnType(), 3) && !Objects.equals(paramConst.getColumnType(), 5)) {
  463. entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false);
  464. list = VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false);
  465. }
  466. ## excel处理
  467. workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list);
  468. ExcelHelper helper = new ExcelHelper();
  469. helper.init(workbook, exportParams, entitys, excelModel);
  470. helper.doPreHandle();
  471. helper.doPostHandle();
  472. }
  473. String fileName = menuFullName + "导入模板.xls";
  474. MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
  475. #if(${isCloud}=="cloud")
  476. FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, FileTypeConstant.TEMPORARY, fileName);
  477. #else
  478. FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), multipartFile);
  479. #end
  480. vo.setName(fileInfo.getFilename());
  481. vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + FileTypeConstant.TEMPORARY) + "&name=" + fileName);
  482. } catch (Exception e) {
  483. log.error("模板信息导出Excel错误:{}", e.getMessage());
  484. e.printStackTrace();
  485. }
  486. return ActionResult.success(vo);
  487. }
  488. /**
  489. * 导入预览
  490. *
  491. * @return
  492. */
  493. @Operation(summary = "导入预览" )
  494. @GetMapping("/ImportPreview")
  495. public ActionResult<${mapObject}> ImportPreview(String fileName) throws Exception {
  496. ${mapObject} headAndDataMap = new HashMap<>(2);
  497. #if(${isCloud}=="cloud")
  498. String filePath = fileApi.getLocalBasePath() + configValueUtil.getTemporaryFilePath();
  499. UploadFileModel uploadFileModel =new UploadFileModel();
  500. uploadFileModel.setFolderName(filePath);
  501. uploadFileModel.setObjectName(fileName);
  502. File temporary = new File(XSSEscape.escapePath(filePath + fileName));
  503. try(feign.Response response = fileUploadApi.downFile(new UploadFileModel(FileTypeConstant.TEMPORARY, fileName));
  504. InputStream inputStream = response.body().asInputStream()){
  505. cn.hutool.core.io.FileUtil.copyFile(inputStream, temporary, java.nio.file.StandardCopyOption.REPLACE_EXISTING);
  506. } catch (IOException e) {
  507. throw new RuntimeException(e);
  508. }
  509. #else
  510. File temporary = FileUploadUtils.downloadFileToLocal(new FileParameter(FileTypeConstant.TEMPORARY, fileName));
  511. #end
  512. #if($importHasChildren || ${complexFieldList.size()} > 0)
  513. int headerRowIndex = 2;
  514. #else
  515. int headerRowIndex = 1;
  516. #end
  517. ImportParams params = new ImportParams();
  518. params.setTitleRows(0);
  519. params.setHeadRows(headerRowIndex);
  520. params.setNeedVerify(true);
  521. try {
  522. InputStream inputStream = ExcelUtil.solveOrginTitle(temporary, headerRowIndex);
  523. List<Map> excelDataList = ExcelUtil.importExcelByInputStream(inputStream, 0, headerRowIndex, Map.class);
  524. //数据超过1000条
  525. if(excelDataList != null && excelDataList.size() > 1000) {
  526. return ActionResult.fail(MsgCode.ETD117.get());
  527. }
  528. List<String> selectKey = Arrays.asList(${selectKey});
  529. //子表合并
  530. List<$mapObject> results = FormExecelUtils.dataMergeChildTable(excelDataList,selectKey);
  531. // 导入字段
  532. List<ExcelImFieldModel> columns = new ArrayList<>();
  533. ## 添加导入所有字段信息
  534. #foreach($fieldModel in $importFieldsNew)
  535. #set($config = $fieldModel.config)
  536. #set($vModel = ${fieldModel.vModel})
  537. #if($vModel.toLowerCase().startsWith("tablefield"))
  538. #if(${fieldModel.childList.size()}>0)
  539. //${vModel}子表对象
  540. List<ExcelImFieldModel> ${vModel}columns = new ArrayList<>();
  541. #foreach($child in ${fieldModel.childList})
  542. #set($itemFields =$child.fieLdsModel)
  543. ${vModel}columns.add(new ExcelImFieldModel("${itemFields.vModel}" ,"#if(${itemFields.config.required})*#end${itemFields.config.label}"));
  544. #end
  545. columns.add(new ExcelImFieldModel("${vModel}","${fieldModel.label}","table",${vModel}columns));
  546. #end
  547. #elseif($vModel.contains("complexHeader"))
  548. #set($item = ${fieldModel})
  549. #if(${item.childColumns.size()}>0 && ${item.uploadFieldList.size()}>0)
  550. //${item.fullName} 复杂表头对象
  551. List<ExcelImFieldModel> ${item.id}columns = new ArrayList<>();
  552. #foreach($itemFields in ${item.uploadFieldList})
  553. ${item.id}columns.add(new ExcelImFieldModel("${itemFields.vModel}" ,"#if(${itemFields.config.required})*#end${itemFields.label}"));
  554. #end
  555. columns.add(new ExcelImFieldModel("${item.id}","${item.fullName}","complexHeader",${item.id}columns));
  556. #end
  557. #else
  558. columns.add(new ExcelImFieldModel("${vModel}","${config.label}","${config.jnpfKey}"));
  559. #end
  560. #end
  561. headAndDataMap.put("dataRow" , results);
  562. headAndDataMap.put("headerRow" , JsonUtil.getJsonToList(JsonUtil.getListToJsonArray(columns)));
  563. } catch (Exception e){
  564. e.printStackTrace();
  565. return ActionResult.fail(MsgCode.VS407.get());
  566. }
  567. return ActionResult.success(headAndDataMap);
  568. }
  569. /**
  570. * 导入数据
  571. *
  572. * @return
  573. */
  574. @Operation(summary = "导入数据" )
  575. @PostMapping("/ImportData")
  576. public ActionResult<ExcelImportModel> ImportData(@RequestBody VisualImportModel visualImportModel) throws Exception {
  577. List<$mapObject> listData = null;
  578. List<$mapObject> headerRow = new ArrayList<>();
  579. if (visualImportModel.isType()){
  580. ActionResult result = ImportPreview(visualImportModel.getFileName());
  581. if (result == null){
  582. throw new Exception(MsgCode.FA018.get());
  583. }
  584. if (result.getCode() != 200){
  585. return result;
  586. }
  587. if (result.getData() instanceof Map){
  588. $mapObject dataMap = ($mapObject) result.getData();
  589. listData = (List<$mapObject>) dataMap.get("dataRow");
  590. headerRow = (List<$mapObject>) dataMap.get("headerRow");
  591. }
  592. }else{
  593. listData = visualImportModel.getList();
  594. }
  595. ImportFormCheckUniqueModel uniqueModel = new ImportFormCheckUniqueModel();
  596. uniqueModel.setDbLinkId(paramConst.getDbLinkId());
  597. uniqueModel.setPrimaryKeyPolicy(paramConst.getPrimaryKeyPolicy());
  598. uniqueModel.setLogicalDelete(paramConst.getLogicalDelete());
  599. uniqueModel.setUpdate(Objects.equals("${importType}", "2"));
  600. #if($isFlow)uniqueModel.setFlowId(visualImportModel.getFlowId()); #end
  601. Map<String,String> tablefieldkey = new HashMap<>();
  602. for (String key : paramConst.getTableFieldKey().keySet()) {
  603. tablefieldkey.put(key, paramConst.getTableRenames().get(paramConst.getTableFieldKey().get(key)));
  604. }
  605. ExcelImportModel excelImportModel = generaterSwapUtil.importData(paramConst,listData,uniqueModel);
  606. List<ImportDataModel> importDataModel = uniqueModel.getImportDataModel();
  607. for (ImportDataModel model : importDataModel) {
  608. String id = model.getId();
  609. $mapObject result = model.getResultData();
  610. if(StringUtil.isNotEmpty(id)){
  611. update(id, JsonUtil.getJsonToBean(result,${Name}Form.class), true);
  612. }else {
  613. create(#if($isFlow)RandomUtil.uuId(),#end JsonUtil.getJsonToBean(result,${Name}Form.class));
  614. }
  615. }
  616. excelImportModel.setHeaderRow(headerRow);
  617. return ActionResult.success(excelImportModel);
  618. }
  619. /**
  620. * 导出异常报告
  621. *
  622. * @return
  623. */
  624. @Operation(summary = "导出异常报告")
  625. @PostMapping("/ImportExceptionData")
  626. public ActionResult<DownloadVO> ImportExceptionData(@RequestBody VisualImportModel visualImportModel) {
  627. DownloadVO vo = DownloadVO.builder().build();
  628. UserInfo userInfo = userProvider.get();
  629. String menuFullName = generaterSwapUtil.getMenuName(visualImportModel.getMenuId());
  630. //主表对象
  631. List<ExcelExportEntity> entitys = new ArrayList<>();
  632. entitys.add(new ExcelExportEntity("异常原因", "errorsInfo",30));
  633. List<String> selectKeys = new ArrayList<>();
  634. //以下添加字段
  635. ## 导入字段添加到entity
  636. #foreach($fieldModel in $importFields)
  637. #set($config = $fieldModel.config)
  638. #set($vModel = ${fieldModel.vModel})
  639. #if($vModel.toLowerCase().startsWith("tablefield"))
  640. //${vModel}子表对象
  641. ExcelExportEntity ${vModel}ExcelEntity = new ExcelExportEntity("${fieldModel.label}(${vModel})","${vModel}");
  642. List<ExcelExportEntity> ${vModel}ExcelEntityList = new ArrayList<>();
  643. #foreach($child in ${fieldModel.childList})
  644. #set($itemFields =$child.fieLdsModel)
  645. ${vModel}ExcelEntityList.add(new ExcelExportEntity("${itemFields.config.label}($vModel-${itemFields.vModel})" ,"${itemFields.vModel}"));
  646. selectKeys.add("$vModel-${itemFields.vModel}");
  647. #end
  648. ${vModel}ExcelEntity.setList(${vModel}ExcelEntityList);
  649. entitys.add(${vModel}ExcelEntity);
  650. #else
  651. entitys.add(new ExcelExportEntity("${config.label}($vModel)" ,"$vModel"));
  652. selectKeys.add("${vModel}");
  653. #end
  654. #end
  655. ExcelModel excelModel = generaterSwapUtil.getExcelParams(paramConst.getFields().toJSONString(),selectKeys);
  656. List<${mapObject}> list = new ArrayList<>();
  657. list.addAll(visualImportModel.getList());
  658. ExportParams exportParams = new ExportParams(null, menuFullName + "模板");
  659. exportParams.setStyle(ExcelExportStyler.class);
  660. exportParams.setType(ExcelType.XSSF);
  661. exportParams.setFreezeCol(1);
  662. try{
  663. @Cleanup Workbook workbook = new HSSFWorkbook();
  664. if (entitys.size()>0){
  665. if (list.size()==0){
  666. list.add(new HashMap<>());
  667. }
  668. //复杂表头-表头和数据处理
  669. List<HeaderModel> complexHeaderList = JsonUtil.getJsonToList(paramConst.getComplexHeaderList(), HeaderModel.class);
  670. if (!Objects.equals(paramConst.getColumnType(), 3) && !Objects.equals(paramConst.getColumnType(), 5)) {
  671. entitys = VisualUtils.complexHeaderHandel(entitys, complexHeaderList, false);
  672. list = VisualUtils.complexHeaderDataHandel(list, complexHeaderList, false);
  673. }
  674. workbook = ExcelExportUtil.exportExcel(exportParams, entitys, list);
  675. ExcelHelper helper = new ExcelHelper();
  676. helper.init(workbook, exportParams, entitys, excelModel);
  677. helper.doPreHandle();
  678. helper.doPostHandle();
  679. }
  680. String fileName = menuFullName + "错误报告_" + DateUtil.dateNow("yyyyMMddHHmmss") + ".xls";
  681. MultipartFile multipartFile = ExcelUtil.workbookToCommonsMultipartFile(workbook, fileName);
  682. #if(${isCloud}=="cloud")
  683. FileInfo fileInfo = fileUploadApi.uploadFile(multipartFile, FileTypeConstant.TEMPORARY, fileName);
  684. #else
  685. FileInfo fileInfo = FileUploadUtils.uploadFile(new FileParameter(FileTypeConstant.TEMPORARY, fileName), multipartFile);
  686. #end
  687. vo.setName(fileInfo.getFilename());
  688. vo.setUrl(UploaderUtil.uploaderFile(fileInfo.getFilename() + "#" + FileTypeConstant.TEMPORARY) + "&name=" + fileName);
  689. } catch (Exception e) {
  690. e.printStackTrace();
  691. }
  692. return ActionResult.success(vo);
  693. }
  694. #end
  695. ## 导出
  696. #macro(ExportMethod)
  697. /**
  698. * 导出Excel
  699. *
  700. * @return
  701. */
  702. @Operation(summary = "导出Excel")
  703. @PostMapping("/Actions/Export")
  704. public ActionResult Export(@RequestBody ${Name}Pagination ${name}Pagination) throws IOException {
  705. if (StringUtil.isEmpty(${name}Pagination.getSelectKey())){
  706. return ActionResult.fail(MsgCode.IMP011.get());
  707. }
  708. List<${table.entityName}> list= ${serviceName}.getList(${name}Pagination);
  709. List<${mapObject}> realList=new ArrayList<>();
  710. for (${Name}Entity entity : list) {
  711. #EntityToMap()
  712. realList.add(${name}Map);
  713. }
  714. //数据转换
  715. String[]keys=!StringUtil.isEmpty(${name}Pagination.getSelectKey())?${name}Pagination.getSelectKey():new String[0];
  716. List<ExcelExportEntity> entitys=new ArrayList<>();
  717. if(keys.length>0){
  718. ## 子表对象
  719. #foreach($cl in $childTableHandle)
  720. ExcelExportEntity ${cl.tableModel}ExcelEntity = new ExcelExportEntity("${cl.label}(${cl.tableModel})","${cl.tableModel}");
  721. List<ExcelExportEntity> ${cl.tableModel}List = new ArrayList<>();
  722. #end
  723. #set($lineEditName = "#if(${lineEdit})_name#end")
  724. for(String key:keys){
  725. switch(key){
  726. #if($columnListSize.size()>0)
  727. ## 主表
  728. #foreach($fieldModel in ${mastTableHandle})
  729. #set($config = $fieldModel.config)
  730. #set($vModel = ${fieldModel.vModel})
  731. #if($vModel)
  732. case "${vModel}" :
  733. entitys.add(new ExcelExportEntity("${config.label}" ,"${vModel}${lineEditName}"));
  734. break;
  735. #end
  736. #end
  737. ## 副表
  738. #foreach($clid in $columnTableHandle)
  739. #set($fieLdsModelList = $clid.fieLdsModelList)
  740. #foreach($cf in $fieLdsModelList)
  741. #set($field = ${cf.field})
  742. #if($field)
  743. #set($label = $cf.mastTable.fieLdsModel.config.label)
  744. #set($lowName= ${cf.table.toLowerCase()})
  745. case "${cf.vModel}" :
  746. entitys.add(new ExcelExportEntity("${label}" ,"${cf.vModel}${lineEditName}"));
  747. break;
  748. #end
  749. #end
  750. #end
  751. ## 子表
  752. #foreach($cl in $childTableHandle)
  753. #set($clForm = $cl.childList)
  754. #foreach($clField in $clForm)
  755. #set($clForm = $clField.fieLdsModel)
  756. #if($!{clField.fieLdsModel.vModel})
  757. case "${cl.tableModel}-${clField.fieLdsModel.vModel}":
  758. ${cl.tableModel}List.add(new ExcelExportEntity("${clField.fieLdsModel.config.label}" ,"${clField.fieLdsModel.vModel}${lineEditName}"));
  759. break;
  760. #end
  761. #end
  762. #end
  763. default:
  764. break;
  765. #end
  766. }
  767. }
  768. #foreach($cl in $childTableHandle)
  769. if(${cl.tableModel}List.size() > 0){
  770. ${cl.tableModel}ExcelEntity.setList(${cl.tableModel}List);
  771. entitys.add(${cl.tableModel}ExcelEntity);
  772. }
  773. #end
  774. }
  775. DownloadVO vo = generaterSwapUtil.creatModelExcel(entitys,realList,keys,${name}Pagination.getMenuId(), ${name}Pagination.getModuleId(),paramConst,${lineEdit});
  776. return ActionResult.success(vo);
  777. }
  778. #end