田源
2025-01-16 a13255b4129ee8a7a7b7e1ecd8e02dd2c78f7c17
Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/WebFlowServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,142 @@
package com.vci.web.service.impl;
import com.vci.corba.common.PLException;
import com.vci.corba.wf.data.ProcessCategoryInfo;
import com.vci.corba.wf.data.ProcessDefinitionInfo;
import com.vci.starter.web.exception.VciBaseException;
import com.vci.starter.web.pagemodel.BaseQueryObject;
import com.vci.starter.web.pagemodel.DataGrid;
import com.vci.starter.web.util.Lcm.Func;
import com.vci.starter.web.util.VciBaseUtil;
import com.vci.web.dao.WebProcessDaoI;
import com.vci.web.service.WebFlowServiceI;
import com.vci.web.util.PlatformClientUtil;
import com.vci.web.util.WebUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * æµç¨‹æœåŠ¡
 * @author ludc
 * @date 2025/1/14 17:28
 */
@Service
public class WebFlowServiceImpl implements WebFlowServiceI {
    /**
     * å¹³å°è°ƒç”¨å®¢æˆ·ç«¯
     */
    @Autowired
    private PlatformClientUtil platformClientUtil;
    @Autowired
    private WebProcessDaoI webProcessDaoI;
    /**
     * æµç¨‹åˆ†ç±»å…¨æŸ¥è¯¢
     * @param parentId
     * @return
     * @throws PLException
     */
    @Override
    public List<ProcessCategoryInfo> getProcessCategories(String parentId) throws PLException {
        VciBaseUtil.alertNotNull(parentId,"流程分类父主键");
        ProcessCategoryInfo[] processCategories = platformClientUtil.getWFService().getProcessCategories(parentId);
        List<ProcessCategoryInfo> processCategoryInfoList = Arrays.asList(processCategories).stream().sorted((Comparator.comparing(o -> o.id))).collect(Collectors.toList());
        return processCategoryInfoList;
    }
    /**
     * æµç¨‹åˆ†ç±»åˆ†é¡µæŸ¥è¯¢
     * @param baseQueryObject
     * @return
     */
    @Override
    public DataGrid<ProcessCategoryInfo> getProcessCategoriesByPage(BaseQueryObject baseQueryObject) throws PLException {
        String parentId = baseQueryObject.getConditionMap().get("parentId");
        VciBaseUtil.alertNotNull(parentId,"流程分类父主键");
        int page = baseQueryObject.getPage();
        int limit = baseQueryObject.getLimit();
        ProcessCategoryInfo[] processCategories = platformClientUtil.getWFService().getProcessCategoriesByPage(parentId,limit,page);
        List<ProcessCategoryInfo> processCategoryInfoList = Arrays.asList(processCategories).stream().sorted((Comparator.comparing(o -> o.id))).collect(Collectors.toList());
        DataGrid<ProcessCategoryInfo> dataGrid = new DataGrid<>();
        dataGrid.setData(processCategoryInfoList);
        dataGrid.setPage(page);
        dataGrid.setLimit(limit);
        //dataGrid.setTotal();
        return dataGrid;
    }
    /**
     * ä¿å­˜æµç¨‹åˆ†ç±»
     * @param category
     * @return è¿”回主键
     */
    @Override
    public String saveProcessCategory(ProcessCategoryInfo category) throws PLException {
        VciBaseUtil.alertNotNull(category,"流程分类对象",category.name,"流程分类名称");
        this.checkNameExisted(category);
        if(Func.isBlank(category.parentId)){
            category.parentId = "root";
        }
        long time = new Date().getTime();
        String userId = WebUtil.getCurrentUserId();
        category.createTime = time;
        category.modifyTime = time;
        category.creator = userId;
        category.modifer = userId;
        return platformClientUtil.getWFService().saveProcessCategory(category);
    }
    /**
     * ä¿®æ”¹æµç¨‹åˆ†ç±»
     * @param category
     * @return
     */
    @Override
    public boolean updateProcessCategory(ProcessCategoryInfo category) throws PLException {
        VciBaseUtil.alertNotNull(category,"流程分类对象",category.name,"流程分类名称");
        if(Func.isBlank(category.parentId)){
            category.parentId = "root";
        }
        this.checkNameExisted(category);
        category.modifyTime = new Date().getTime();
        category.modifer = WebUtil.getCurrentUserId();
        return platformClientUtil.getWFService().updateProcessCategory(category);
    }
    /**
     * åˆ é™¤æµç¨‹åˆ†ç±»
     * @param id
     * @return
     * @throws Exception
     */
    @Override
    public boolean deleteProcessCategory(String id) throws Exception {
        VciBaseUtil.alertNotNull(id,"待删除流程分类的主键");
        ProcessDefinitionInfo[] processDefinitions = platformClientUtil.getWFService().getProcessDefinitions(id);
        if(processDefinitions.length>0){
            new VciBaseException( "分类下有模板,请先删除模版!");
        }
        return platformClientUtil.getWFService().deleteProcessCategory(id);
    }
    /**
     * æ ¹æ®ä¸»é”®å’Œåç§°æŸ¥è¯¢æµç¨‹åˆ†ç±»æ˜¯å¦å­˜åœ¨
     * @param category
     * @return
     */
    private void checkNameExisted(ProcessCategoryInfo category) throws PLException{
        //判断是否存在相同名称的模板分类
        if(platformClientUtil.getWFService().existProcessCategory(category.id, category.name)){
            throw new VciBaseException("模板分类的名称不能重复!");
        }
    }
}