ludc
2024-11-14 ed38499b75ab101109c3d2b6b7cc95034f868be3
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIDataServiceImpl.java
@@ -2,6 +2,7 @@
import com.vci.corba.common.PLException;
import com.vci.corba.framework.data.UserInfo;
import com.vci.corba.omd.btm.BizType;
import com.vci.corba.omd.data.*;
import com.vci.corba.omd.lcm.LifeCycle;
import com.vci.dto.*;
@@ -21,6 +22,7 @@
import com.vci.starter.web.pagemodel.*;
import com.vci.starter.web.util.*;
import com.vci.starter.web.wrapper.VciQueryWrapperForDO;
import com.vci.web.enumpck.DeleteTypeEnum;
import com.vci.web.enumpck.UIFieldTypeEnum;
import com.vci.web.enumpck.UITreeLoadTypeEnum;
import com.vci.web.query.UIDataGridQuery;
@@ -68,6 +70,11 @@
     */
    @Autowired
    private OsBtmServiceI btmService;
    /**
     * 属性服务
     */
    @Autowired
    private OsAttributeServiceI attrService;
    /**
     * 链接类型
@@ -129,10 +136,10 @@
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    @Override
    public DataGrid getDataForGrid(UIDataGridQuery dataGridQuery) throws VciBaseException {
    public DataGrid getDataForGrid(UIDataGridQuery dataGridQuery) throws VciBaseException, PLException {
        VciBaseUtil.alertNotNull(dataGridQuery,"查询对象",dataGridQuery.getBtmname(),"业务类型",dataGridQuery.getTableDefineId());
        //先判断查询模板
        UITableDefineVO tableDefineVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid()).getTableDefineVO();
        UITableDefineVO tableDefineVO = uiEngineService.getComponentByOid(dataGridQuery.getComponentOid(),null).getTableDefineVO();
        String queryTemplate = !CollectionUtils.isEmpty(dataGridQuery.getSourceData())?dataGridQuery.getSourceData().getOrDefault("querytemplate",tableDefineVO.getQueryTemplateName()):tableDefineVO.getQueryTemplateName();
        if(StringUtils.isBlank(queryTemplate)){
            //说明没有设置查询模板,需要看看在这个表格所在的组件有没有设置
@@ -170,7 +177,8 @@
            queryFieldList.addAll(linkTypeVO.getAttributes().stream().map(OsLinkTypeAttributeVO::getId).collect(Collectors.toList()));
            queryFieldList.addAll(WebLoServiceImpl.LO_BASE_FIELD_MAP.values());
        }else{
            btmTypeVO = btmService.getBtmById(dataGridQuery.getBtmname());
            //btmTypeVO = btmService.getBtmById(dataGridQuery.getBtmname());
            btmTypeVO = btmService.getBtmByName(dataGridQuery.getBtmname());
            queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
            queryFieldList.addAll(WebBoServiceImpl.BO_BASE_FIELD_MAP.values());
        }
@@ -191,8 +199,9 @@
            }
            return loService.queryGridByScheme(linkTypeDataQuery);
        }else {
            return boService.queryGridByScheme(queryTemplate,
            DataGrid dataGrid = boService.queryGridByScheme(queryTemplate,
                    dataGridQuery.getConditionMap(), replaceMap, dataGridQuery.getPageHelper(), queryFieldList.stream().collect(Collectors.toList()));
            return dataGrid;
        }
        //生命周期在其中查询后就会处理
        //枚举也会被处理了
@@ -206,7 +215,7 @@
     * @throws VciBaseException 查询出错的时候会抛出异常
     */
    @Override
    public UIFormDataVO getDataForForm(UIFormQuery formQuery) throws VciBaseException {
    public UIFormDataVO getDataForForm(UIFormQuery formQuery) throws VciBaseException, PLException {
        VciBaseUtil.alertNotNull(formQuery,"表单的查询对象",formQuery.getBtmname(),"业务类型的信息",formQuery.getOid(),"业务数据的主键",formQuery.getFormDefineId(),"表单的定义编号");
        UIFormDefineVO formDefineVO = uiEngineService.getFormById(formQuery.getBtmname(),formQuery.getFormDefineId());
        String queryTemplate = !CollectionUtils.isEmpty(formQuery.getSourceData())?formQuery.getSourceData().getOrDefault("querytemplate",formDefineVO.getQueryTemplateName()):formDefineVO.getQueryTemplateName();
@@ -236,7 +245,7 @@
            queryFieldList.addAll(linkTypeVO.getAttributes().stream().map(OsLinkTypeAttributeVO::getId).collect(Collectors.toList()));
            queryFieldList.addAll(WebLoServiceImpl.LO_BASE_FIELD_MAP.values());
        }else{
            btmTypeVO = btmService.getBtmById(formQuery.getBtmname());
            btmTypeVO = btmService.getBtmByName(formQuery.getBtmname());
            queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
        }
        queryFieldList.add("creator_name");
@@ -338,7 +347,8 @@
    @Override
    public List<Tree> getDataForTree(UITreeQuery treeQuery) throws VciBaseException {
        VciBaseUtil.alertNotNull(treeQuery,"表单的查询对象",treeQuery.getBtmname(),"业务类型的信息",treeQuery.getComponentOid(),"树所在的组件的主键");
        UIComponentVO componentVO = uiEngineService.getComponentByOid(treeQuery.getComponentOid());
        Map<String, OsAttributeVO> attributeVOMap = attrService.selectAllAttributeMap();
        UIComponentVO componentVO = uiEngineService.getComponentByOid(treeQuery.getComponentOid(),attributeVOMap);
        if(componentVO == null || StringUtils.isBlank(componentVO.getOid())){
            throw new VciBaseException("树的配置信息没有获取到");
        }
@@ -381,7 +391,7 @@
        if(StringUtils.isBlank(treeDefineVO.getLinkType())){
            //这个是业务类型的自参照
            //以前的平台没有对自参照这种有全部查询的
            OsBtmTypeVO btmTypeVO = btmService.getBtmById(treeDefineVO.getBtmType());
            OsBtmTypeVO btmTypeVO = btmService.getBtmById(treeDefineVO.getBtmType(),attributeVOMap);
            queryFieldList.addAll(btmTypeVO.getAttributes().stream().map(OsBtmTypeAttributeVO::getId).collect(Collectors.toList()));
            queryFieldList.addAll(WebBoServiceImpl.BO_BASE_FIELD_MAP.values());
@@ -1047,7 +1057,7 @@
     * @throws VciBaseException 保存出错的时候会抛出异常
     */
    @Override
    public BaseResult<Map<String, Object>> addSave(FormDataDTO formDataDTO) throws VciBaseException {
    public BaseResult<Map<String, Object>> addSave(FormDataDTO formDataDTO) throws VciBaseException, PLException {
        //首先判断对象是否为空
        VciBaseUtil.alertNotNull(formDataDTO,"添加的数据对象",formDataDTO.getBtmname(),"业务类型的名称",formDataDTO.getFormDefineId(),"表单定义的编号");
        UIFormDefineVO formDefineVO = uiEngineService.getFormById(formDataDTO.getBtmname(), formDataDTO.getFormDefineId());
@@ -1103,7 +1113,7 @@
     * @param newVersion 新版次
     * @return  执行的结果
     */
    private BaseResult<BusinessObject> wrapperCbo(FormDataDTO formDataDTO,UIFormDefineVO formDefineVO,boolean editFlag,boolean newRevision,boolean newVersion){
    private BaseResult<BusinessObject> wrapperCbo(FormDataDTO formDataDTO,UIFormDefineVO formDefineVO,boolean editFlag,boolean newRevision,boolean newVersion) throws PLException {
        //扩展属性的值
        Map<String, String> data = formDataDTO.getData();
        Map<String,String> dataLow = new HashMap<>();
@@ -1312,7 +1322,7 @@
     * @throws VciBaseException 保存出错的时候会抛出异常
     */
    @Override
    public BaseResult<String> batchAddSave(FormDataDTOList formDataDTOList) throws VciBaseException {
    public BaseResult<String> batchAddSave(FormDataDTOList formDataDTOList) throws VciBaseException, PLException {
        VciBaseUtil.alertNotNull(formDataDTOList,"要添加的数据",formDataDTOList.getFormDataDTOS(),"要添加的数据");
        //首先判断对象是否为空
        FormDataDTO firstFormDataDTO = formDataDTOList.getFormDataDTOS().stream().findFirst().get();
@@ -1363,7 +1373,7 @@
        }catch (Throwable e){
            //说明后置事件出现了错误,那么就需要删除以前的这条数据
            try {
                platformClientUtil.getBOFactoryService().batchDeleteBusinessObject(afterBOs.toArray(new BusinessObject[0]),1);
                platformClientUtil.getBOFactoryService().batchDeleteBusinessObject(afterBOs.toArray(new BusinessObject[0]),DeleteTypeEnum.OID_AND_TS.getValue());
            } catch (PLException vciError) {
                throw WebUtil.getVciBaseException(vciError);
            }
@@ -1382,7 +1392,7 @@
     * @throws VciBaseException 保存出错的时候会抛出异常
     */
    @Override
    public BaseResult<Map<String, Object>> editSave(FormDataDTO formDataDTO) throws VciBaseException {
    public BaseResult<Map<String, Object>> editSave(FormDataDTO formDataDTO) throws VciBaseException, PLException {
        //首先判断对象是否为空
        VciBaseUtil.alertNotNull(formDataDTO,"修改的数据对象",formDataDTO.getBtmname(),"业务类型的名称",formDataDTO.getFormDefineId(),"表单定义的编号");
        UIFormDefineVO formDefineVO = uiEngineService.getFormById(formDataDTO.getBtmname(), formDataDTO.getFormDefineId());
@@ -1486,7 +1496,7 @@
     * @throws VciBaseException 保存出错的时候会抛出异常
     */
    @Override
    public BaseResult<String> batchEditSave(FormDataDTOList formDataDTOList) throws VciBaseException {
    public BaseResult<String> batchEditSave(FormDataDTOList formDataDTOList) throws VciBaseException, PLException {
        VciBaseUtil.alertNotNull(formDataDTOList,"要修改的数据",formDataDTOList.getFormDataDTOS(),"要修改的数据");
        //首先判断对象是否为空
        FormDataDTO firstFormDataDTO = formDataDTOList.getFormDataDTOS().stream().findFirst().get();
@@ -1543,7 +1553,7 @@
     * @throws VciBaseException 数据被引用的时候会抛出异常
     */
    @Override
    public BaseResult batchDelete(DeleteDataDTO deleteDataDTO) throws VciBaseException {
    public BaseResult batchDelete(DeleteDataDTO deleteDataDTO) throws VciBaseException, PLException {
        VciBaseUtil.alertNotNull(deleteDataDTO,"数据传输对象",deleteDataDTO.getDataList(),"数据传输对象");
        String btmName = deleteDataDTO.getDataList().get(0).getBtmname();
        List<String> oidList = deleteDataDTO.getDataList().stream().map(BaseModelDTO::getOid).collect(Collectors.toList());
@@ -1551,7 +1561,7 @@
        List<BusinessObject> cbo = null;
        if(deleteDataDTO.isCascade()){
            //级联删除
            OsBtmTypeVO btmTypeVO = btmService.getBtmById(btmName);
            OsBtmTypeVO btmTypeVO = btmService.getBtmByName(btmName);
            OsBtmTypeAttributeVO parentAttributeVO = btmTypeVO.getAttributes().stream().filter(s -> s.getReferBtmTypeId().equalsIgnoreCase(btmName)).findFirst().orElseGet(null);
            if(parentAttributeVO != null){
                //页面分页不能显示超过1000
@@ -1632,7 +1642,7 @@
     * @throws VciBaseException 参数为空,必输项缺失
     */
    @Override
    public BaseResult<String> linkAddSave(FormLinkDataDTO formLinkDataDTO) throws VciBaseException {
    public BaseResult<String> linkAddSave(FormLinkDataDTO formLinkDataDTO) throws VciBaseException, PLException {
        //首先判断对象是否为空
        VciBaseUtil.alertNotNull(formLinkDataDTO,"添加的数据对象",formLinkDataDTO.getLinkType(),"链接类型的名称",formLinkDataDTO.getFormDefineId(),"表单定义的编号");
        if(formLinkDataDTO.getData() ==null){
@@ -1683,13 +1693,6 @@
            throw new VciBaseException(formLinkDataDTO.isDirection()?"from端":"to端" + "的业务类型为空");
        }
        //查询from端的
        BusinessObject fromCbo = new BusinessObject();
        try {
            fromCbo = platformClientUtil.getBOFService().readBusinessObject(fromOid,fromBtmName);
        } catch (PLException vciError) {
            throw WebUtil.getVciBaseException(vciError);
        }
        String finalPrefix = prefix;
        formLinkDataDTO.getData().forEach((key, value)->{
            if(key.toLowerCase().startsWith(finalPrefix)){
@@ -1710,10 +1713,12 @@
            return BaseResult.fail(resultClo.getMsg(),resultClo.getMsgObjs());
        }
        clo = resultClo.getObj();
        if(StringUtils.isBlank(clo.toOid)){
            clo.toOid = toCbo.oid;
        }
        //执行保存
        BusinessObject[] bos = new BusinessObject[1];
        ObjectTool.dealBusinessObjectNullValue(toCbo);
        ObjectTool.dealLinkObjectNullValue(clo);
        bos[0] = toCbo;
        try {
            platformClientUtil.getBOFService().createBusinessObjectWithLink(bos,clo);
@@ -1768,7 +1773,6 @@
        if(editFlag){
            try {
                LinkObject linkObject = platformClientUtil.getBOFService().readLinkObjectById(formLinkDataDTO.getOid(), formLinkDataDTO.getLinkType());
                clo = new LinkObject();
                clo = linkObject;
            } catch (PLException vciError) {
                throw WebUtil.getVciBaseException(vciError);
@@ -1781,6 +1785,14 @@
            clo.createTime = System.currentTimeMillis();
            clo.ts = System.currentTimeMillis();
            clo.ltName = formLinkDataDTO.getLinkType();
            clo.toOid = formLinkDataDTO.getToid();
            clo.toNameOid = formLinkDataDTO.getTnameoid();
            clo.toRevOid = formLinkDataDTO.getTrevisionoid();
            clo.toBTName = formLinkDataDTO.getTbtmname();
            clo.fromOid = formLinkDataDTO.getFoid();
            clo.fromBTName = formLinkDataDTO.getFbtmname();
            clo.fromNameOid = formLinkDataDTO.getFnameoid();
            clo.fromRevOid = formLinkDataDTO.getFrevisionoid();
        }
        //
        LinkObject finalClo = clo;
@@ -1806,7 +1818,7 @@
     * @param boData to的数据
     * @return 包含的对象
     */
    private BaseResult<BusinessObject> wrapperToCbo(FormLinkDataDTO formLinkDataDTO,UIFormDefineVO formDefineVO,String toOid,String toBtmName,Map<String,String> boData){
    private BaseResult<BusinessObject> wrapperToCbo(FormLinkDataDTO formLinkDataDTO,UIFormDefineVO formDefineVO,String toOid,String toBtmName,Map<String,String> boData) throws PLException {
        Map<String,String> dataLow = new HashMap<>();
        boData.forEach((key,value)->{
            dataLow.put(key.toLowerCase(),value);
@@ -1926,14 +1938,15 @@
     * @param newVersion 是否升版次
     * @return cbo对象
     */
    public BusinessObject createOrGetCbo(Map<String,String> dataLowMap,Map<String,String> baseDataMap,boolean editFlag,boolean newRevision,boolean newVersion){
    public BusinessObject createOrGetCbo(Map<String,String> dataLowMap,Map<String,String> baseDataMap,boolean editFlag,boolean newRevision,boolean newVersion) throws PLException {
        String btmName = baseDataMap.get("btmname");
        String oid = baseDataMap.get("oid");
//        BusinessObject cbo = new BusinessObject();
        BusinessObject cbo = new BusinessObject();
        String copyfromversion = baseDataMap.get("copyfromversion");
        OsBtmTypeVO btmTypeVO = btmService.getBtmById(btmName);
        List<String> attributeList = btmTypeVO.getAttributes().stream().map(attribute -> attribute.getId()).collect(Collectors.toList());
        //OsBtmTypeVO btmTypeVO = btmService.getBtmById(btmName);
        OsBtmTypeVO btmTypeVO = btmService.getBtmByName(btmName);
        //List<String> attributeList = btmTypeVO.getAttributes().stream().map(attribute -> attribute.getId()).collect(Collectors.toList());
        if(editFlag || newRevision || newVersion){
            try {
                cbo = platformClientUtil.getBOFService().readBusinessObject(editFlag?oid:copyfromversion,btmName);
@@ -2029,6 +2042,7 @@
            if(StringUtils.isBlank(cbo.btName)){
                cbo.btName = btmTypeVO.getId();
            }
            if(btmTypeVO.isRevisionFlag()){
                //要管理版本
                if(btmTypeVO.isInputRevisionFlag() && StringUtils.isNotBlank(baseDataMap.getOrDefault("revisionvalue",""))){
@@ -2039,7 +2053,7 @@
                    if (ruleVO == null || StringUtils.isBlank(ruleVO.getOid())) {
                        throw new VciBaseException("{0}里的版本规则设置得不正确,在系统中没有找到{1}这个版本规则", new String[]{btmTypeVO.getName(), btmTypeVO.getRevisionRuleId()});
                    }
                    cbo.revisionValue = ruleVO.getStartCode();
                    cbo.revisionValue = ruleVO.getInitialValue();
                }
                if (StringUtils.isBlank(cbo.nameoid)) {
                    cbo.nameoid = VciBaseUtil.getPk();
@@ -2068,7 +2082,16 @@
//            }
//        }
        setValueToCbo(dataLowMap,baseDataMap,cbo,editFlag);
//        cbo.setName(dataLowMap.get("name"));
        //TODO:默认属性需要放在cbo外层
        if(StringUtils.isNotBlank(baseDataMap.getOrDefault("id",""))){
            cbo.id = baseDataMap.getOrDefault("id","");
        }
        if(StringUtils.isNotBlank(baseDataMap.getOrDefault("name",""))){
            cbo.name = baseDataMap.getOrDefault("name","");
        }
        if(StringUtils.isNotBlank(baseDataMap.getOrDefault("description",""))){
            cbo.description = baseDataMap.getOrDefault("description","");
        }
        return cbo;
    }
@@ -2132,7 +2155,7 @@
     * @throws VciBaseException 参数为空,必输项缺失
     */
    @Override
    public BaseResult linkEditSave(FormLinkDataDTO formLinkDataDTO) throws VciBaseException {
    public BaseResult linkEditSave(FormLinkDataDTO formLinkDataDTO) throws VciBaseException, PLException {
        VciBaseUtil.alertNotNull(formLinkDataDTO,"修改的数据对象",formLinkDataDTO.getLinkType(),"链接类型的名称",
                formLinkDataDTO.getFormDefineId(),"表单定义的编号",formLinkDataDTO.getOid(),"主键",
                formLinkDataDTO.getFoid(),"from端主键",formLinkDataDTO.getToid(),"to端主键");
@@ -2157,8 +2180,6 @@
        String prefix = formLinkDataDTO.isDirection()?LO_FROM_PREFIX:LO_TO_PREFIX;
        String toOid = formLinkDataDTO.isDirection()?formLinkDataDTO.getFoid():formLinkDataDTO.getToid();
        String toBtmName =  formLinkDataDTO.isDirection()?formLinkDataDTO.getFbtmname():formLinkDataDTO.getTbtmname();
        String fromOid = formLinkDataDTO.isDirection()?formLinkDataDTO.getToid():formLinkDataDTO.getFoid();
        String fromBtmName = formLinkDataDTO.isDirection()?formLinkDataDTO.getTbtmname():formLinkDataDTO.getFbtmname();
        Map<String,String> boData = new HashMap<>();
        Map<String,String> loData = new HashMap<>();
@@ -2295,7 +2316,7 @@
        if(deleteLinkDataDTO.isDeleteFromData()){
            fromBtmDataGroups.forEach((btm,cbos)->{
                try{
                    platformClientUtil.getBOFactoryService().batchDeleteBusinessObject(cbos.toArray(new BusinessObject[0]),1);
                    platformClientUtil.getBOFactoryService().batchDeleteBusinessObject(cbos.toArray(new BusinessObject[0]), DeleteTypeEnum.OID_AND_TS.getValue());
                }catch (PLException vciError) {
                    throw WebUtil.getVciBaseException(vciError);
                }
@@ -2304,7 +2325,7 @@
        if(deleteLinkDataDTO.isDeleteToData()){
            toBtmDataGroups.forEach((btm,cbos)->{
                try{
                    platformClientUtil.getBOFactoryService().batchDeleteBusinessObject(cbos.toArray(new BusinessObject[0]),1);
                    platformClientUtil.getBOFactoryService().batchDeleteBusinessObject(cbos.toArray(new BusinessObject[0]),DeleteTypeEnum.OID_AND_TS.getValue());
                }catch (PLException vciError) {
                    throw WebUtil.getVciBaseException(vciError);
                }
@@ -2321,10 +2342,10 @@
     * @return 列表数据
     */
    @Override
    public DataGrid referDataGrid(ReferConfigVO referConfigVO, PageHelper pageHelper) {
    public DataGrid referDataGrid(ReferConfigVO referConfigVO, PageHelper pageHelper) throws PLException {
        checkReferConfig(referConfigVO);
        //使用业务类型查询
        OsBtmTypeVO btmById = btmService.getBtmById(referConfigVO.getReferBo());
        OsBtmTypeVO btmById = btmService.getBtmByName(referConfigVO.getReferBo());
        if(referConfigVO.getConditionMap() == null){
            referConfigVO.setConditionMap(new HashMap<>());
        }