xiejun
2023-07-18 24e44fc25fc7b502486373589e61791ff5bb5eac
Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/service/impl/UniversalInterfaceImpl.java
@@ -11,10 +11,7 @@
import com.vci.ubcs.code.dto.CodeOrderDTO;
import com.vci.ubcs.code.dto.CodeOrderSecDTO;
import com.vci.ubcs.code.entity.*;
import com.vci.ubcs.code.enumpack.CodeDefaultLC;
import com.vci.ubcs.code.enumpack.CodeSecTypeEnum;
import com.vci.ubcs.code.enumpack.SysIntegrationDataFlowTypeEnum;
import com.vci.ubcs.code.enumpack.sysIntegrationPushTypeEnum;
import com.vci.ubcs.code.enumpack.*;
import com.vci.ubcs.code.mapper.CommonsMapper;
import com.vci.ubcs.code.service.*;
import com.vci.ubcs.code.util.ClientBusinessObject;
@@ -39,26 +36,31 @@
import com.vci.ubcs.code.wrapper.CodeClassifyWrapper;
import com.vci.ubcs.omd.feign.IBtmTypeClient;
import com.vci.ubcs.omd.vo.BtmTypeVO;
import com.vci.ubcs.starter.revision.model.BaseModel;
import com.vci.ubcs.starter.exception.VciBaseException;
import com.vci.ubcs.starter.revision.model.TreeQueryObject;
import com.vci.ubcs.starter.util.DefaultAttrAssimtUtil;
import com.vci.ubcs.starter.web.constant.QueryOptionConstant;
import com.vci.ubcs.starter.util.UBCSSqlKeyword;
import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
import com.vci.ubcs.starter.web.util.BeanUtilForVCI;
import com.vci.ubcs.starter.web.util.VciBaseUtil;
import com.vci.ubcs.system.feign.ISysClient;
import com.vci.ubcs.system.user.entity.User;
import com.vci.ubcs.system.user.feign.IUserClient;
import com.vci.ubcs.system.vo.DeptVO;
import com.vci.ubcs.system.vo.RoleVO;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.tool.api.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import static com.vci.ubcs.code.constant.MdmDuckingConstant.DOCKING_DEFAULT_CLASSIFY;
import static com.vci.ubcs.code.constant.MdmEngineConstant.DEFAULT_SYNC_ATTR_LIST;
import static com.vci.ubcs.code.constant.MdmEngineConstant.IMPORT_ROW_INDEX;
import static com.vci.ubcs.code.enumpack.CodeSecTypeEnum.CODE_CLASSIFY_SEC;
/***
@@ -68,7 +70,8 @@
@Slf4j
@VciWebservice(path = "/universalInterface")
public class UniversalInterfaceImpl<IDockingLogeServiceing> implements UniversalInterfaceI {
   @Value("${code.universalinterface.checkSystemConfig:true}")
   public boolean CODE_CHECKCONFIG;
   @Autowired(required = false)
   private AttributeMapConfig attributeMapConfig;
   /**
@@ -87,6 +90,18 @@
    */
   @Autowired
   private IBtmTypeClient btmTypeClient;
   /**
    * 人员服务
    */
   @Autowired
   private  ISysClient sysClient;
   /**
    * 人员服务
    */
   @Autowired
   private IUserClient userClient;
   /**
    * 通用查询
@@ -168,7 +183,7 @@
         boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_APPCODE.getValue());
         if(!checkPass){
            errorid="101";
            throw new Throwable("系统标识为【"+systemId+"】,的"+sysIntegrationPushTypeEnum.ACCPET_APPCODE.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
            throw new Throwable("系统标识为【"+systemId+"】,"+sysIntegrationPushTypeEnum.ACCPET_APPCODE.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
         }
         UserVO userVo = interParameterVO.getData().getUser();
         List<ClassfyVO> classVOList = classfysVO.getClassify();
@@ -338,14 +353,12 @@
         ClassfysVO classfysVO = interParameterVO.getData().getClassifys();
         systemId = interParameterVO.getData().getSystemId();
         //校验是否配置
         boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getValue());
         if(!checkPass){
            errorid="101";
            throw new Throwable("系统标识为【"+systemId+"】,的"+sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
         boolean checkPass = checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getValue());
         if (!checkPass) {
            errorid = "101";
            throw new Throwable("系统标识为【" + systemId + "】," + sysIntegrationPushTypeEnum.ACCPET_EDITCODE.getText() + "接口配置已停用或者未配置,请联系编码管理员!");
         }
         UserVO userVo = interParameterVO.getData().getUser();
         List<ClassfyVO> classVOList = classfysVO.getClassify();
         InterParameterVO finalInterParameterVO = interParameterVO;
@@ -497,12 +510,11 @@
         String libId= libraryVO.getId();
         List<String> classifyIdList=  libraryVO.getClassifyid();
         List<CodeClassifyVO> codeClassifyVOS =new ArrayList<>();
         //校验是否配置
         boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILY.getValue());
         if(!checkPass){
            errorid="101";
            throw new Throwable("系统标识为【"+systemId+"】,的"+sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILY.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
            //校验是否配置
         boolean checkPass = checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILY.getValue());
         if (!checkPass) {
            errorid = "101";
            throw new Throwable("系统标识为【" + systemId + "】," + sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILY.getText() + "接口配置已停用或者未配置,请联系编码管理员!");
         }
         //这是账号信息
@@ -573,7 +585,7 @@
               classifyVO.setClassCode(codeClassifyDO.getId());
               classifyVO.setDescription(codeClassifyDO.getDescription());
               classifyVO.setName(codeClassifyDO.getName());
               classifyVO.setPid(codeClassifyDO.getParentcodeclassifyoid());
               classifyVO.setPid(codeClassifyDO.getParentCodeClassifyOid());
               classifyVO.setFullPathName(codeClassifyDO.getPath());
               classifyVOList.add(classifyVO);
            });
@@ -666,12 +678,14 @@
            msg = "接口参数:library 为null";
            throw new Throwable(msg);
         }
         //校验是否配置
         boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYDATA.getValue());
         if(!checkPass){
            errorid="101";
            throw new Throwable("系统标识为【"+systemId+"】,的"+sysIntegrationPushTypeEnum.ACCPET_QUERYDATA.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
         boolean checkPass = checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYDATA.getValue());
         if (!checkPass) {
            errorid = "101";
            throw new Throwable("系统标识为【" + systemId + "】," + sysIntegrationPushTypeEnum.ACCPET_QUERYDATA.getText() + "接口配置已停用或者未配置,请联系编码管理员!");
         }
         //先简称是否有关联模板,有模板要先删除
         List<CodeClassify> libIdDos =classifyService.selectByWrapper(Wrappers.<CodeClassify>query().lambda().eq(CodeClassify::getId,library));
@@ -858,11 +872,12 @@
         List<CodeClassifyVO> codeClassifyVOS =new ArrayList<>();
         //校验是否配置
         boolean checkPass= checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILYRULE.getValue());
         if(!checkPass){
            errorid="101";
            throw new Throwable("系统标识为【"+systemId+"】,的"+sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILYRULE.getText()+"接口配置已停用或者未配置,请联系编码管理员!");
         boolean checkPass = checkIspass(systemId, SysIntegrationDataFlowTypeEnum.ACCEPT.getValue(), sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILYRULE.getValue());
         if (!checkPass) {
            errorid = "101";
            throw new Throwable("系统标识为【" + systemId + "】," + sysIntegrationPushTypeEnum.ACCPET_QUERYCLAFILYRULE.getText() + "接口配置已停用或者未配置,请联系编码管理员!");
         }
         //这是账号信息
         //这是账号信息
         if(userVo!=null) {
@@ -949,10 +964,169 @@
                        }else if(secType.equals("coderefersec")){//引用码段
                           codeBasicSecVO.getReferAttributeId();
                           codeBasicSecVO.getReferCodeClassifyOid();
                           codeBasicSecVO.getReferBtmId();
                           codeBasicSecVO.getReferBtmName();
                           //codeBasicSecVO.getReferValueInfo();
                           String referBtmId=codeBasicSecVO.getReferBtmId();
                           String btmName=codeBasicSecVO.getReferBtmName();
                           String referConfig= codeBasicSecVO.getReferConfig();
                           CoderefersecSearchVO coderefersecSearchVO=new CoderefersecSearchVO();
                           if(StringUtils.isNotBlank(referConfig)){
                              coderefersecSearchVO = JSONObject.toJavaObject(JSONObject.parseObject(referConfig), CoderefersecSearchVO.class);
                           }
                           String buildSqlwhere="";
                           if(coderefersecSearchVO!=null) {
                              if (coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.DEFAULT.getValue()) || coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.GRID.getValue())) {//默认样式/列表
                                 Map<String, Object> condtionMap = new HashMap<>();
                                 List<CodeSrchCondConfigVO> codeSrchCondConfigVOList = coderefersecSearchVO.getCodeSrchCondConfigVOS();
                                 if (!CollectionUtils.isEmpty(codeSrchCondConfigVOList)) {
                                    codeSrchCondConfigVOList.stream().forEach(codeSrchCondConfigVO -> {
                                       condtionMap.put(codeSrchCondConfigVO.getFilterField() + codeSrchCondConfigVO.getFilterType(), codeSrchCondConfigVO.getFilterValue());
                                    });
                                    buildSqlwhere = UBCSSqlKeyword.buildSqlwhere(condtionMap);
                                 }
                                 //使用传入的业务类型查询表
                                 R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(referBtmId));
                                 if (!listR.isSuccess() || listR.getData().size() == 0) {
                                    throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
                                 }
                                 String referTable = listR.getData().get(0).getTableName();
                                 StringBuffer sb = new StringBuffer();
                                 sb.append(" select * from  ");
                                 sb.append(referTable);
                                 sb.append(" where 1=1  ");
                                 if (StringUtils.isNotBlank(buildSqlwhere)) {
                                    sb.append(buildSqlwhere);
                                 }
                                 List<Map> ListMap = commonsMapper.selectBySql(sb.toString());
                                 String valueField = coderefersecSearchVO.getValueField();
                                 String textField = coderefersecSearchVO.getTextField();
                                 final int[] num = {0};
                                 if (!CollectionUtils.isEmpty(ListMap)) {
                                    ListMap.stream().forEach(map -> {
                                       num[0]++;
                                       String id = map.getOrDefault("OID".toUpperCase(Locale.ROOT), "").toString();
                                       String value = map.getOrDefault(valueField.toUpperCase(Locale.ROOT), "").toString();
                                       String text = map.getOrDefault(textField.toUpperCase(Locale.ROOT), "").toString();
                                       String description = map.getOrDefault("description".toUpperCase(Locale.ROOT), "").toString();
                                       CodeSectionValueVO sectionValueVO = new CodeSectionValueVO(id, num[0] + "", value, text, "", description);
                                       codeSectionValueVOList.add(sectionValueVO);
                                    });
                                 }
                              } else if (coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.TREE.getValue())) {//树形
                              /*   Map<String, Object> condtionMap = new HashMap<>();
                                 List<CodeSrchCondConfigVO> codeSrchCondConfigVOList = coderefersecSearchVO.getCodeSrchCondConfigVOS();
                                 List<CodeShowFieldConfigVO> codeShowFieldConfigVOS=coderefersecSearchVO.getCodeShowFieldConfigVOS();
                                 if (!CollectionUtils.isEmpty(codeSrchCondConfigVOList)) {
                                    codeSrchCondConfigVOList.stream().forEach(codeSrchCondConfigVO -> {
                                       condtionMap.put(codeSrchCondConfigVO.getFilterField() + codeSrchCondConfigVO.getFilterType(), codeSrchCondConfigVO.getFilterValue());
                                    });
                                    buildSqlwhere = UBCSSqlKeyword.buildSqlwhere(condtionMap);
                                 }
                                 //使用传入的业务类型查询表
                                 R<List<BtmTypeVO>> listR = btmTypeClient.selectByIdCollection(Collections.singletonList(referBtmId));
                                 if (!listR.isSuccess() || listR.getData().size() == 0) {
                                    throw new VciBaseException("传入业务类型未查询到相应表单,请检查!");
                                 }
                                 String referTable = listR.getData().get(0).getTableName();
                                 StringBuffer sb = new StringBuffer();
                                 sb.append(" select * from  ");
                                 sb.append(referTable);
                                 sb.append(" where 1=1  ");
                                 if (StringUtils.isNotBlank(buildSqlwhere)) {
                                    sb.append(buildSqlwhere);
                                 }
                                 List<Map> ListMap = commonsMapper.selectBySql(sb.toString());
                                 String valueField = coderefersecSearchVO.getValueField();
                                 String textField = coderefersecSearchVO.getTextField();
                                 final int[] num = {0};
                                 if (!CollectionUtils.isEmpty(ListMap)) {
                                    ListMap.stream().forEach(map -> {
                                       num[0]++;
                                       String id = map.getOrDefault("OID".toUpperCase(Locale.ROOT), "").toString();
                                       String value = map.getOrDefault(valueField.toUpperCase(Locale.ROOT), "").toString();
                                       String text = map.getOrDefault(textField.toUpperCase(Locale.ROOT), "").toString();
                                       String description = map.getOrDefault("description".toUpperCase(Locale.ROOT), "").toString();
                                       CodeSectionValueVO sectionValueVO = new CodeSectionValueVO(id, num[0] + "", value, text, "", description);
                                       codeSectionValueVOList.add(sectionValueVO);
                                    });
                                 }
*/
                              } else if (coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.ORGDEPARTMENTGRIDREFERS.getValue()) ||////部门列表
                                 coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.ORGDEPARTMENTREFER.getValue())//部门树
                              ) {
                                 R<List<DeptVO>> r = sysClient.deptList("");
                                 if (r.isSuccess()) {
                                    List<DeptVO> deptVOList = r.getData();
                                    if (!CollectionUtils.isEmpty(deptVOList)) {
                                       deptVOList.stream().forEach(deptVO -> {
                                          String id = String.valueOf(deptVO.getId());
                                          int num = deptVO.getSort();
                                          String value = String.valueOf(deptVO.getId());
                                          String text = deptVO.getDeptName();
                                          String description = deptVO.getRemark();
                                          String pid = deptVO.getParentId() + "";
                                          CodeSectionValueVO sectionValueVO = new CodeSectionValueVO(id, num + "", value, text, pid, description);
                                          codeSectionValueVOList.add(sectionValueVO);
                                       });
                                    }
                                 }
                              } else if (coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.SMUSERREFER.getValue())//用户
                                 || coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.SMUSERGRIDREFER.getValue())//用户列表
                              ) {
                                 R<List<User>>  r=userClient.selectAllUser();
                                 if (r.isSuccess()) {
                                    List<User> userList = r.getData();
                                    if (!CollectionUtils.isEmpty(userList)) {
                                       final int[] num = {0};
                                       userList.stream().forEach(user -> {
                                           String value=StringUtils.isBlank(user.getAccount())?"":user.getAccount();
                                          //String value= String.valueOf(StringUtils.isBlank(user.getCode())?"":user.getCode());
                                          String text=StringUtils.isBlank(user.getName())?"":user.getName();
                                          String pid=user.getDeptId();
                                          num[0]++;
                                          String description="";
                                          String id= String.valueOf(user.getId());
                                          CodeSectionValueVO sectionValueVO = new CodeSectionValueVO(id, num[0] + "", value, text, pid, description);
                                          codeSectionValueVOList.add(sectionValueVO);
                                       });
                                    }
                                 }
                              } else if (coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.SMROLEREFER.getValue())) {//角色列表
                                 R<List<RoleVO>> r = sysClient.roleTree("");
                                 if (r.isSuccess()) {
                                    List<RoleVO> roleVOList = r.getData();
                                    if (!CollectionUtils.isEmpty(roleVOList)) {
                                       roleVOList.stream().forEach(roleVO -> {
                                          String id = String.valueOf(roleVO.getId());
                                          int num = roleVO.getSort();
                                          String value = String.valueOf(roleVO.getId());
                                          String text = roleVO.getRoleName();
                                          String description = roleVO.getRoleAlias();
                                          String pid = roleVO.getParentId() + "";
                                          CodeSectionValueVO sectionValueVO = new CodeSectionValueVO(id, num + "", value, text, pid, description);
                                          codeSectionValueVOList.add(sectionValueVO);
                                       });
                                    }
                                 }
                              } else if (coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.ORGDUTYREFER.getValue())) {//职务
                              } else if (coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.SMWORKTYPEREFER.getValue())) {//工种
                              } else if (coderefersecSearchVO.getType().equals(CodeReferConfigTypeEnum.WFPROCESSTEMPLATEREFER.getValue())) {//流程模板
                              }
                           }
                           log.info(libId);
                        }else if(secType.equals("codelevelsec")) {//层级码段
                           int level = codeBasicSecVO.getCodeLevelValue();
                           CodeClassifyVO levelCodeClassifyVO = new CodeClassifyVO();
@@ -1015,7 +1189,7 @@
               classifyVO.setClassCode(StringUtils.isBlank(codeClassifyDO.getId())?"":codeClassifyDO.getId());
               classifyVO.setDescription(StringUtils.isBlank(codeClassifyDO.getDescription())?"":codeClassifyDO.getDescription());
               classifyVO.setName(StringUtils.isBlank(codeClassifyDO.getName())?"":codeClassifyDO.getName());
               classifyVO.setPid(StringUtils.isBlank(codeClassifyDO.getParentcodeclassifyoid())?"":codeClassifyDO.getParentcodeclassifyoid());
               classifyVO.setPid(StringUtils.isBlank(codeClassifyDO.getParentCodeClassifyOid())?"":codeClassifyDO.getParentCodeClassifyOid());
               classifyVO.setFullPathName(StringUtils.isBlank(codeClassifyDO.getPath())?"":codeClassifyDO.getPath());
               classifyVO.setCodeRule(resultCodeRuleVO);
               classifyVOList.add(classifyVO);
@@ -1115,9 +1289,11 @@
      });
      Map<String,CodeClassifyVO> codeClassifyVOMap= classifyFullInfo.getParentClassifyVOs().stream().collect(Collectors.toMap(s -> s.getId(), t -> t,(o1, o2)->o2));
      List<CodeOrderSecDTO> codeOrderSecDTOList=new ArrayList<>();
      Map<String,String> errorMap=new HashMap<>();
      for(CodeBasicSecVO codeBasicSecVO: codeBasicSecVOS) {
         String sectype = codeBasicSecVO.getSecType();
         String classifySecOid= codeBasicSecVO.getOid();
         String message="";
         if (!sectype.equals(CodeSecTypeEnum.CODE_SERIAL_SEC.getValue())) {
            String name = codeBasicSecVO.getName();
            String sectypeText = codeBasicSecVO.getSecTypeText();
@@ -1139,18 +1315,27 @@
                        CodeClassifyValue codeClassifyValue=   codeClassifyValueDOMap.get(sectypeValue);
                        sectypeValue=codeClassifyValue.getOid();
                     }else {
                        objerrorCode = "101";
                        throw new Throwable("传入的分类码段:【" + name + " 值:" + sectypeValue + "】,不符合当前分类层级代号");
                        //throw new Throwable("传入的分类码段:【" + name + " 值:" + sectypeValue + "】,不符合当前分类层级代号");
                        message="传入的分类码段:【" + name + " 值:" + sectypeValue + "】,不符合当前分类层级代号";
                        errorMap.put("error",errorMap.getOrDefault("error","")+";"+message);
                     }
                  }
               }
               if(StringUtils.isBlank(sectypeValue)){
                  message="传入的分类码段:【" + name + " 】的值不允许为空";
                  errorMap.put("error",errorMap.getOrDefault("error","")+";"+message);
               }
               CodeOrderSecDTO.setSecValue(sectypeValue);
               codeOrderSecDTOList.add(CodeOrderSecDTO);
            } else {
               objerrorCode="101";
               throw new Throwable("传入的码段规则缺少" + name + "码段");
               message="传入的码段规则缺少" + name + "码段";
               errorMap.put("error",errorMap.getOrDefault("error","")+";"+message);
            }
         }
      }
      if(errorMap.size()>0){
         objerrorCode="101";
         throw new Throwable(errorMap.getOrDefault("error",""));
      }
      return codeOrderSecDTOList;
   }
@@ -1354,6 +1539,9 @@
    * @return
    */
   private boolean checkIspass(String systemId,String type,String operationType){
      if(!CODE_CHECKCONFIG) {
         return true;
      }
      //根据类型去查询需要集成的分类或者数据
      LambdaQueryWrapper<DockingSystemConfig> queryWrapper = Wrappers.<DockingSystemConfig>lambdaQuery();
      queryWrapper.eq(DockingSystemConfig::getUsedFlag, MdmDuckingConstant.SEND_FLAG_TRUE);