| | |
| | | import com.vci.ubcs.code.vo.pagemodel.UITableFieldVO; |
| | | import com.vci.ubcs.code.vo.pagemodel.UITablePageVO; |
| | | import com.vci.ubcs.code.vo.pagemodel.*; |
| | | import com.vci.ubcs.flow.core.entity.ProcessStageAttr; |
| | | import com.vci.ubcs.flow.core.feign.IMDMIFlowAttrClient; |
| | | import com.vci.ubcs.flow.core.vo.ProcessStageAttrVO; |
| | | import com.vci.ubcs.omd.constant.BtmTypeLcStatusConstant; |
| | | import com.vci.ubcs.omd.cache.EnumCache; |
| | | import com.vci.ubcs.omd.feign.*; |
| | |
| | | import com.vci.ubcs.starter.util.UBCSSqlKeyword; |
| | | import com.vci.ubcs.starter.web.constant.QueryOptionConstant; |
| | | import com.vci.ubcs.starter.web.constant.RegExpConstant; |
| | | import com.vci.ubcs.starter.web.constant.VciSystemVarConstants; |
| | | import com.vci.ubcs.starter.web.enumpck.BooleanEnum; |
| | | import com.vci.ubcs.starter.web.enumpck.UserSecretEnum; |
| | | import com.vci.ubcs.starter.web.enumpck.VciFieldTypeEnum; |
| | |
| | | * 替换字符 |
| | | */ |
| | | public static final String SPECIAL_CHAR = "VCI"; |
| | | /** |
| | | * 主数据流程阶段服务 |
| | | */ |
| | | @Autowired |
| | | private IMDMIFlowAttrClient imdmiFlowAttrClient; |
| | | // @Autowired |
| | | // private CodeOsbtmtypeMapper codeOsbtmtypeMapper;---- |
| | | |
| | |
| | | public String addSaveCode(CodeOrderDTO orderDTO) throws Exception { |
| | | VciBaseUtil.alertNotNull(orderDTO, "编码申请相关的属性和码段的内容都为空", orderDTO.getCodeClassifyOid(), "主题库分类的主键", |
| | | orderDTO.getTemplateOid(), "模板的主键", orderDTO.getCodeRuleOid(), "编码规则的主键"); |
| | | VciSystemVarConstants.getSystemVarValueMap(); |
| | | CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(orderDTO.getCodeClassifyOid()); |
| | | CodeClassifyTemplateVO templateVO = templateService.getObjectHasAttrByOid(orderDTO.getTemplateOid()); |
| | | CodeRuleVO ruleVO = ruleService.getObjectHasSecByOid(orderDTO.getCodeRuleOid()); |
| | |
| | | CodeClassifyFullInfoBO classifyFullInfo = classifyService.getClassifyFullInfo(codeClassifyOid); |
| | | |
| | | List<UIFormItemVO> itemVOS = new ArrayList<>(); |
| | | Map<String, List<CodeClassifyTemplateAttrVO>> attrGroupMap = templateVO.getAttributes().stream(). |
| | | filter(s -> StringUtils.isNotBlank(s.getAttributeGroup())).collect(Collectors.groupingBy(s -> s.getAttributeGroup())); |
| | | |
| | | templateVO.getAttributes().forEach(attrVO -> { |
| | | UIFormItemVO formItemVO = templateAttr2FormField(attrVO, templateVO.getBtmTypeId()); |
| | | itemVOS.add(formItemVO); |
| | | }); |
| | | Map<String, List<CodeClassifyTemplateAttrVO>> attrGroupMap = new HashMap<>(); |
| | | if (Func.isNotEmpty(templateVO.getAttributes())) { |
| | | attrGroupMap = templateVO.getAttributes().stream(). |
| | | filter(s -> StringUtils.isNotBlank(s.getAttributeGroup())).collect(Collectors.groupingBy(s -> s.getAttributeGroup())); |
| | | templateVO.getAttributes().forEach(attrVO -> { |
| | | UIFormItemVO formItemVO = templateAttr2FormField(attrVO, templateVO.getBtmTypeId()); |
| | | itemVOS.add(formItemVO); |
| | | }); |
| | | } |
| | | //处理属性分组 |
| | | if (!CollectionUtils.isEmpty(attrGroupMap)) { |
| | | //按照分组的属性排列,找到每一个分组的第一个属性 |
| | |
| | | } |
| | | //先转换一下时间格式 |
| | | List<String> finalOnlySelectAttrIdList = onlySelectAttrIdList.stream().collect(Collectors.toList()); |
| | | List<CodeClassifyTemplateAttrVO> dateFormatAttrVOs = templateVO.getAttributes().stream().filter( |
| | | s -> StringUtils.isNotBlank(s.getCodeDateFormat()) && |
| | | (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT))) |
| | | ).collect(Collectors.toList()); |
| | | //枚举的内容 |
| | | List<CodeClassifyTemplateAttrVO> enumAttrVOs = templateVO.getAttributes().stream().filter( |
| | | s -> (StringUtils.isNotBlank(s.getEnumId()) || StringUtils.isNotBlank(s.getEnumString())) |
| | | && |
| | | (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT))) |
| | | ).collect(Collectors.toList()); |
| | | List<CodeClassifyTemplateAttrVO> dateFormatAttrVOs = new ArrayList<>(); |
| | | List<CodeClassifyTemplateAttrVO> enumAttrVOs = new ArrayList<>(); |
| | | if (Func.isNotEmpty(templateVO.getAttributes())) { |
| | | dateFormatAttrVOs = templateVO.getAttributes().stream().filter( |
| | | s -> StringUtils.isNotBlank(s.getCodeDateFormat()) && |
| | | (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT))) |
| | | ).collect(Collectors.toList()); |
| | | //枚举的内容 |
| | | enumAttrVOs = templateVO.getAttributes().stream().filter( |
| | | s -> (StringUtils.isNotBlank(s.getEnumId()) || StringUtils.isNotBlank(s.getEnumString())) |
| | | && |
| | | (finalOnlySelectAttrIdList.size() == 0 || finalOnlySelectAttrIdList.contains(s.getId().toLowerCase(Locale.ROOT))) |
| | | ).collect(Collectors.toList()); |
| | | } |
| | | |
| | | List<String> userIds = new ArrayList<>(); |
| | | dataMap.stream().forEach(data -> { |
| | | List<CodeClassifyTemplateAttrVO> finalDateFormatAttrVOs = dateFormatAttrVOs; |
| | | List<CodeClassifyTemplateAttrVO> finalEnumAttrVOs = enumAttrVOs; |
| | | dataMap.stream().forEach(data -> { |
| | | //处理时间 |
| | | if (!form) { |
| | | //表单的时候只能用统一的时间格式 |
| | | wrapperDateFormat(dateFormatAttrVOs, data); |
| | | wrapperDateFormat(finalDateFormatAttrVOs, data); |
| | | } |
| | | //处理枚举 |
| | | wrapperEnum(enumAttrVOs, data); |
| | | wrapperEnum(finalEnumAttrVOs, data); |
| | | String lcstatus = data.get(VciQueryWrapperForDO.LC_STATUS_FIELD); |
| | | String copyFromVersion = data.getOrDefault(COPY_FROM_VERSION, ""); |
| | | if ((CodeDefaultLC.EDITING.getValue().equalsIgnoreCase(lcstatus) || CodeDefaultLC.AUDITING.getValue().equalsIgnoreCase(lcstatus)) |
| | |
| | | //因为参照不一定是在平台的属性池里面设置,所以我们得需要自行处理 |
| | | //参考VciQueryWrapper来处理 |
| | | //1. 找到所有的字段, |
| | | Map<String, CodeClassifyTemplateAttrVO> attrVOMap = templateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); |
| | | List<String> selectFieldList = attrVOMap.keySet().stream().collect(Collectors.toList()); |
| | | Map<String, CodeClassifyTemplateAttrVO> attrVOMap = new HashMap<>(); |
| | | List<String> selectFieldList = new ArrayList<>(); |
| | | if(Func.isNotEmpty(templateVO.getAttributes())){ |
| | | attrVOMap = templateVO.getAttributes().stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); |
| | | selectFieldList = attrVOMap.keySet().stream().collect(Collectors.toList()); |
| | | } |
| | | |
| | | //所有的参照的字段 |
| | | Map<String/**属性字段**/, String> joinTableList = new ConcurrentHashMap<>(); |
| | | List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter( |
| | | s -> StringUtils.isNotBlank(s.getReferBtmId()) || StringUtils.isNotBlank(s.getReferConfig()) |
| | | ).collect(Collectors.toList()); |
| | | List<CodeClassifyTemplateAttrVO> referAttrVOs = null; |
| | | if (Func.isNotEmpty(templateVO.getAttributes())) { |
| | | referAttrVOs = templateVO.getAttributes().stream().filter( |
| | | s -> StringUtils.isNotBlank(s.getReferBtmId()) || StringUtils.isNotBlank(s.getReferConfig()) |
| | | ).collect(Collectors.toList()); |
| | | } |
| | | Map<String/**参照的属性**/, String/**实际的字段**/> referFieldMap = new ConcurrentHashMap<>(); |
| | | if (!CollectionUtils.isEmpty(referAttrVOs)) { |
| | | referAttrVOs.parallelStream().forEach(attrVO -> { |
| | | List<String> finalSelectFieldList = selectFieldList; |
| | | referAttrVOs.parallelStream().forEach(attrVO -> { |
| | | UIFormReferVO referVO = null; |
| | | if (StringUtils.isNotBlank(attrVO.getReferConfig())) { |
| | | referVO = JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class); |
| | |
| | | showFieldInSource = textFields.get(0); |
| | | } |
| | | referFieldMap.put(attrVO.getId(), referTableNick + "." + showFieldInSource); |
| | | selectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField); |
| | | finalSelectFieldList.add(referTableNick + "." + showFieldInSource + " as " + referShowField); |
| | | }); |
| | | } |
| | | R<BtmTypeVO> allAttributeByBtmId = btmTypeClient.getDefaultAttrByBtmId(btmType); |
| | |
| | | } |
| | | }); |
| | | |
| | | andCondtionMap.forEach((k, v) -> { |
| | | andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap, btmType)); |
| | | Map<String, CodeClassifyTemplateAttrVO> finalAttrVOMap = attrVOMap; |
| | | andCondtionMap.forEach((k, v) -> { |
| | | andSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, finalAttrVOMap, btmType)); |
| | | }); |
| | | orConditionMap.forEach((k, v) -> { |
| | | orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, attrVOMap, btmType)); |
| | | orSql.add(getConditionSql(k.toLowerCase(), v, referFieldMap, finalAttrVOMap, btmType)); |
| | | }); |
| | | } |
| | | //组合起来 |
| | |
| | | return uiInfoVO; |
| | | } |
| | | |
| | | /** |
| | | * 使用分类的主键获取表格的定义-ubcs后修改获取流程阶段熟悉获取方法 |
| | | * @param codeClassifyOid |
| | | * @param templateId |
| | | * @param taskId |
| | | * @param modelKey |
| | | * @return |
| | | */ |
| | | public MdmUIInfoVO getTableDefineByClassifyOid_v2(String codeClassifyOid,String templateId,String taskId,String modelKey) { |
| | | MdmUIInfoVO uiInfoVO = new MdmUIInfoVO(); |
| | | CodeClassifyTemplateVO templateVO = getUsedTemplateByClassifyOid(codeClassifyOid); |
| | | uiInfoVO.setTemplateVO(templateVO); |
| | | UITableDefineVO uiTableDefineVO = wrapperTableDefineByTemplate(templateVO, true); |
| | | R<List<ProcessStageAttrVO>> r = imdmiFlowAttrClient.ssslist(templateId,modelKey,taskId); |
| | | List<ProcessStageAttrVO> stageAttrVOS = r.getData(); |
| | | List<String> attrList = new ArrayList<>(); |
| | | stageAttrVOS.stream().forEach(attr->{ |
| | | attrList.add(attr.getAttrId()); |
| | | }); |
| | | uiTableDefineVO.getCols().stream().forEach(list -> { |
| | | List<UITableFieldVO> visiableTableField = new ArrayList<>(); |
| | | visiableTableField = list.stream().filter(col -> |
| | | attrList.stream().anyMatch(s -> StringUtils.equalsIgnoreCase(col.getField(), s) || |
| | | (StringUtils.equalsIgnoreCase(col.getFieldType(), "combox") && StringUtils.equalsIgnoreCase(col.getSortField(), s)) |
| | | || (StringUtils.equalsIgnoreCase(col.getFieldType(), "refer") && StringUtils.equalsIgnoreCase(col.getQueryField(), s)) |
| | | )).collect(Collectors.toList()); |
| | | |
| | | visiableTableField.stream().forEach(vo -> { |
| | | uiTableDefineVO.setHasEditor(true); |
| | | if ("refer".equalsIgnoreCase(vo.getFieldType())) { |
| | | setReferConfig2EditConfig(vo); |
| | | } else if ("combox".equalsIgnoreCase(vo.getFieldType())) { |
| | | setComboxConfig2EditConfig(vo); |
| | | } else if (StringUtils.isNotBlank(vo.getDateFormate())) { |
| | | vo.setEdit("date"); |
| | | } else { |
| | | vo.setEdit(vo.getFieldType()); |
| | | } |
| | | }); |
| | | }); |
| | | uiInfoVO.setTableDefineVO(uiTableDefineVO); |
| | | wrapperResemble(templateVO, uiInfoVO); |
| | | return uiInfoVO; |
| | | } |
| | | |
| | | /** |
| | | * 模板属性转换为表格定义的信息 |
| | | * |
| | |
| | | List<UITableFieldVO> fieldVOList = new ArrayList<>(); |
| | | Map<String, String> comboxOrReferFieldMap = new HashMap<>(); |
| | | |
| | | templateVO.getAttributes().forEach(attrVO -> { |
| | | UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO, forEdit); |
| | | if ("combox".equalsIgnoreCase(tableFieldVO.getFieldType())) { |
| | | comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField()); |
| | | } |
| | | if ("refer".equalsIgnoreCase(tableFieldVO.getFieldType())) { |
| | | comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField()); |
| | | } |
| | | if (StringUtils.isNotBlank(tableFieldVO.getEdit())) { |
| | | tableDefineVO.setHasEditor(true); |
| | | } |
| | | fieldVOList.add(tableFieldVO); |
| | | }); |
| | | if (Func.isNotEmpty(templateVO.getAttributes())) { |
| | | templateVO.getAttributes().forEach(attrVO -> { |
| | | UITableFieldVO tableFieldVO = templateAttr2TableField(attrVO, forEdit); |
| | | if ("combox".equalsIgnoreCase(tableFieldVO.getFieldType())) { |
| | | comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField()); |
| | | } |
| | | if ("refer".equalsIgnoreCase(tableFieldVO.getFieldType())) { |
| | | comboxOrReferFieldMap.put(tableFieldVO.getSortField(), tableFieldVO.getField()); |
| | | } |
| | | if (StringUtils.isNotBlank(tableFieldVO.getEdit())) { |
| | | tableDefineVO.setHasEditor(true); |
| | | } |
| | | fieldVOList.add(tableFieldVO); |
| | | }); |
| | | } |
| | | List<List<UITableFieldVO>> cols = new ArrayList<>(); |
| | | cols.add(fieldVOList); |
| | | tableDefineVO.setCols(cols); |
| | | Map<String, UITableFieldVO> fieldVOMap = fieldVOList.stream().collect(Collectors.toMap(s -> s.getField().toLowerCase(Locale.ROOT), t -> t)); |
| | | //查询属性 |
| | | List<CodeClassifyTemplateAttrVO> queryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getQueryAttrFlag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(queryAttrVOs)) { |
| | | List<UITableFieldVO> queryFieldVOs = new ArrayList<>(); |
| | | queryAttrVOs.stream().forEach(attrVO -> { |
| | | String attrId = attrVO.getId().toLowerCase(Locale.ROOT); |
| | | attrId = comboxOrReferFieldMap.getOrDefault(attrId, attrVO.getId()).toLowerCase(Locale.ROOT); |
| | | if (fieldVOMap.containsKey(attrId)) { |
| | | queryFieldVOs.add(fieldVOMap.get(attrId)); |
| | | } |
| | | }); |
| | | tableDefineVO.setQueryColumns(queryFieldVOs); |
| | | } |
| | | //高级属性 |
| | | List<CodeClassifyTemplateAttrVO> seniorQueryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getSeniorQueryAttrFlag())).collect(Collectors.toList()); |
| | | List<CodeClassifyTemplateAttrVO> seniorQueryAttrVOs = null; |
| | | if (Func.isNotEmpty(templateVO.getAttributes())) { |
| | | //查询属性 |
| | | List<CodeClassifyTemplateAttrVO> queryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getQueryAttrFlag())).collect(Collectors.toList()); |
| | | if (!CollectionUtils.isEmpty(queryAttrVOs)) { |
| | | List<UITableFieldVO> queryFieldVOs = new ArrayList<>(); |
| | | queryAttrVOs.stream().forEach(attrVO -> { |
| | | String attrId = attrVO.getId().toLowerCase(Locale.ROOT); |
| | | attrId = comboxOrReferFieldMap.getOrDefault(attrId, attrVO.getId()).toLowerCase(Locale.ROOT); |
| | | if (fieldVOMap.containsKey(attrId)) { |
| | | queryFieldVOs.add(fieldVOMap.get(attrId)); |
| | | } |
| | | }); |
| | | tableDefineVO.setQueryColumns(queryFieldVOs); |
| | | } |
| | | //高级属性 |
| | | seniorQueryAttrVOs = templateVO.getAttributes().stream().filter(s -> BooleanEnum.TRUE.getValue().equalsIgnoreCase(s.getSeniorQueryAttrFlag())).collect(Collectors.toList()); |
| | | } |
| | | if (!CollectionUtils.isEmpty(seniorQueryAttrVOs)) { |
| | | List<UITableFieldVO> queryFieldVOs = new ArrayList<>(); |
| | | seniorQueryAttrVOs.stream().forEach(attrVO -> { |
| | |
| | | } |
| | | return uiInfoVO; |
| | | } |
| | | @Override |
| | | public MdmUIInfoVO getFlowUIInfoByClassifyOid(String codeClassifyOid, String functionId,String templateId,String taskId,String modelKey){ |
| | | // MdmUIInfoVO uiInfoVO = getTableDefineByClassifyOid_v2(codeClassifyOid,templateId,taskId,modelKey); |
| | | MdmUIInfoVO uiInfoVO = getTableDefineByTemplateVO(getUsedTemplateByClassifyOid(codeClassifyOid)); |
| | | R<List<ProcessStageAttrVO>> r = imdmiFlowAttrClient.ssslist(templateId,modelKey,taskId); |
| | | List<ProcessStageAttrVO> stageAttrVOS = r.getData(); |
| | | Set<String> attrSet = new HashSet<>(); |
| | | stageAttrVOS.stream().forEach(attr->{ |
| | | attrSet.add(attr.getAttrId()); |
| | | }); |
| | | |
| | | try { |
| | | |
| | | UITableDefineVO tableDefineVO = uiInfoVO.getTableDefineVO(); |
| | | List<List<UITableFieldVO>> tableFieldVOs = tableDefineVO.getCols(); |
| | | List<UITableFieldVO> uiTableFieldVOS = tableFieldVOs.get(0); |
| | | uiTableFieldVOS.stream().forEach(ui->{ |
| | | // if(!attrSet.contains(ui.getField())){ |
| | | // ui.setEdit(null); |
| | | // ui.setEditConfig(null); |
| | | // } |
| | | }); |
| | | }catch (Exception e){ |
| | | throw new ServiceException("模板没有定义属性,读取表头失败!"); |
| | | } |
| | | return uiInfoVO; |
| | | } |
| | | |
| | | /** |
| | | * 使用分类主键获取工具栏中的按钮信息 |
| | |
| | | |
| | | String lcstatusSql = ""; |
| | | if (StringUtils.isNotBlank(baseQueryObject.getConditionMap().get("lcstatus"))) { |
| | | lcstatusSql = "lcstatus =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lcstatus")); |
| | | lcstatusSql = "and lcstatus =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lcstatus")); |
| | | } |
| | | // String where = ""; |
| | | |
| | |
| | | |
| | | List<Map> maps = commonsMapper.selectBySql("select * from ( select rownum rn, t.* from (select * from " + listR.getData().get(0).getTableName() + SPACE |
| | | + (StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId()) ? (" where lastr = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastr").toString()) |
| | | + " and lastv =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 and " |
| | | + " and lastv =" + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 " |
| | | + lcstatusSql + namesql + codesql + ") t where rownum <=" + num1 + ") where rn >=" + num2 |
| | | ); |
| | | List<BaseModel> baseModels = new ArrayList<>(); |
| | |
| | | } |
| | | int total = commonsMapper.queryCountBySql("select count(*) from " + listR.getData().get(0).getTableName() + SPACE |
| | | + (StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId()) ? (" where lastr = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastr").toString()) |
| | | + "and lastv = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 and " |
| | | + "and lastv = " + VciBaseUtil.toInSql(baseQueryObject.getConditionMap().get("lastv").toString())) + " and" : "where") + SPACE + "1=1 " |
| | | + lcstatusSql + namesql + codesql |
| | | ); |
| | | IPage<BaseModel> objectDataGrid = new Page<>(); |