后端代码位置
后端代码解析
查询自定义菜单模块详情
根据菜单URL中的菜单id,查询菜单详情规则,在vue前端首页,展示指定的规则信息,如:列表展示、查询字段、状态等等。
/*** @title findVMenuInfo* @description 查询模块菜单信息* @author Administrator* @updateTime 2021/10/2 0002 22:11*/@GetMapping("/findVMenuInfo")public void findVMenuInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {PageData pd = new PageData(request);Vmenu vmenu = vmenuService.getById(pd.get("menu_id").toString());Vform vform = vformService.getById(vmenu.getTable_id());vmenu.setVform(vform);pd.put("type","0");pd.put("table_id",vmenu.getTable_id());List<PageData> vmenuTfields = vmenuTfieldService.findFieldList(pd);vmenu.setFieldPdList(vmenuTfields);this.writeJson(response,vmenu);}
查询自定义表单详情
根据菜单模块id查询对应的拖拽表单信息,用于vue编辑页面的表单初始化及内容展示。
/*** @title findVFormInfo* @description 查询自定义表单信息* @author Administrator* @updateTime 2021/10/3 0003 10:21*/@GetMapping("/findVFormInfo")public void findVFormInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {PageData pd = new PageData(request);Vmenu vmenu = vmenuService.getById(pd.get("menu_id").toString());Vform vform = vformService.getById(vmenu.getTable_id());QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("table_id",vform.getId());List<Vfield> vfields = vfieldService.list(queryWrapper);vform.setVfields(vfields);this.writeJson(response,vform);}
查询关联表单详情
/*** @title findLinkFormList* @description 查询关联表信息* @author Administrator* @updateTime 2021/10/3 0003 12:31*/@GetMapping("/findLinkFormList")public void findLinkFormList(HttpServletRequest request, HttpServletResponse response) throws Exception {PageData pd = new PageData(request);QueryWrapper formWrapper = new QueryWrapper();formWrapper.eq("main_id",pd.get("table_id").toString());List<Vform> list = vformService.list(formWrapper);for (Vform vform:list) {QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("table_id",vform.getId());List<Vfield> vfields = vfieldService.list(queryWrapper);vform.setVfields(vfields);}this.writeJson(response,list);}
查询自定义模块分页列表
/*** @title findListPage* @description 查询数据列表* @author Administrator* @updateTime 2021/10/1 0001 22:28*/@GetMapping("/findListPage")// @PreAuthorize("hasAnyAuthority('vdata:info')")public MyResponse findListPage(QueryRequest queryRequest,HttpServletRequest request) throws Exception {PageData pd = new PageData(request);String userParams = SecurityContextHolder.getContext().getAuthentication().getName();//处理数据权限String user_id = userParams.split(":")[1];UserOrganize uoParam = new UserOrganize();uoParam.setUser_id(user_id);UserOrganize userOrganize = userOrganizeService.findUserOrganizeInfo(uoParam);List<String> auth_organize_ids = new ArrayList<String>();if(Verify.verifyIsNotNull(userOrganize)){if(Verify.verifyIsNotNull(userOrganize.getAuthOrgIds())){auth_organize_ids = Arrays.asList(userOrganize.getAuthOrgIds().split(","));}}pd.put("auth_user",user_id);pd.put("auth_organize_ids",auth_organize_ids);Vmenu vmenu = vmenuService.getById(pd.get("menu_id").toString());QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("menu_id",vmenu.getId());pd.put("type","0");pd.put("table_id",vmenu.getTable_id());List<PageData> vmenuTfields = vmenuTfieldService.findFieldList(pd);StringBuffer field = new StringBuffer();StringBuffer query_field = new StringBuffer();for (PageData mPd : vmenuTfields) {field.append("a." + mPd.get("field_name")).append(",");if (mPd.get("field_query").equals("true") && pd.containsKey(mPd.get("field_name"))) {//查询字段if(Verify.verifyIsNotNull(pd.get(mPd.get("field_name")))){if (mPd.get("query_type").equals("like")) {query_field.append(" and a." + mPd.get("field_name") + " like '%" + pd.get(mPd.get("field_name")) + "%'");} else if (mPd.get("query_type").equals("=") || mPd.get("query_type").equals(">") || mPd.get("query_type").equals(">=") || mPd.get("query_type").equals("!=")) {query_field.append(" and a." + mPd.get("field_name") + " " + mPd.get("query_type") + " '" + pd.get(mPd.get("field_name")) + "'");} else if (mPd.get("query_type").equals("<") || mPd.get("query_type").equals("<=")) {query_field.append(" and a." + mPd.get("field_name") + " " + mPd.get("query_type") + " '" + pd.get(mPd.get("field_name")) + "'");} else if (mPd.get("query_type").equals("is null") || mPd.get("query_type").equals("is not null")) {query_field.append(" and a." + mPd.get("field_name") + " " + mPd.get("query_type"));}}}}//是否开启创建时间段查询if(vmenu.getOpen_timequery().equals("0")){if(Verify.verifyIsNotNull(pd.get("start_time"))){query_field.append(" and a.create_time >='" + pd.get("start_time")+"'");}if(Verify.verifyIsNotNull(pd.get("end_time"))){query_field.append(" and a.create_time <='" + pd.get("end_time")+"'");}}//处理排序if(Verify.verifyIsNotNull(vmenu.getMain_order())){pd.put("order_by",vmenu.getMain_order());}else{pd.put("order_by"," order by a.create_time desc ");}//处理约束条件if(Verify.verifyIsNotNull(vmenu.getQuery_cond())){query_field.append(" "+vmenu.getQuery_cond()+" ");}Vform vform = vformService.getById(vmenu.getTable_id());pd.put("table_name", vform.getTable_name());pd.put("field", field.toString());pd.put("query_field", query_field.toString());IPage<PageData> list = dataService.findListPage(pd, queryRequest);for (PageData p:list.getRecords()) {QueryWrapper cformWrapper = new QueryWrapper();cformWrapper.eq("main_id",vmenu.getTable_id());List<Vform> vforms = vformService.list(cformWrapper);for (Vform form:vforms) {QueryWrapper cfieldWrapper = new QueryWrapper();cfieldWrapper.eq("table_id",form.getId());List<Vfield> vfs = vfieldService.list(cfieldWrapper);StringBuffer cQueryField = new StringBuffer();for (Vfield vfield : vfs) {cQueryField.append("a." + vfield.getField_name()).append(",");}pd.put("field", cQueryField.toString());pd.put("table_name",form.getTable_name());pd.put("main_id",p.get("id"));List<PageData> childList = dataService.findList(pd);p.put(form.getTable_name(),childList);}//处理流程信息if(vmenu.getOpen_process().equals("0")){String businessKey = "business:customize:"+vmenu.getId()+":"+p.get("id");p.put("businessKey",businessKey);List<Task> taskList = taskService.createTaskQuery().processInstanceBusinessKeyLike(businessKey).orderByTaskCreateTime().desc().list();if(Verify.verifyIsNotNull(taskList)&&taskList.size()>0){StringBuffer blr = new StringBuffer();StringBuffer blzt = new StringBuffer();for (Task task:taskList) {if(Verify.verifyIsNotNull(task.getAssignee())){pd.put("user_id",task.getAssignee());PageData userPd = userService.findUserInfo(pd);blr.append(userPd.get("name")).append(",");}else{blr.append("任务未认领").append(",");}blzt.append(task.getName()).append(",");}if(blr.length()>0){p.put("assignee",blr.substring(0,blr.length()-1));}if(blzt.length()>0){p.put("dealStatus",blzt.substring(0,blzt.length()-1));}p.put("processStatus","1");p.put("dealTime",DateTimeUtil.getDateTimeStr(taskList.get(0).getCreateTime()));}else{List<HistoricProcessInstance> piList = historyService.createHistoricProcessInstanceQuery().processInstanceBusinessKey(businessKey).list();if(piList.size()>0){p.put("dealStatus","流程已结束");p.put("processStatus","2");}else{p.put("dealStatus","流程未启动");p.put("processStatus","0");}}if(!p.get("processStatus").equals("0")){ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceBusinessKey(businessKey).singleResult();if(Verify.verifyIsNotNull(processInstance)){p.put("processInstanceId",processInstance.getId());}}}}Map<String, Object> dataTable = MyUtil.getDataTable(list);MyResponse myResponse = new MyResponse();myResponse.data(dataTable);return myResponse;}
1、查询菜单模块规则
2、拼接查询条件信息
3、处理排序和约束条件
4、执行查询主表数据列表
5、处理关联流程
如果是流程表单,则查询关联的流程信息。
保存数据信息
更新数据和保存数据类似,可参考报数数据信息。
保存方法的核心代码在:VDataServiceImpl
public void saveVData(PageData pd){Vform vform = vformService.getById(pd.get("table_id").toString());QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.eq("table_id",vform.getId());List<Vfield> vfields = vfieldService.list(queryWrapper);StringBuffer paramKeyField = new StringBuffer();StringBuffer paramValueField = new StringBuffer();for (Vfield vfield : vfields) {if(!vfield.getField_type().equals("batch")){paramKeyField.append(vfield.getField_name()).append(",");paramValueField.append("#{"+vfield.getField_name()+"}").append(",");}//处理图片if(vfield.getField_type().equals("uploadFile")||vfield.getField_type().equals("uploadImg")){System.out.println("------------开始处理附件");System.out.println();List<PageData> list = (List<PageData>)pd.get(vfield.getField_name());pd.put(vfield.getField_name(), JsonToMap.list2json(list));}}String id = GuidUtil.getUuid();String time = DateTimeUtil.getDateTimeStr();String authParams = SecurityContextHolder.getContext().getAuthentication().getName();pd.put("id",id);pd.put("type","0");pd.put("status","0");pd.put("create_time",time);pd.put("create_user",authParams.split(":")[1]);pd.put("create_organize",authParams.split(":")[2]);pd.put("param_key", paramKeyField);pd.put("param_value", paramValueField);pd.put("table_name", vform.getTable_name());this.baseMapper.saveData(pd);//处理子表QueryWrapper formWrapper = new QueryWrapper();formWrapper.eq("main_id",pd.get("table_id").toString());List<Vform> vforms = vformService.list(formWrapper);for (Vform form:vforms) {QueryWrapper fieldWrapper = new QueryWrapper();fieldWrapper.eq("table_id",form.getId());List<Vfield> fields = vfieldService.list(fieldWrapper);StringBuffer field_k = new StringBuffer();StringBuffer field_v = new StringBuffer();List<String> uploadFiledName = new ArrayList<String>();for (Vfield field : fields) {field_k.append(field.getField_name()).append(",");field_v.append("#{"+field.getField_name()+"}").append(",");//处理图片if(field.getField_type().equals("uploadFile")||field.getField_type().equals("uploadImg")){uploadFiledName.add(field.getField_name());}}List<Map> dataList = (List<Map>)pd.get(form.getTable_name());for (Map map:dataList) {PageData p = PageData.getInstance().map2Pd(map);uploadFiledName.forEach(field_name->{List<PageData> list = (List<PageData>)p.get(field_name);p.put(field_name, JsonToMap.list2json(list));});p.put("main_id",id);p.put("table_name", form.getTable_name());p.put("param_key", field_k);p.put("param_value", field_v);p.put("id", GuidUtil.getUuid());p.put("type","0");p.put("status","0");p.put("create_time",time);p.put("create_user",authParams.split(":")[1]);p.put("create_organize",authParams.split(":")[2]);p.put("menu_id",pd.get("menu_id"));this.baseMapper.saveData(p);}}//流程提报Vmenu vmenu = vmenuService.getById(pd.get("menu_id").toString());if(vmenu.getOpen_process().equals("0")){String process_key = vmenu.getProcess_id();if(pd.get("submitType").equals("2")){//处理流程上报String businessKey = "business:customize:"+pd.get("menu_id")+":"+id;//获取当前用户String userParams = SecurityContextHolder.getContext().getAuthentication().getName();Authentication.setAuthenticatedUserId(userParams.split(":")[2]+"_"+userParams.split(":")[1]);runtimeService.startProcessInstanceByKey(process_key,businessKey,pd);System.out.println("============================");System.out.println("流程启动成功");//当前任务List<Task> list = taskService.createTaskQuery().processDefinitionKey(process_key).processInstanceBusinessKey(businessKey).orderByTaskCreateTime().desc().list();for (Task task:list) {//根据流程定义id获取bpmnModel对象BpmnModel bpmnModel = repositoryService.getBpmnModel(task.getProcessDefinitionId());//获取当前节点信息FlowNode flowNode = (FlowNode) bpmnModel.getFlowElement(task.getTaskDefinitionKey());if(flowNode instanceof UserTask){List<Map> nodeData = (List<Map>)pd.get("nodeData");nodeData.forEach(item -> {if (item.get("node_id").equals(flowNode.getId())&&item.get("type").equals("1")) {//设置代办人//判断多实例UserTask userTask = (UserTask) flowNode;if (!(userTask.getBehavior() instanceof ParallelMultiInstanceBehavior) && !(userTask.getBehavior() instanceof SequentialMultiInstanceBehavior)) {//不是多实例需要设置下一节点办理人String deal_ids = item.get("deal_ids").toString();if (item.get("assign_mode").equals("10")) {String[] userIds = deal_ids.split(",");for (int i = 0; i < userIds.length; i++) {if (Verify.verifyIsNotNull(userIds[i])) {taskService.addCandidateUser(task.getId(), userIds[i]);}}}else if (item.get("assign_mode").equals("11")) {String[] organizeIds = deal_ids.split(",");for (int i = 0; i < organizeIds.length; i++) {if (Verify.verifyIsNotNull(organizeIds[i])) {taskService.addCandidateGroup(task.getId(), organizeIds[i]);}}} else {if (Verify.verifyIsNotNull(deal_ids)) {taskService.setAssignee(task.getId(), deal_ids);}}}}});}}}}}
1、查询拖拽表单及规则-组织字段信息
2、处理基础参数信息及保存
3、处理子表信息,组织子表字段
4、数据转换及保存子表
5、如果是流程表单-启动流程


删除数据
//删除数据public void delData(PageData pd){Vform vform = vformService.getById(pd.get("table_id").toString());String[] del_ids = pd.get("ids").toString().split(StringPool.COMMA);pd.put("ids", Arrays.asList(del_ids));pd.put("table_name",vform.getTable_name());this.baseMapper.delData(pd);//处理子表QueryWrapper formWrapper = new QueryWrapper();formWrapper.eq("main_id",pd.get("table_id").toString());List<Vform> vforms = vformService.list(formWrapper);for (Vform form:vforms) {pd.put("main_ids", Arrays.asList(del_ids));pd.put("table_name",form.getTable_name());this.baseMapper.delChildData(pd);}}
