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 getProcessCategories(String parentId) throws PLException { VciBaseUtil.alertNotNull(parentId,"流程分类父主键"); ProcessCategoryInfo[] processCategories = platformClientUtil.getWFService().getProcessCategories(parentId); List processCategoryInfoList = Arrays.asList(processCategories).stream().sorted((Comparator.comparing(o -> o.id))).collect(Collectors.toList()); return processCategoryInfoList; } /** * 流程分类分页查询 * @param baseQueryObject * @return */ @Override public DataGrid 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 processCategoryInfoList = Arrays.asList(processCategories).stream().sorted((Comparator.comparing(o -> o.id))).collect(Collectors.toList()); DataGrid 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("模板分类的名称不能重复!"); } } }