后端代码位置

image.png

后端代码解析

查询自定义菜单模块详情

根据菜单URL中的菜单id,查询菜单详情规则,在vue前端首页,展示指定的规则信息,如:列表展示、查询字段、状态等等。

  1. /**
  2. * @title findVMenuInfo
  3. * @description 查询模块菜单信息
  4. * @author Administrator
  5. * @updateTime 2021/10/2 0002 22:11
  6. */
  7. @GetMapping("/findVMenuInfo")
  8. public void findVMenuInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {
  9. PageData pd = new PageData(request);
  10. Vmenu vmenu = vmenuService.getById(pd.get("menu_id").toString());
  11. Vform vform = vformService.getById(vmenu.getTable_id());
  12. vmenu.setVform(vform);
  13. pd.put("type","0");
  14. pd.put("table_id",vmenu.getTable_id());
  15. List<PageData> vmenuTfields = vmenuTfieldService.findFieldList(pd);
  16. vmenu.setFieldPdList(vmenuTfields);
  17. this.writeJson(response,vmenu);
  18. }

查询自定义表单详情

根据菜单模块id查询对应的拖拽表单信息,用于vue编辑页面的表单初始化及内容展示。

  1. /**
  2. * @title findVFormInfo
  3. * @description 查询自定义表单信息
  4. * @author Administrator
  5. * @updateTime 2021/10/3 0003 10:21
  6. */
  7. @GetMapping("/findVFormInfo")
  8. public void findVFormInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {
  9. PageData pd = new PageData(request);
  10. Vmenu vmenu = vmenuService.getById(pd.get("menu_id").toString());
  11. Vform vform = vformService.getById(vmenu.getTable_id());
  12. QueryWrapper queryWrapper = new QueryWrapper();
  13. queryWrapper.eq("table_id",vform.getId());
  14. List<Vfield> vfields = vfieldService.list(queryWrapper);
  15. vform.setVfields(vfields);
  16. this.writeJson(response,vform);
  17. }

查询关联表单详情

  1. /**
  2. * @title findLinkFormList
  3. * @description 查询关联表信息
  4. * @author Administrator
  5. * @updateTime 2021/10/3 0003 12:31
  6. */
  7. @GetMapping("/findLinkFormList")
  8. public void findLinkFormList(HttpServletRequest request, HttpServletResponse response) throws Exception {
  9. PageData pd = new PageData(request);
  10. QueryWrapper formWrapper = new QueryWrapper();
  11. formWrapper.eq("main_id",pd.get("table_id").toString());
  12. List<Vform> list = vformService.list(formWrapper);
  13. for (Vform vform:list) {
  14. QueryWrapper queryWrapper = new QueryWrapper();
  15. queryWrapper.eq("table_id",vform.getId());
  16. List<Vfield> vfields = vfieldService.list(queryWrapper);
  17. vform.setVfields(vfields);
  18. }
  19. this.writeJson(response,list);
  20. }

查询自定义模块分页列表

  1. /**
  2. * @title findListPage
  3. * @description 查询数据列表
  4. * @author Administrator
  5. * @updateTime 2021/10/1 0001 22:28
  6. */
  7. @GetMapping("/findListPage")
  8. // @PreAuthorize("hasAnyAuthority('vdata:info')")
  9. public MyResponse findListPage(QueryRequest queryRequest,HttpServletRequest request) throws Exception {
  10. PageData pd = new PageData(request);
  11. String userParams = SecurityContextHolder.getContext().getAuthentication().getName();
  12. //处理数据权限
  13. String user_id = userParams.split(":")[1];
  14. UserOrganize uoParam = new UserOrganize();
  15. uoParam.setUser_id(user_id);
  16. UserOrganize userOrganize = userOrganizeService.findUserOrganizeInfo(uoParam);
  17. List<String> auth_organize_ids = new ArrayList<String>();
  18. if(Verify.verifyIsNotNull(userOrganize)){
  19. if(Verify.verifyIsNotNull(userOrganize.getAuthOrgIds())){
  20. auth_organize_ids = Arrays.asList(userOrganize.getAuthOrgIds().split(","));
  21. }
  22. }
  23. pd.put("auth_user",user_id);
  24. pd.put("auth_organize_ids",auth_organize_ids);
  25. Vmenu vmenu = vmenuService.getById(pd.get("menu_id").toString());
  26. QueryWrapper queryWrapper = new QueryWrapper();
  27. queryWrapper.eq("menu_id",vmenu.getId());
  28. pd.put("type","0");
  29. pd.put("table_id",vmenu.getTable_id());
  30. List<PageData> vmenuTfields = vmenuTfieldService.findFieldList(pd);
  31. StringBuffer field = new StringBuffer();
  32. StringBuffer query_field = new StringBuffer();
  33. for (PageData mPd : vmenuTfields) {
  34. field.append("a." + mPd.get("field_name")).append(",");
  35. if (mPd.get("field_query").equals("true") && pd.containsKey(mPd.get("field_name"))) {//查询字段
  36. if(Verify.verifyIsNotNull(pd.get(mPd.get("field_name")))){
  37. if (mPd.get("query_type").equals("like")) {
  38. query_field.append(" and a." + mPd.get("field_name") + " like '%" + pd.get(mPd.get("field_name")) + "%'");
  39. } else if (mPd.get("query_type").equals("=") || mPd.get("query_type").equals(">") || mPd.get("query_type").equals(">=") || mPd.get("query_type").equals("!=")) {
  40. query_field.append(" and a." + mPd.get("field_name") + " " + mPd.get("query_type") + " '" + pd.get(mPd.get("field_name")) + "'");
  41. } else if (mPd.get("query_type").equals("<") || mPd.get("query_type").equals("<=")) {
  42. query_field.append(" and a." + mPd.get("field_name") + " " + mPd.get("query_type") + " '" + pd.get(mPd.get("field_name")) + "'");
  43. } else if (mPd.get("query_type").equals("is null") || mPd.get("query_type").equals("is not null")) {
  44. query_field.append(" and a." + mPd.get("field_name") + " " + mPd.get("query_type"));
  45. }
  46. }
  47. }
  48. }
  49. //是否开启创建时间段查询
  50. if(vmenu.getOpen_timequery().equals("0")){
  51. if(Verify.verifyIsNotNull(pd.get("start_time"))){
  52. query_field.append(" and a.create_time >='" + pd.get("start_time")+"'");
  53. }
  54. if(Verify.verifyIsNotNull(pd.get("end_time"))){
  55. query_field.append(" and a.create_time <='" + pd.get("end_time")+"'");
  56. }
  57. }
  58. //处理排序
  59. if(Verify.verifyIsNotNull(vmenu.getMain_order())){
  60. pd.put("order_by",vmenu.getMain_order());
  61. }else{
  62. pd.put("order_by"," order by a.create_time desc ");
  63. }
  64. //处理约束条件
  65. if(Verify.verifyIsNotNull(vmenu.getQuery_cond())){
  66. query_field.append(" "+vmenu.getQuery_cond()+" ");
  67. }
  68. Vform vform = vformService.getById(vmenu.getTable_id());
  69. pd.put("table_name", vform.getTable_name());
  70. pd.put("field", field.toString());
  71. pd.put("query_field", query_field.toString());
  72. IPage<PageData> list = dataService.findListPage(pd, queryRequest);
  73. for (PageData p:list.getRecords()) {
  74. QueryWrapper cformWrapper = new QueryWrapper();
  75. cformWrapper.eq("main_id",vmenu.getTable_id());
  76. List<Vform> vforms = vformService.list(cformWrapper);
  77. for (Vform form:vforms) {
  78. QueryWrapper cfieldWrapper = new QueryWrapper();
  79. cfieldWrapper.eq("table_id",form.getId());
  80. List<Vfield> vfs = vfieldService.list(cfieldWrapper);
  81. StringBuffer cQueryField = new StringBuffer();
  82. for (Vfield vfield : vfs) {
  83. cQueryField.append("a." + vfield.getField_name()).append(",");
  84. }
  85. pd.put("field", cQueryField.toString());
  86. pd.put("table_name",form.getTable_name());
  87. pd.put("main_id",p.get("id"));
  88. List<PageData> childList = dataService.findList(pd);
  89. p.put(form.getTable_name(),childList);
  90. }
  91. //处理流程信息
  92. if(vmenu.getOpen_process().equals("0")){
  93. String businessKey = "business:customize:"+vmenu.getId()+":"+p.get("id");
  94. p.put("businessKey",businessKey);
  95. List<Task> taskList = taskService.createTaskQuery().processInstanceBusinessKeyLike(businessKey).orderByTaskCreateTime().desc().list();
  96. if(Verify.verifyIsNotNull(taskList)&&taskList.size()>0){
  97. StringBuffer blr = new StringBuffer();
  98. StringBuffer blzt = new StringBuffer();
  99. for (Task task:taskList) {
  100. if(Verify.verifyIsNotNull(task.getAssignee())){
  101. pd.put("user_id",task.getAssignee());
  102. PageData userPd = userService.findUserInfo(pd);
  103. blr.append(userPd.get("name")).append(",");
  104. }else{
  105. blr.append("任务未认领").append(",");
  106. }
  107. blzt.append(task.getName()).append(",");
  108. }
  109. if(blr.length()>0){
  110. p.put("assignee",blr.substring(0,blr.length()-1));
  111. }
  112. if(blzt.length()>0){
  113. p.put("dealStatus",blzt.substring(0,blzt.length()-1));
  114. }
  115. p.put("processStatus","1");
  116. p.put("dealTime",DateTimeUtil.getDateTimeStr(taskList.get(0).getCreateTime()));
  117. }else{
  118. List<HistoricProcessInstance> piList = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessKey).list();
  119. if(piList.size()>0){
  120. p.put("dealStatus","流程已结束");
  121. p.put("processStatus","2");
  122. }else{
  123. p.put("dealStatus","流程未启动");
  124. p.put("processStatus","0");
  125. }
  126. }
  127. if(!p.get("processStatus").equals("0")){
  128. ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();
  129. if(Verify.verifyIsNotNull(processInstance)){
  130. p.put("processInstanceId",processInstance.getId());
  131. }
  132. }
  133. }
  134. }
  135. Map<String, Object> dataTable = MyUtil.getDataTable(list);
  136. MyResponse myResponse = new MyResponse();
  137. myResponse.data(dataTable);
  138. return myResponse;
  139. }

1、查询菜单模块规则

image.png

2、拼接查询条件信息image.png

3、处理排序和约束条件

image.png

4、执行查询主表数据列表image.png

5、处理关联流程

如果是流程表单,则查询关联的流程信息。
image.png

保存数据信息

更新数据和保存数据类似,可参考报数数据信息。
保存方法的核心代码在:VDataServiceImpl

  1. public void saveVData(PageData pd){
  2. Vform vform = vformService.getById(pd.get("table_id").toString());
  3. QueryWrapper queryWrapper = new QueryWrapper();
  4. queryWrapper.eq("table_id",vform.getId());
  5. List<Vfield> vfields = vfieldService.list(queryWrapper);
  6. StringBuffer paramKeyField = new StringBuffer();
  7. StringBuffer paramValueField = new StringBuffer();
  8. for (Vfield vfield : vfields) {
  9. if(!vfield.getField_type().equals("batch")){
  10. paramKeyField.append(vfield.getField_name()).append(",");
  11. paramValueField.append("#{"+vfield.getField_name()+"}").append(",");
  12. }
  13. //处理图片
  14. if(vfield.getField_type().equals("uploadFile")||vfield.getField_type().equals("uploadImg")){
  15. System.out.println("------------开始处理附件");
  16. System.out.println();
  17. List<PageData> list = (List<PageData>)pd.get(vfield.getField_name());
  18. pd.put(vfield.getField_name(), JsonToMap.list2json(list));
  19. }
  20. }
  21. String id = GuidUtil.getUuid();
  22. String time = DateTimeUtil.getDateTimeStr();
  23. String authParams = SecurityContextHolder.getContext().getAuthentication().getName();
  24. pd.put("id",id);
  25. pd.put("type","0");
  26. pd.put("status","0");
  27. pd.put("create_time",time);
  28. pd.put("create_user",authParams.split(":")[1]);
  29. pd.put("create_organize",authParams.split(":")[2]);
  30. pd.put("param_key", paramKeyField);
  31. pd.put("param_value", paramValueField);
  32. pd.put("table_name", vform.getTable_name());
  33. this.baseMapper.saveData(pd);
  34. //处理子表
  35. QueryWrapper formWrapper = new QueryWrapper();
  36. formWrapper.eq("main_id",pd.get("table_id").toString());
  37. List<Vform> vforms = vformService.list(formWrapper);
  38. for (Vform form:vforms) {
  39. QueryWrapper fieldWrapper = new QueryWrapper();
  40. fieldWrapper.eq("table_id",form.getId());
  41. List<Vfield> fields = vfieldService.list(fieldWrapper);
  42. StringBuffer field_k = new StringBuffer();
  43. StringBuffer field_v = new StringBuffer();
  44. List<String> uploadFiledName = new ArrayList<String>();
  45. for (Vfield field : fields) {
  46. field_k.append(field.getField_name()).append(",");
  47. field_v.append("#{"+field.getField_name()+"}").append(",");
  48. //处理图片
  49. if(field.getField_type().equals("uploadFile")||field.getField_type().equals("uploadImg")){
  50. uploadFiledName.add(field.getField_name());
  51. }
  52. }
  53. List<Map> dataList = (List<Map>)pd.get(form.getTable_name());
  54. for (Map map:dataList) {
  55. PageData p = PageData.getInstance().map2Pd(map);
  56. uploadFiledName.forEach(field_name->{
  57. List<PageData> list = (List<PageData>)p.get(field_name);
  58. p.put(field_name, JsonToMap.list2json(list));
  59. });
  60. p.put("main_id",id);
  61. p.put("table_name", form.getTable_name());
  62. p.put("param_key", field_k);
  63. p.put("param_value", field_v);
  64. p.put("id", GuidUtil.getUuid());
  65. p.put("type","0");
  66. p.put("status","0");
  67. p.put("create_time",time);
  68. p.put("create_user",authParams.split(":")[1]);
  69. p.put("create_organize",authParams.split(":")[2]);
  70. p.put("menu_id",pd.get("menu_id"));
  71. this.baseMapper.saveData(p);
  72. }
  73. }
  74. //流程提报
  75. Vmenu vmenu = vmenuService.getById(pd.get("menu_id").toString());
  76. if(vmenu.getOpen_process().equals("0")){
  77. String process_key = vmenu.getProcess_id();
  78. if(pd.get("submitType").equals("2")){
  79. //处理流程上报
  80. String businessKey = "business:customize:"+pd.get("menu_id")+":"+id;
  81. //获取当前用户
  82. String userParams = SecurityContextHolder.getContext().getAuthentication().getName();
  83. Authentication.setAuthenticatedUserId(userParams.split(":")[2]+"_"+userParams.split(":")[1]);
  84. runtimeService.startProcessInstanceByKey(process_key,businessKey,pd);
  85. System.out.println("============================");
  86. System.out.println("流程启动成功");
  87. //当前任务
  88. List<Task> list = taskService.createTaskQuery().processDefinitionKey(process_key).processInstanceBusinessKey(businessKey).orderByTaskCreateTime().desc().list();
  89. for (Task task:list) {
  90. //根据流程定义id获取bpmnModel对象
  91. BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());
  92. //获取当前节点信息
  93. FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());
  94. if(flowNode instanceof UserTask){
  95. List<Map> nodeData = (List<Map>)pd.get("nodeData");
  96. nodeData.forEach(item -> {
  97. if (item.get("node_id").equals(flowNode.getId())&&item.get("type").equals("1")) {//设置代办人
  98. //判断多实例
  99. UserTask userTask = (UserTask) flowNode;
  100. if (!(userTask.getBehavior() instanceof ParallelMultiInstanceBehavior) && !(userTask.getBehavior() instanceof SequentialMultiInstanceBehavior)) {//不是多实例需要设置下一节点办理人
  101. String deal_ids = item.get("deal_ids").toString();
  102. if (item.get("assign_mode").equals("10")) {
  103. String[] userIds = deal_ids.split(",");
  104. for (int i = 0; i < userIds.length; i++) {
  105. if (Verify.verifyIsNotNull(userIds[i])) {
  106. taskService.addCandidateUser(task.getId(), userIds[i]);
  107. }
  108. }
  109. }else if (item.get("assign_mode").equals("11")) {
  110. String[] organizeIds = deal_ids.split(",");
  111. for (int i = 0; i < organizeIds.length; i++) {
  112. if (Verify.verifyIsNotNull(organizeIds[i])) {
  113. taskService.addCandidateGroup(task.getId(), organizeIds[i]);
  114. }
  115. }
  116. } else {
  117. if (Verify.verifyIsNotNull(deal_ids)) {
  118. taskService.setAssignee(task.getId(), deal_ids);
  119. }
  120. }
  121. }
  122. }
  123. });
  124. }
  125. }
  126. }
  127. }
  128. }

1、查询拖拽表单及规则-组织字段信息

image.png

2、处理基础参数信息及保存

image.png

3、处理子表信息,组织子表字段

image.png

4、数据转换及保存子表

image.png

5、如果是流程表单-启动流程

image.png
image.png

删除数据

  1. //删除数据
  2. public void delData(PageData pd){
  3. Vform vform = vformService.getById(pd.get("table_id").toString());
  4. String[] del_ids = pd.get("ids").toString().split(StringPool.COMMA);
  5. pd.put("ids", Arrays.asList(del_ids));
  6. pd.put("table_name",vform.getTable_name());
  7. this.baseMapper.delData(pd);
  8. //处理子表
  9. QueryWrapper formWrapper = new QueryWrapper();
  10. formWrapper.eq("main_id",pd.get("table_id").toString());
  11. List<Vform> vforms = vformService.list(formWrapper);
  12. for (Vform form:vforms) {
  13. pd.put("main_ids", Arrays.asList(del_ids));
  14. pd.put("table_name",form.getTable_name());
  15. this.baseMapper.delChildData(pd);
  16. }
  17. }