| | |
| | | package com.vci.ubcs.code.service.impl; |
| | | |
| | | import cn.hutool.db.sql.Query; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.vci.ubcs.code.applyjtcodeservice.entity.DockingPreMetaAttr; |
| | | import com.vci.ubcs.code.applyjtcodeservice.vo.BaseModelVO; |
| | | import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO; |
| | | import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO; |
| | |
| | | */ |
| | | @Value("${bzApply.seriesFlow:seriesFlow}") |
| | | private String seriesFlow; |
| | | |
| | | /*** |
| | | * 是否变更系列 |
| | | */ |
| | |
| | | */ |
| | | @Resource |
| | | private MdmProductCodeService productCodeService; |
| | | |
| | | /** |
| | | * 近义词规则查询服务 |
| | | */ |
| | | @Autowired ICodeSynonymService codeSynonymService; |
| | | |
| | | /** |
| | | * 可输可选的服务 |
| | |
| | | */ |
| | | @Autowired |
| | | private ICodeRuleService ruleService; |
| | | |
| | | /** |
| | | * 编码规则的服务 |
| | | * 码值的服务 |
| | | */ |
| | | @Autowired |
| | | private ICodeAllCodeService codeAllCodeService; |
| | |
| | | public static final String BTM_NAME = "btm:name"; |
| | | |
| | | /** |
| | | * 配置的用来申请集团码的用户 |
| | | */ |
| | | @Value("${docking.apply.personUserAccount:28201728}") |
| | | public String applyCodeUserAccount; |
| | | |
| | | /** |
| | | * 密级的字段 |
| | | */ |
| | | public static final String SECRET_FILED = "secretgrade"; |
| | |
| | | */ |
| | | @Autowired |
| | | private SaveLogUtil saveLogUtil; |
| | | |
| | | |
| | | /** |
| | | * 使用分类的主键获取可以使用的模板对象 |
| | |
| | | throw new VciBaseException("未查询到相关数据。"); |
| | | } |
| | | //还需要修改allCode的生命周期 |
| | | QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>(); |
| | | allCodeWrapper.eq("createcodebtm", baseModelDTO.getBtmname()); |
| | | allCodeWrapper.in("createcodeoid", oids); |
| | | List<CodeAllCode> codeCbos = codeAllCodeService.selectByWrapper(allCodeWrapper);// 回收需要业务数据删除 |
| | | LambdaQueryWrapper<CodeAllCode> allCodeWrapper = Wrappers.<CodeAllCode>query().lambda(); |
| | | allCodeWrapper.eq(CodeAllCode::getCreateCodeBtm, baseModelDTO.getBtmname()); |
| | | allCodeWrapper.in(CodeAllCode::getCreateCodeOid, oids); |
| | | |
| | | List<CodeAllCode> codeCbos = codeAllCodeService.selectByWrapper(allCodeWrapper); |
| | | if(codeCbos.size() != baseModels.size()){ |
| | | throw new ServiceException("当前回收操作中查询出的业务数据中,存在多条码值数据对应关系,请联系开发人员对数据进行排查处理!!"); |
| | | } |
| | | //转为map后续取的时候方便 |
| | | Map<String, BaseModel> baseModelMap = baseModels.stream().collect(Collectors.toMap(BaseModel::getId, baseModel -> baseModel)); |
| | | |
| | | // 回收需要业务数据删除 |
| | | if (CodeDefaultLC.TASK_BACK.getValue().equals(baseModelDTO.getLcStatus())) { |
| | | R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(baseModelDTO.getBtmname())); |
| | | if (!listR.isSuccess() || listR.getData().size() == 0) { |
| | |
| | | } |
| | | R r = updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels); |
| | | if (!r.isSuccess()) { |
| | | throw new VciBaseException("更新数据出错,重试!" + r.getMsg()); |
| | | throw new VciBaseException("更新数据出错,请重试!" + r.getMsg()); |
| | | } |
| | | } |
| | | // 刚好顺序是一致的,所以直接按照codeallcode的顺序来拿业务数据 |
| | | int i = -1; |
| | | BaseModel baseModel = null; |
| | | for (CodeAllCode codeCbo : codeCbos) { |
| | | codeCbo.setLcStatus(baseModelDTO.getLcStatus()); |
| | | // 如果是回收,就需要将业务数据存储到码值表中 |
| | | baseModel = baseModelMap.get(codeCbo.getId()); |
| | | if (baseModelDTO.getLcStatus().equals(FrameWorkDefaultValueConstant.FRAMEWORK_RELEASE_TAKEBACK)) { |
| | | codeCbo.setBusinessData(JSON.toJSONString(baseModels.get(++i))); |
| | | codeCbo.setBusinessData(JSON.toJSONString(baseModel)); |
| | | } |
| | | } |
| | | codeAllCodeService.updateBatchById(codeCbos); |
| | |
| | | return addSaveCode(orderDTO, true); |
| | | } |
| | | |
| | | /*** |
| | | /** |
| | | * 集成可变码段申请接口 |
| | | * @param orderDTO 申请的信息,需要包含属性的内容和码段相关的内容 |
| | | * @return |
| | |
| | | //注意的是keyRuleVO可能为空,表示不使用规则控制 |
| | | //获取所有的关键属性 |
| | | Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); |
| | | // TODO:2024-02-01 先获取配置了近义词查询规则的属性,不同于关键属性,设置了近义词查询规则的属性可能是多条不同的近义词查询规则 |
| | | Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); |
| | | // 获取是否有配置近义词查询规则属性 |
| | | Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>(); |
| | | if(!sysonymAttrMaps.isEmpty()){ |
| | | // 查询近义词规则,存储方式key:属性id,value近义词查询规则列表 |
| | | codeSynonymMaps = codeSynonymService.getCodeSynonymByOids(sysonymAttrMaps); |
| | | } |
| | | Map<String, String> conditionMap = new HashMap<>(); |
| | | boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); |
| | | //全部去空的优先级大于去空 |
| | | boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); |
| | | boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag()); |
| | | boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag()); |
| | | Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps; |
| | | ketAttrMap.forEach((attrId, attrVO) -> { |
| | | String value = getValueFromOrderDTO(orderDTO, attrId); |
| | | if (value == null) { |
| | | value = ""; |
| | | } |
| | | wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); |
| | | wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); |
| | | }); |
| | | |
| | | //没有限制分类,但是一个模板只可能在一个业务类型里面,所以直接查询这个业务类型即可 |
| | | if (!CollectionUtils.isEmpty(conditionMap)) { |
| | | // TODO: 同一个库判重不需要区分分类oid |
| | | // conditionMap.put("CODETEMPLATEOID","'" + orderDTO.getTemplateOid() + "'"); |
| | | // final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "}; |
| | | // final String[] sql = {"select count(*) from " + VciBaseUtil.getTableName(classifyFullInfo.getTopClassifyVO().getBtmtypeid()) + " t where 1 = 1 "}; |
| | | R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(classifyFullInfo.getTopClassifyVO().getBtmTypeId())); |
| | | // String referTable = VciBaseUtil.getTableName(referVO.getReferType()); |
| | | // String referTable = VciBaseUtil.getTableName(referVO.getReferType()); |
| | | if (!listR.isSuccess() || listR.getData().size() == 0) { |
| | | throw new VciBaseException("传入业务类型未查询到相应表单,请检查!"); |
| | | } |
| | |
| | | if (Func.isNotEmpty(isParticipateCheckOids)) { |
| | | sql[0] += " and codeclsfid not in(" + isParticipateCheckOids + ")"; |
| | | } |
| | | // if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) { |
| | | // if (boService.queryCountBySql(sql[0], new HashMap<>()) > 0) { |
| | | List<String> repeatData = commonsMapper.selectList(sql[0]); |
| | | if (!repeatData.isEmpty()) { |
| | | String ruleInfoMsg = keyRuleVO == null ? "" : "查询规则:去除空格--{0},忽略大小写--{1},忽略全半角--{2},忽略全部空格--{3}"; |
| | |
| | | //注意的是keyRuleVO可能为空,表示不使用规则控制 |
| | | //获取所有的关键属性 |
| | | Map<String, CodeClassifyTemplateAttrVO> ketAttrMap = templateVO.getAttributes().stream().filter(s -> VciBaseUtil.getBoolean(s.getKeyAttrFlag())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); |
| | | // TODO:2024-02-01 先获取配置了近义词查询规则的属性,不同于关键属性,设置了近义词查询规则的属性可能是多条不同的近义词查询规则 |
| | | Map<String, CodeClassifyTemplateAttrVO> sysonymAttrMaps = templateVO.getAttributes().stream().filter(item -> Func.isNotBlank(item.getSysonymRuleOids())).collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); |
| | | // 获取是否有配置近义词查询规则属性 |
| | | Map<String, List<CodeSynonym>> codeSynonymMaps = new HashMap<>(); |
| | | if(!sysonymAttrMaps.isEmpty()){ |
| | | // 查询近义词规则,存储方式key:属性id,value近义词查询规则列表 |
| | | codeSynonymMaps = codeSynonymService.getCodeSynonymByOids(sysonymAttrMaps); |
| | | } |
| | | Map<String, String> conditionMap = new HashMap<>(); |
| | | boolean trimAll = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnoreallspaceflag()); |
| | | //全部去空的优先级大于去空 |
| | | boolean trim = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorespaceflag()); |
| | | boolean ignoreCase = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorecaseflag()); |
| | | boolean ignoreWidth = keyRuleVO == null ? false : VciBaseUtil.getBoolean(keyRuleVO.getIgnorewidthflag()); |
| | | Map<String, List<CodeSynonym>> finalCodeSynonymMaps = codeSynonymMaps; |
| | | ketAttrMap.forEach((attrId, attrVO) -> { |
| | | String value = getValueFromOrderDTO(orderDTO, attrId); |
| | | if (value == null) { |
| | | value = ""; |
| | | } |
| | | wrapperKeyAttrConditionMap(value, keyRuleVO, attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); |
| | | wrapperKeyAttrConditionMap(value, keyRuleVO, finalCodeSynonymMaps.get(attrId), attrId, trim, ignoreCase, ignoreWidth, trimAll, conditionMap); |
| | | }); |
| | | |
| | | //没有限制分类,但是一个模板只可能在一个业务类型里面,所以直接查询这个业务类型即可 |
| | |
| | | } |
| | | //是否系列 |
| | | if (!codeBZApplyDTO.isSeries()) { |
| | | boolean isSeriesValue = codeBZApplyDTO.getData().get(isSeries).equals("true") ? true : false; |
| | | boolean isSeriesValue = Func.toBoolean(codeBZApplyDTO.getData().get(isSeries)); |
| | | codeBZApplyDTO.setSeries(isSeriesValue); |
| | | } |
| | | //原标准号 |
| | |
| | | } |
| | | //是否变更系列 |
| | | if (!codeBZApplyDTO.isEditSeries()) { |
| | | boolean isEditSeriesValue = codeBZApplyDTO.getData().get(isEditSeries).equals("true") ? true : false; |
| | | boolean isEditSeriesValue = Func.toBoolean(codeBZApplyDTO.getData().get(isEditSeries)); |
| | | codeBZApplyDTO.setEditSeries(isEditSeriesValue); |
| | | } |
| | | VciBaseUtil.alertNotNull(codeBZApplyDTO.getOperationType(), "操作类型", |
| | |
| | | } else if (codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_DISABLE.getValue())) {//作废 |
| | | code = amendmentDataBZ(codeBZApplyDTO, authUser); |
| | | createChangeOder(code, codeBZApplyDTO, authUser); |
| | | } else if (codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_AMENDMENT.getValue())) {//备查 |
| | | } else if (codeBZApplyDTO.getOperationType().equals(CodeBZOperationTypeEnum.CODE_BZ_FOR_REFERENCE.getValue())) {//备查 |
| | | code = amendmentDataBZ(codeBZApplyDTO, authUser); |
| | | createChangeOder(code, codeBZApplyDTO, authUser); |
| | | } |
| | |
| | | * @param conditionMap 查询条件 |
| | | */ |
| | | @Override |
| | | public void wrapperKeyAttrConditionMap(String value, CodeKeyAttrRepeatVO keyRuleVO, String attrId, |
| | | public void wrapperKeyAttrConditionMap(String value, CodeKeyAttrRepeatVO keyRuleVO, |
| | | List<CodeSynonym> codeSynonymMaps, String attrId, |
| | | boolean trim, boolean ignoreCase, boolean ignoreWidth, |
| | | boolean trimAll, Map<String, String> conditionMap) { |
| | | boolean ignoreSpace = trim || trimAll; |
| | | if (StringUtils.isBlank(value)) { |
| | | //为空的时候,不能用QueryOperation.ISNULL,平台不知道啥时候不处理这种了 |
| | | //值为空的时候,不能用QueryOperation.ISNULL,平台不知道啥时候不处理这种了 |
| | | conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL); |
| | | } else { |
| | | //近义词查询规则valu值转换 |
| | | value = this.getValueToSynony(codeSynonymMaps, value); |
| | | |
| | | if (keyRuleVO != null) { |
| | | String queryKey = ""; |
| | | String queryValue = ""; |
| | |
| | | conditionMap.put(queryKey, queryValue); |
| | | } else { |
| | | if (StringUtils.isNotBlank(value)) { |
| | | //为空的时候不代表不校验,只是不去除相关的信息 |
| | | //关键属性查重规则为空的时候不代表不校验,只是不去除相关的信息 |
| | | conditionMap.put("nvl(" + "t." + attrId + ",'/')", "'" + SpecialCharacterConverter.escapeSpecialCharacters(value) + "'"); |
| | | } else { |
| | | conditionMap.put("t." + attrId, QueryOptionConstant.ISNULL); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 近义词查询规则转换 |
| | | * @param codeSynonymMaps |
| | | * @param value |
| | | * @return |
| | | */ |
| | | public String getValueToSynony(/*近义词查询规则*/List<CodeSynonym> codeSynonymMaps,String value){ |
| | | // 获取并判断是否配置了近义词查询规则 |
| | | // TODO:近义词替换成源值(源值是正确的值,近义词是相当于输错笔误的字符) |
| | | if(Func.isNotEmpty(codeSynonymMaps)){ |
| | | for (int i = 0; i < codeSynonymMaps.size(); i++) { |
| | | value = value.replace(codeSynonymMaps.get(i).getSynonymValue(),codeSynonymMaps.get(i).getSourceValue()); |
| | | } |
| | | } |
| | | return value; |
| | | } |
| | | |
| | | /** |
| | |
| | | wrapperResemble(templateVO, uiInfoVO); |
| | | return uiInfoVO; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 模板属性转换为表单定义的信息 |
| | |
| | | @Override |
| | | public DataGrid<Map<String, String>> queryGrid(String btmType, CodeClassifyTemplateVO templateVO, Map<String, String> conditionMap, PageHelper pageHelper) { |
| | | CodeTemplateAttrSqlBO sqlBO = getSqlByTemplateVO(btmType, templateVO, conditionMap, pageHelper); |
| | | // List<Map> maps = boService.queryByOnlySqlForMap(sqlBO.getSqlHasPage()); |
| | | // List<Map> maps = boService.queryByOnlySqlForMap(sqlBO.getSqlHasPage()); |
| | | List<Map<String, String>> maps = null; |
| | | try { |
| | | maps = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlHasPage()); |
| | |
| | | for (String s : map.keySet()) { |
| | | data.put(s.toLowerCase(Locale.ROOT), map.get(s) == null ? null : String.valueOf(map.get(s))); |
| | | } |
| | | // map.forEach((key, value) -> { |
| | | // data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value)); |
| | | // }); |
| | | // map.forEach((key, value) -> { |
| | | // data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value)); |
| | | // }); |
| | | dataList.add(data); |
| | | }); |
| | | wrapperData(dataList, templateVO, sqlBO.getSelectFieldList(), false); |
| | | // maps.stream().forEach(map -> { |
| | | // Map<String, String> data = new HashMap<>(); |
| | | //// map.forEach((key, value) -> { |
| | | //// data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value)); |
| | | //// }); |
| | | // for (String s : map.keySet()) { |
| | | // data.put(((String) s).toLowerCase(Locale.ROOT), String.valueOf(map.get(s))); |
| | | // } |
| | | // dataList.add(data); |
| | | // }); |
| | | // maps.stream().forEach(map -> { |
| | | // Map<String, String> data = new HashMap<>(); |
| | | // map.forEach((key, value) -> { |
| | | // data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value)); |
| | | // }); |
| | | // for (String s : map.keySet()) { |
| | | // data.put(((String) s).toLowerCase(Locale.ROOT), String.valueOf(map.get(s))); |
| | | // } |
| | | // dataList.add(data); |
| | | // }); |
| | | } |
| | | // dataGrid.setData(dataList); |
| | | // if (!CollectionUtils.isEmpty(maps)) { |
| | | // wrapperData(maps, templateVO, sqlBO.getSelectFieldList(), false); |
| | | // maps.stream().forEach(map -> { |
| | | // Map<String, String> data = new HashMap<>(); |
| | | //// map.forEach((key, value) -> { |
| | | //// data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value)); |
| | | //// }); |
| | | // for (String s : map.keySet()) { |
| | | // data.put(((String) s).toLowerCase(Locale.ROOT), String.valueOf(map.get(s))); |
| | | // } |
| | | // dataList.add(data); |
| | | // }); |
| | | // dataGrid.setData(dataList); |
| | | // if (!CollectionUtils.isEmpty(maps)) { |
| | | // wrapperData(maps, templateVO, sqlBO.getSelectFieldList(), false); |
| | | // maps.stream().forEach(map -> { |
| | | // Map<String, String> data = new HashMap<>(); |
| | | //// map.forEach((key, value) -> { |
| | | //// data.put(((String) key).toLowerCase(Locale.ROOT), String.valueOf(value)); |
| | | //// }); |
| | | // for (String s : map.keySet()) { |
| | | // data.put(((String) s).toLowerCase(Locale.ROOT), String.valueOf(map.get(s))); |
| | | // } |
| | | // dataList.add(data); |
| | | // }); |
| | | dataGrid.setData(dataList); |
| | | dataGrid.setTotal(Long.parseLong(commonsMapper.selectBySql(sqlBO.getSqlCount()).get(0).values().toArray()[0].toString())); |
| | | // } |
| | | // } |
| | | return dataGrid; |
| | | } |
| | | |
| | |
| | | userVOMap.put(String.valueOf(data.getId()), data); |
| | | } |
| | | } |
| | | // Map<String, SmUserVO> userVOMap = Optional.ofNullable(userQueryService.listUserByUserIds(userIds)).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); |
| | | // Map<String, SmUserVO> userVOMap = Optional.ofNullable(userQueryService.listUserByUserIds(userIds)).orElseGet(() -> new ArrayList<>()).stream().collect(Collectors.toMap(s -> s.getId().toLowerCase(Locale.ROOT), t -> t)); |
| | | dataMap.stream().forEach(data -> { |
| | | String creator = data.getOrDefault("creator", null); |
| | | if (StringUtils.isNotBlank(creator) && userVOMap.containsKey(creator.toLowerCase(Locale.ROOT))) { |
| | |
| | | }); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 处理时间格式 |
| | |
| | | }); |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 处理枚举的内容,如果不在枚举中,会返回原本的值 |
| | |
| | | if (referFieldMap.containsKey(field)) { |
| | | return VciBaseUtil.toInSql(referFieldMap.get(field), value); //referFieldMap.get(field) + SPACE + "= '" + value + "'" + SPACE; |
| | | } else { |
| | | return (field.contains(".") ? "" : "t.") + field + SPACE + "= " + getStringValueInWhere(field, value, attrVOMap) + "" + SPACE; |
| | | //TODO:暂时没考虑IN>1000条的问题 |
| | | //return (field.contains(".") ? "" : "t.") + field + SPACE + "= " + getStringValueInWhere(field, value, attrVOMap) + "" + SPACE; |
| | | return (field.contains(".") ? "" : "t.") + field + SPACE + "IN (" + getStringValueInWhere(field, "IN//"+value, attrVOMap) + ")" + SPACE; |
| | | } |
| | | } else if (key.endsWith("_notin")) { |
| | | String field = UBCSSqlKeyword.getColumn(key, "_in"); |
| | | if (referFieldMap.containsKey(field)) { |
| | | return VciBaseUtil.toInSql(referFieldMap.get(field), value); //referFieldMap.get(field) + SPACE + "= '" + value + "'" + SPACE; |
| | | } else { |
| | | //return (field.contains(".") ? "" : "t.") + field + SPACE + "not in (" + getStringValueInWhere(field, "IN//"+value, attrVOMap) + ")" + SPACE; |
| | | return (field.contains(".") ? "" : "t.") + field + SPACE + "IN (" + getStringValueInWhere(field, "IN//"+value, attrVOMap) + ")" + SPACE; |
| | | } |
| | | |
| | | } else { |
| | | // if (referFieldMap.containsKey(key)) { |
| | | // //说明是参照的,我们参照的查询都认为是字符串,如果是时间格式的查询肯定有问题, |
| | |
| | | || VciFieldTypeEnum.VTInteger.equals(fieldTypeEnum)) { |
| | | return value; |
| | | } else { |
| | | if(value.contains("IN//")){ |
| | | return MybatisParameterUtil.getInClause(Func.toStrList(value.replace("IN//",""))); |
| | | } |
| | | return "'" + value + "'"; |
| | | } |
| | | } else { |
| | | if ((value.startsWith("(") && value.endsWith(")")) || (value.startsWith("'") && value.endsWith("'"))) { |
| | | return value; |
| | | }else if(value.contains("IN//")){ |
| | | //暂时不考虑>1000的情况,因为搜索一般也不会出现搜索1000条的情况 |
| | | //return MybatisParameterUtil.convertToOrConditions(field, Func.toStrList(value.replace("IN//",""))); |
| | | return MybatisParameterUtil.getInClause(Func.toStrList(value.replace("IN//",""))); |
| | | }else{ |
| | | return "'" + value + "'"; |
| | | } |
| | | return "'" + value + "'"; |
| | | } |
| | | } |
| | | |
| | |
| | | conditionMap = new HashMap<>(); |
| | | } |
| | | pageHelper.addDefaultDesc("createTime"); |
| | | // pageHelper.addDefaultDesc("id"); |
| | | // pageHelper.addDefaultDesc("id"); |
| | | if (!classifyService.checkHasChild(codeClassifyOid)) { |
| | | conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, codeClassifyOid); |
| | | } else { |
| | |
| | | } |
| | | }); |
| | | return mapDataGrid; |
| | | // List<String> selectFieldList = templateVO.getAttributes().stream().map(CodeClassifyTemplateAttrVO::getId).collect(Collectors.toList()); |
| | | // //参照让平台直接查询就行 |
| | | // List<String> finalSelectFieldList = selectFieldList; |
| | | // List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter( |
| | | // s -> StringUtils.isNotBlank(s.getReferbtmid()) |
| | | // && |
| | | // (finalSelectFieldList.size() ==0 || finalSelectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))) |
| | | // ).collect(Collectors.toList()); |
| | | // if(!CollectionUtils.isEmpty(referAttrVOs)){ |
| | | // for (int i = 0; i < referAttrVOs.size(); i++) { |
| | | // selectFieldList.add(referAttrVOs.get(i).getId() + ".name"); |
| | | // } |
| | | // } |
| | | // //我们使用和业务类型的来查询 |
| | | // DataGrid<Map<String,String>> dataGrid = boService.queryGridByBo(btmTypeId, conditionMap, pageHelper, selectFieldList); |
| | | // //我们需要使用模板来转换 |
| | | // if(!CollectionUtils.isEmpty(dataGrid.getData())){ |
| | | // wrapperData(dataGrid.getData(),templateVO,finalSelectFieldList,false); |
| | | // } |
| | | // return dataGrid; |
| | | // List<String> selectFieldList = templateVO.getAttributes().stream().map(CodeClassifyTemplateAttrVO::getId).collect(Collectors.toList()); |
| | | // //参照让平台直接查询就行 |
| | | // List<String> finalSelectFieldList = selectFieldList; |
| | | // List<CodeClassifyTemplateAttrVO> referAttrVOs = templateVO.getAttributes().stream().filter( |
| | | // s -> StringUtils.isNotBlank(s.getReferbtmid()) |
| | | // && |
| | | // (finalSelectFieldList.size() ==0 || finalSelectFieldList.contains(s.getId().toLowerCase(Locale.ROOT))) |
| | | // ).collect(Collectors.toList()); |
| | | // if(!CollectionUtils.isEmpty(referAttrVOs)){ |
| | | // for (int i = 0; i < referAttrVOs.size(); i++) { |
| | | // selectFieldList.add(referAttrVOs.get(i).getId() + ".name"); |
| | | // } |
| | | // } |
| | | // //我们使用和业务类型的来查询 |
| | | // DataGrid<Map<String,String>> dataGrid = boService.queryGridByBo(btmTypeId, conditionMap, pageHelper, selectFieldList); |
| | | // //我们需要使用模板来转换 |
| | | // if(!CollectionUtils.isEmpty(dataGrid.getData())){ |
| | | // wrapperData(dataGrid.getData(),templateVO,finalSelectFieldList,false); |
| | | // } |
| | | // return dataGrid; |
| | | } |
| | | |
| | | /** |
| | |
| | | cbos.add(data); |
| | | }); |
| | | |
| | | // List<ClientBusinessObject> cbos = boService.queryByOnlySql(sqlBO.getSqlUnPage()); |
| | | // List<ClientBusinessObject> cbos = boService.queryByOnlySql(sqlBO.getSqlUnPage()); |
| | | if (CollectionUtils.isEmpty(cbos)) { |
| | | throw new VciBaseException("数据在系统中不存在,是否因为修改过业务类型?"); |
| | | return R.fail("数据在系统中不存在,是否因为修改过业务类型?"); |
| | | } |
| | | // Map<String, String> data = new HashMap<>(); |
| | | // Map<String, String> data = new HashMap<>(); |
| | | Map<String, String> cbo = cbos.get(0); |
| | | // WebUtil.copyValueToMapFromCbos(cbo, data); |
| | | // WebUtil.copyValueToMapFromCbos(cbo, data); |
| | | List<Map<String, String>> dataList = new ArrayList<>(); |
| | | dataList.add(cbo); |
| | | wrapperData(dataList, templateVO, sqlBO.getSelectFieldList(), true); |
| | | R<List<Map<String, String>>> result = R.data(Collections.singletonList(cbo)); |
| | | if(templateVO.getAttributes().isEmpty()){ |
| | | throw new ServiceException(String.format("主键为:{}的模板下,模板属性配置为空!",templateVO.getOid())); |
| | | return R.fail(String.format("主键为:%s的模板下,模板属性配置为空!",templateVO.getOid())); |
| | | } |
| | | //处理返回数据与模板数据配置的字段不一样问题 |
| | | templateVO.getAttributes().stream().forEach(e -> { |
| | |
| | | }); |
| | | |
| | | //我们要看是否不是升版的,升版的话,需要对比不相等的属性 |
| | | /* String copy = cbo.get("copyfromversion"); |
| | | // if (StringUtils.isBlank(copy)) { |
| | | // copy = cbo.getAttributeValue("copyfromversion"); |
| | | // } |
| | | if (StringUtils.isNotBlank(copy)) { |
| | | //说明有变更的内容 |
| | | /* String copy = cbo.get("copyfromversion"); |
| | | // if (StringUtils.isBlank(copy)) { |
| | | // copy = cbo.getAttributeValue("copyfromversion"); |
| | | // } |
| | | if (StringUtils.isNotBlank(copy)) { |
| | | //说明有变更的内容 |
| | | |
| | | CodeTemplateAttrSqlBO oldSqlBO = getSqlByTemplateVO(btmId, templateVO, WebUtil.getOidQuery(copy), new PageHelper(-1)); |
| | | //我们使用和业务类型的来查询 |
| | | // List<Map> cbos = commonsMapper.selectBySql(sqlBO.getSqlUnPage()); |
| | | List<Map> oldCbos = commonsMapper.selectBySql(oldSqlBO.getSqlUnPage()); |
| | | if (!CollectionUtils.isEmpty(oldCbos)) { |
| | | // Map<String, String> newData = new HashMap<>(); |
| | | // WebUtil.copyValueToMapFromCbos(cbo, newData); |
| | | Map<String, String> oldData = new HashMap<>(); |
| | | oldData = oldCbos.get(0); |
| | | Map<String, String> difFieldMap = new HashMap<>(); |
| | | Map<String, String> finalOldData = oldData; |
| | | cbo.forEach((key, value) -> { |
| | | // 这儿oldmap中的全是大写,而cbo中的全是小写所以会拿不到只,这儿直接处理成小写拿不到就用大写拿 |
| | | String oldValue = String.valueOf(finalOldData.getOrDefault(key.toUpperCase(Locale.ROOT), finalOldData.getOrDefault(key, ""))); |
| | | if (value == null || value == "null") { |
| | | value = ""; |
| | | } |
| | | if (oldValue == null || oldValue == "null") { |
| | | oldValue = ""; |
| | | } |
| | | if (!value.equalsIgnoreCase(oldValue)) { |
| | | difFieldMap.put(key, oldValue); |
| | | } |
| | | }); |
| | | List<Map<String, String>> difFieldList = new ArrayList<>(); |
| | | difFieldList.add(difFieldMap); |
| | | result.setData(difFieldList); |
| | | } |
| | | }*/ |
| | | CodeTemplateAttrSqlBO oldSqlBO = getSqlByTemplateVO(btmId, templateVO, WebUtil.getOidQuery(copy), new PageHelper(-1)); |
| | | //我们使用和业务类型的来查询 |
| | | // List<Map> cbos = commonsMapper.selectBySql(sqlBO.getSqlUnPage()); |
| | | List<Map> oldCbos = commonsMapper.selectBySql(oldSqlBO.getSqlUnPage()); |
| | | if (!CollectionUtils.isEmpty(oldCbos)) { |
| | | // Map<String, String> newData = new HashMap<>(); |
| | | // WebUtil.copyValueToMapFromCbos(cbo, newData); |
| | | Map<String, String> oldData = new HashMap<>(); |
| | | oldData = oldCbos.get(0); |
| | | Map<String, String> difFieldMap = new HashMap<>(); |
| | | Map<String, String> finalOldData = oldData; |
| | | cbo.forEach((key, value) -> { |
| | | // 这儿oldmap中的全是大写,而cbo中的全是小写所以会拿不到只,这儿直接处理成小写拿不到就用大写拿 |
| | | String oldValue = String.valueOf(finalOldData.getOrDefault(key.toUpperCase(Locale.ROOT), finalOldData.getOrDefault(key, ""))); |
| | | if (value == null || value == "null") { |
| | | value = ""; |
| | | } |
| | | if (oldValue == null || oldValue == "null") { |
| | | oldValue = ""; |
| | | } |
| | | if (!value.equalsIgnoreCase(oldValue)) { |
| | | difFieldMap.put(key, oldValue); |
| | | } |
| | | }); |
| | | List<Map<String, String>> difFieldList = new ArrayList<>(); |
| | | difFieldList.add(difFieldMap); |
| | | result.setData(difFieldList); |
| | | } |
| | | }*/ |
| | | return result; |
| | | } |
| | | |
| | |
| | | uiInfoVO.setLeaf(classifyService.countChildrenByClassifyOid(codeClassifyOid) == 0); |
| | | if (StringUtils.isNotBlank(functionId) && !"~".equalsIgnoreCase(functionId)) { |
| | | // TODO:2024-1-25 18:42模板上的btmtypeid有时候会存在大小写的问题,按理来说这儿直接用functionId就能满足查询菜单按钮了uiInfoVO.getTemplateVO().getBtmTypeId() |
| | | List<Menu> buttonVOS = iSysClient.getMenuButtonByType(codeClassifyOid, functionId, "data_auth").getData(); |
| | | R<List<Menu>> buttonListR = iSysClient.getMenuButtonByType(codeClassifyOid, functionId, "data_auth"); |
| | | if(!buttonListR.isSuccess()){ |
| | | throw new ServiceException("获取按钮授权列表失败,原因:"+buttonListR.getMsg()); |
| | | } |
| | | List<Menu> buttonVOS = buttonListR.getData(); |
| | | |
| | | List<SmOperationVO> operationVOS = new ArrayList<>(); |
| | | if (!CollectionUtils.isEmpty(buttonVOS)) { |
| | |
| | | if (cboMap.containsKey(oid)) { |
| | | CodeAllCode codeAllCode = cboMap.get(oid); |
| | | codeAllCode.setId(baseModel.getId()); |
| | | // codeAllCode.setLastModifier(AuthUtil.getUser().getUserName()); |
| | | codeAllCode.setLastModifier(AuthUtil.getUser().getAccount()); |
| | | // 主数据推送形式,是拿不到用户信息的 |
| | | codeAllCode.setLastModifier(Func.isBlank(AuthUtil.getUserAccount()) ? applyCodeUserAccount:AuthUtil.getUserAccount()); |
| | | codeAllCode.setLastModifyTime(new Date()); |
| | | codeAllCode.setLcStatus(baseModel.getLcStatus()); |
| | | newCodeAllCodeList.add(codeAllCode); |
| | |
| | | */ |
| | | Map<String, Object> nextRevision = commonsMapper.getCurrentRevision(listR.getData().get(0).getTableName(), fromBo.getNameOid()); |
| | | R<RevisionRuleVO> revisionRuleVOR = revisionRuleClient.selectById(listR.getData().get(0).getRevisionRuleId()); |
| | | String revisionval = nextRevision.get("REVISIONVAL").toString(); |
| | | String revisionval = ""; |
| | | try{ |
| | | revisionval = nextRevision.get("REVISIONVAL").toString(); |
| | | }catch (Exception e){ |
| | | throw new ServiceException("业务数据版次值获取出错,原因:" + e.getMessage()); |
| | | } |
| | | |
| | | // 未查询到版本规则,默认直接给大版本加一 |
| | | if (!revisionRuleVOR.isSuccess() || Func.isEmpty(revisionRuleVOR.getData())) { |
| | | revisionval = String.valueOf((Integer.parseInt(revisionval) + 1)); |