ludc
2023-08-02 744171debef6aee198be296520f0b86dc1586723
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/MdmEngineServiceImpl.java
@@ -5,24 +5,21 @@
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.vci.ubcs.code.bo.CodeClassifyFullInfoBO;
import com.vci.ubcs.code.bo.CodeTemplateAttrSqlBO;
import com.vci.ubcs.code.constant.FrameWorkDefaultValueConstant;
import com.vci.ubcs.code.constant.MdmBtmTypeConstant;
import com.vci.ubcs.code.dto.CodeDeleteBatchDTO;
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.datapush.BaseModelDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.enumpack.*;
import com.vci.ubcs.code.mapper.CodeWupinMapper;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.code.vo.CodeKeyAttrRepeatVO;
import com.vci.ubcs.code.vo.CodeReferConfigVO;
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;
@@ -41,7 +38,6 @@
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;
@@ -95,7 +91,7 @@
 * @date 2022-2-22
 */
@Service
public class MdmEngineServiceImpl extends ServiceImpl<CodeWupinMapper, CodeWupin> implements MdmEngineService {
public class MdmEngineServiceImpl implements MdmEngineService {
    /**
@@ -103,7 +99,6 @@
     */
    @Resource
    private CodeClstemplateServiceImpl templateService;
    /**
     * 生成编码的服务
@@ -186,7 +181,8 @@
    CommonsMapper commonsMapper;
    @Resource
    CodeWupinMapper codeWupinMapper;
   ICodeBasicSecService codeBasicSecService;
    /**
     * 编码规则的服务
     */
@@ -358,8 +354,6 @@
        if (baseModels.size() == 0) {
            throw new VciBaseException("未查询到相关数据。");
        }
        // 待完善
        List<BtmTypeVO> cboList = null;  // btmTypeClient.selectList(wrapper);
        //还需要修改allCode的生命周期
//      Map<String, String> conditionMap = new HashMap<>();
        QueryWrapper<CodeAllCode> allCodeWrapper = new QueryWrapper<>();
@@ -375,19 +369,19 @@
            if (!listR.isSuccess() || listR.getData().size() == 0) {
                throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
            }
            commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
         // 直接删除,不给状态
         commonsMapper.deleteByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()));
         // commonsMapper.updateByTaleAndOid(listR.getData().get(0).getTableName(), VciBaseUtil.toInSql(baseModelDTO.getOid()),CodeDefaultLC.TASK_BACK.getValue());
        } else {
            for (BaseModel baseModel : baseModels) {
                baseModel.setLcStatus(baseModelDTO.getLcStatus());
            }
            updateBatchByBaseModel(baseModelDTO.getBtmname(), baseModels);
            // lifeCycleService.transCboStatus(cboList, baseModelDTO.getLcStatus());
        }
        for (CodeAllCode codeCbo : codeCbos) {
            codeCbo.setLcStatus(baseModelDTO.getLcStatus());
        }
        codeAllCodeService.updateBatchById(codeCbos);
        // lifeCycleService.transCboStatus(codeCbos, baseModelDTO.getLcStatus());
    }
    /**
@@ -426,10 +420,13 @@
//      //设置编码需要的默认属性的内容
        copyValueToCBO(classifyFullInfo, cbo, orderDTO, templateVO, false);
      cbo.setOid(VciBaseUtil.getPk());
      cbo.setRevisionOid(VciBaseUtil.getPk());
      cbo.setNameOid(VciBaseUtil.getPk());
      cbo.setCreateTime(new Date());
      cbo.setLastModifyTime(new Date());
      cbo.setCreator(AuthUtil.getUser().getUserName());
      cbo.setLastModifier(AuthUtil.getUser().getUserName());
      cbo.setTenantId(AuthUtil.getTenantId());
//      //TODO:因为默认的属性都不拷贝,目前集团码叫name,并没有从DTO拷贝到cbo里。增加一个单独处理,以后再看要不要调整
        cbo.setName(orderDTO.getName() == null ? "" : orderDTO.getName());
//      //end -- modify by lihang @20220407
@@ -740,7 +737,7 @@
                conditionMap.put(queryKey, queryValue);
            } else {
                //为空的时候不代表不校验,只是不去除相关的信息
                conditionMap.put("t." + attrId, value);
                conditionMap.put("t." + attrId, "'" +value+ "'");
            }
        }
    }
@@ -1116,8 +1113,9 @@
            itemVO.setType("refer");
            itemVO.setShowField(itemVO.getField() + "name");
            if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
                //配置的内容
                itemVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
                // 配置的内容
                // itemVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
            itemVO.setReferConfig(referConfigToUIUiTable(attrVO.getReferConfig()));
            } else {
                UIFormReferVO formReferVO = new UIFormReferVO();
                formReferVO.setType("default");
@@ -1231,7 +1229,8 @@
            fieldVO.setShowField(fieldVO.getField());
            if (StringUtils.isNotBlank(attrVO.getReferConfig())) {
                //配置的内容
                fieldVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
                // fieldVO.setReferConfig(JSONObject.parseObject(attrVO.getReferConfig(), UIFormReferVO.class));
            fieldVO.setReferConfig(referConfigToUIUiTable(attrVO.getReferConfig()));
            } else {
                UIFormReferVO formReferVO = new UIFormReferVO();
                formReferVO.setType("default");
@@ -1264,6 +1263,51 @@
        return fieldVO;
    }
   /**
    * 将referconfig转换为JSON格式的UIFormReferVO
    * @param codeReferConfigVO
    * @return
    */
   private UIFormReferVO referConfigToUIUiTable(String codeReferConfigVO){
      CodeReferConfigVO codeReferConfig = JSONObject.parseObject(codeReferConfigVO, CodeReferConfigVO.class);
      // 拷贝为以前的老对象
      UIFormReferVO uiFormReferVO = new UIFormReferVO();
      org.springblade.core.tool.utils.BeanUtil.copy(codeReferConfig,uiFormReferVO);
      // 表格的自定义定义
      UITableCustomDefineVO uiTableConfigVO = new UITableCustomDefineVO();
      uiTableConfigVO.setPage(new UITablePageVO(codeReferConfig.getLimit(),1));
      // 列表的列的信息转换
      List<UITableFieldVO> uiTableFieldVOs = new ArrayList<>();
      // 快速查询列
      List<UITableFieldVO> queryColumns = new ArrayList<>();
      if(!CollectionUtils.isEmpty(codeReferConfig.getCodeShowFieldConfigVOS())){
         codeReferConfig.getCodeShowFieldConfigVOS().stream().forEach(showField ->{
            UITableFieldVO tableColVO = new UITableFieldVO();
            org.springblade.core.tool.utils.BeanUtil.copy(showField,tableColVO);
            tableColVO.setSortField(showField.getAttrSortField());
            uiTableFieldVOs.add(tableColVO);
            if(showField.getIsQuery().equals("true")){
               queryColumns.add(tableColVO);
            }
         });
      }
      // 显示的列
      uiTableConfigVO.setCols(uiTableFieldVOs);
      // 快速查询列
      uiTableConfigVO.setQueryColumns(queryColumns);
      //set给表格配置属性
      uiFormReferVO.setTableConfig(uiTableConfigVO);
      // 筛选条件
      HashMap<String, String> whereMap = new HashMap<>();
      if(!codeReferConfig.getCodeSrchCondConfigVOS().isEmpty()){
         codeReferConfig.getCodeSrchCondConfigVOS().stream().forEach(srch->{
            whereMap.put(srch.getFilterField()+srch.getFilterType(),srch.getFilterValue());
         });
      }
      uiFormReferVO.setWhere(whereMap);
      return uiFormReferVO;
   }
    /**
     * 相似项查询
@@ -1409,7 +1453,16 @@
    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<String, String>> maps = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
      List<Map<String, String>> maps = null;
      try {
         maps = commonsMapper.queryByOnlySqlForMap(sqlBO.getSqlHasPage());
      }catch (Exception e){
         String errorMessage = e.getMessage();
         if (errorMessage.contains("无法解析的成员访问表达式")) {
            throw new ServiceException("缺少"+errorMessage.substring(errorMessage.indexOf("[t.") + 1, errorMessage.indexOf("]"))+"字段");
         }
         throw new ServiceException(e.getMessage());
      }
        DataGrid<Map<String, String>> dataGrid = new DataGrid<>();
        List<Map<String, String>> dataList = new ArrayList<>();
@@ -2045,13 +2098,21 @@
            sql.append("t.");
        }
        if (value.startsWith(QueryOptionConstant.IN)) {
            sql.append(selectKey)
            if(value.startsWith(QueryOptionConstant.IN+"('") && value.endsWith("')")){
            sql.append(selectKey)
               .append(SPACE)
               .append("in")
               .append(SPACE)
               .append(value.replace(QueryOptionConstant.IN, ""));
         }else{
            sql.append(selectKey)
                    .append(SPACE)
                    .append("in")
                    .append(SPACE)
                    .append("(")
                    .append(value.replace(QueryOptionConstant.IN, ""))
                    .append(")");
         }
        } else if (value.startsWith(QueryOptionConstant.NOTIN)) {
            sql.append(selectKey)
                    .append(SPACE)
@@ -2340,7 +2401,7 @@
//         conditionMap.put(CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " + VciBaseUtil.getTableName(MdmBtmTypeConstant.CODE_CLASSIFY)
            conditionMap.put("t." + CODE_CLASSIFY_OID_FIELD, QueryOptionConstant.IN + "(select oid from " +
                    btmTypeClient.selectByIdCollection(Collections.singletonList(MdmBtmTypeConstant.CODE_CLASSIFY))
                    btmTypeClient.selectByIdCollection(Collections.singletonList("classify"))
                            .getData().get(0).getTableName() + " where lcstatus='" + FrameWorkDefaultValueConstant
                    .FRAMEWORK_DATA_ENABLED + "' start with parentCodeClassifyOid = '" + codeClassifyOid +
                    "' CONNECT BY PRIOR OID = parentCodeClassifyOid )");
@@ -2690,7 +2751,7 @@
        cbosB.stream().forEach(map -> {
            Map<String, String> data = new HashMap<>();
            for (Object o : map.keySet()) {
                data.put(((String) o).toLowerCase(Locale.ROOT), String.valueOf(map.get(o)));
                data.put(((String) o).toLowerCase(Locale.ROOT), map.get(o)==null?"":String.valueOf(map.get(o)));
            }
            cbos.add(data);
        });
@@ -3279,7 +3340,7 @@
         throw new VciBaseException("传入业务类型未查询到相应字段信息,请检查!");
      }
      Set<String> existFild = allAttributeByBtmId.getData().getAttributes().stream().map(btmTypeAttributeVO -> {
         return btmTypeAttributeVO.getId();
         return btmTypeAttributeVO.getId().toLowerCase();
      }).collect(Collectors.toSet());
      //将bean转为map,mybatis统一处理
        List<Map<String, String>> maps = new ArrayList<>();
@@ -3336,13 +3397,17 @@
                            setter.invoke(obj, ((BigDecimal) map.get(property.getName().toUpperCase())).intValue());
                            map.remove(property.getName().toUpperCase());
                        } else if (map.get(property.getName().toUpperCase()) != null) {
                            setter.invoke(obj, map.get(property.getName().toUpperCase()));
                     if(setter.getParameterTypes()[0].getSimpleName().equals("String")){
                        setter.invoke(obj, String.valueOf(map.get(property.getName().toUpperCase())));
                     }else{
                        setter.invoke(obj, map.get(property.getName().toUpperCase()));
                     }
                            map.remove(property.getName().toUpperCase());
                        }
                    }
                }
                for (Object key : map.keySet()) {
                    map.put(key, String.valueOf(map.get(key)));
                    map.put(key, map.get(key) == null ? null : String.valueOf(map.get(key)));
                }
                ((BaseModel) obj).setData(map);
@@ -3366,7 +3431,7 @@
        if (!listR.isSuccess() || listR.getData().size() == 0) {
            throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
        }
        String userName = String.valueOf(AuthUtil.getUser().getUserId());
//        String userName = String.valueOf(AuthUtil.getUser().getUserId());
        BaseModel bo = new BaseModel();
//      bo.setOid(VciBaseUtil.getPk());
//      bo.setRevisionid(VciBaseUtil.getPk());
@@ -3376,16 +3441,16 @@
        bo.setFirstR("1");
        bo.setFirstV("1");
        bo.setLastV("1");
        bo.setCreator(userName);
        bo.setCreateTime(new Date());
        bo.setLastModifier(userName);
        bo.setLastModifyTime(new Date());
        bo.setRevisionRule(listR.getData().get(0).getRevisionRuleId());
        bo.setVersionRule(String.valueOf(listR.getData().get(0).getVersionRule()));
        bo.setVersionRule("".equals(listR.getData().get(0).getVersionRule())?"0":listR.getData().get(0).getVersionRule());
        if (StringUtils.isNotBlank(listR.getData().get(0).getRevisionRuleId())) {
            R<List<RevisionRuleVO>> revisionRuleVO = revisionRuleClient
                    .selectByIdCollection(Collections.singletonList(listR.getData().get(0).getRevisionRuleId()));
            bo.setRevisionValue(revisionRuleVO.getData().get(0).getStartCode());
                    .selectByIdCollection(Collections.singletonList(listR.getData().get(0).getRevisionRuleId().toLowerCase()));
            if(revisionRuleVO.getData().size() != 0 ){
            bo.setRevisionValue(revisionRuleVO.getData().get(0).getStartCode());
         }else{
            bo.setRevisionValue("1");
         }
        }
        bo.setRevisionSeq(1);
        bo.setVersionSeq(1);
@@ -3398,7 +3463,7 @@
        bo.setId("");
        bo.setName("");
        bo.setDescription("");
        bo.setOwner(userName);
        bo.setOwner("1");
//      bo.setCheckinby(userName);
        bo.setCopyFromVersion("");
//      this.initTypeAttributeValue(bo,btmTypeVO);
@@ -3653,7 +3718,48 @@
        } else {
            if (StringUtils.isNotBlank(referConfigVO.getParentFieldName()) && StringUtils.isNotBlank(queryObject.getParentOid())) {
                queryObject.getConditionMap().put(referConfigVO.getParentFieldName(), queryObject.getParentOid());
            }
            //查询全部的信息
            String parentOidSql = "";
            if (StringUtils.isNotBlank(referConfigVO.getParentValue())) {
               String temp = referConfigVO.getParentValue();
               if (temp.startsWith(QueryOptionConstant.IN)) {
                  temp = temp.substring((QueryOptionConstant.IN).length()).trim();
                  parentOidSql = " in " + "('" + queryObject.getParentOid() + "')";
               } else if (temp.startsWith(QueryOptionConstant.NOTIN)) {
                  parentOidSql = " not in " + "('" + queryObject.getParentOid() + "')";
               } else if (temp.startsWith(QueryOptionConstant.NOTEQUAL)) {
                  temp = temp.substring((QueryOptionConstant.NOTEQUAL).length()).trim();
                  parentOidSql = QueryOptionConstant.NOTEQUAL + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
               } else if (temp.startsWith(QueryOptionConstant.MORETHAN)) {
                  temp = temp.substring((QueryOptionConstant.MORETHAN).length()).trim();
                  parentOidSql = QueryOptionConstant.MORETHAN + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
               } else if (temp.startsWith(QueryOptionConstant.MORE)) {
                  temp = temp.substring((QueryOptionConstant.MORE).length()).trim();
                  parentOidSql = QueryOptionConstant.MORE + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
               } else if (temp.startsWith(QueryOptionConstant.LESSTHAN)) {
                  temp = temp.substring((QueryOptionConstant.LESSTHAN).length()).trim();
                  parentOidSql = QueryOptionConstant.LESSTHAN + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
               } else if (temp.startsWith(QueryOptionConstant.LESS)) {
                  temp = temp.substring((QueryOptionConstant.LESS).length()).trim();
                  parentOidSql = QueryOptionConstant.LESS + " " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
               } else if (temp.startsWith(QueryOptionConstant.ISNOTNULL)) {
                  parentOidSql = " is not null";
               } else if (temp.startsWith(QueryOptionConstant.ISNULL)) {
                  parentOidSql = " is  null";
               } else if (temp.contains("*")) {
                  parentOidSql = " like " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'").replace("*", "%");
               } else {
                  parentOidSql = " = " + ((temp.startsWith("'") && temp.endsWith("'")) ? temp : "'" + temp + "'");
               }
            }
            //查询全部的信息
            queryObject.getConditionMap().put("oid", QueryOptionConstant.IN + "(select oid from " +
               getTableName(referConfigVO.getReferType()) +
               " START WITH " + referConfigVO.getParentFieldName() + " " +
               parentOidSql +
               " CONNECT BY PRIOR " + oidFieldName + " = " + referConfigVO.getParentFieldName() + ")");
         }
        }
        LambdaQueryWrapper<CodeClassify> lqw = new LambdaQueryWrapper<>();
        String sql = queryObject.getConditionMap().get("oid").substring(3);