package com.jspxcms.core.service.impl; import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.jspxcms.common.orm.Limitable; import com.jspxcms.common.orm.SearchFilter; import com.jspxcms.common.util.RowSide; import com.jspxcms.core.domain.Site; import com.jspxcms.core.domain.User; import com.jspxcms.core.domain.Workflow; import com.jspxcms.core.domain.WorkflowProcess; import com.jspxcms.core.listener.SiteDeleteListener; import com.jspxcms.core.listener.UserDeleteListener; import com.jspxcms.core.listener.WorkflowDeleteListener; import com.jspxcms.core.repository.WorkflowProcessDao; import com.jspxcms.core.service.WorkflowProcessService; import com.jspxcms.core.service.WorkflowProcessUserService; @Service @Transactional(readOnly = true) public class WorkflowProcessServiceImpl implements WorkflowProcessService, SiteDeleteListener, WorkflowDeleteListener, UserDeleteListener { public Page<WorkflowProcess> findAll(Map<String, String[]> params, Pageable pageable) { return dao.findAll(spec(params), pageable); } public RowSide<WorkflowProcess> findSide(Map<String, String[]> params, WorkflowProcess bean, Integer position, Sort sort) { if (position == null) { return new RowSide<WorkflowProcess>(); } Limitable limit = RowSide.limitable(position, sort); List<WorkflowProcess> list = dao.findAll(spec(params), limit); return RowSide.create(list, bean); } private Specification<WorkflowProcess> spec(Map<String, String[]> params) { Collection<SearchFilter> filters = SearchFilter.parse(params).values(); Specification<WorkflowProcess> sp = SearchFilter.spec(filters, WorkflowProcess.class); return sp; } public WorkflowProcess findOne(Integer type, Integer dataId) { return dao.findByTypeAndDataId(type, dataId); } public WorkflowProcess get(Integer id) { return dao.findOne(id); } @Transactional public WorkflowProcess save(Site site, Workflow workflow, User operator, Set<User> users, Integer dataId, int step, Integer type, Boolean isReject, Boolean isEnd) { WorkflowProcess process = new WorkflowProcess(); process.setSite(site); process.setWorkflow(workflow); process.setUser(operator); process.setDataId(dataId); process.setStep(step); process.setType(type); process.setRejection(isReject); process.setEnd(isEnd); process.applyDefaultValue(); process = dao.save(process); processUserService.save(process, users); return process; } @Transactional public WorkflowProcess update(WorkflowProcess bean) { bean.applyDefaultValue(); bean = dao.save(bean); return bean; } @Transactional public WorkflowProcess delete(Integer id) { WorkflowProcess entity = dao.findOne(id); dao.delete(entity); return entity; } @Transactional public WorkflowProcess[] delete(Integer[] ids) { WorkflowProcess[] beans = new WorkflowProcess[ids.length]; for (int i = 0; i < ids.length; i++) { beans[i] = delete(ids[i]); } return beans; } public void preSiteDelete(Integer[] ids) { if (ids == null) { return; } processUserService.deleteByPorcessSiteId(Arrays.asList(ids)); dao.deleteBySiteId(Arrays.asList(ids)); } public void preWorkflowDelete(Integer[] ids) { if (ids == null) { return; } processUserService.deleteByPorcessWorkflowId(Arrays.asList(ids)); dao.deleteByWorkflowId(Arrays.asList(ids)); } public void preUserDelete(Integer[] ids) { if (ids == null) { return; } processUserService.deleteByPorcessUserId(Arrays.asList(ids)); processUserService.deleteByUserId(Arrays.asList(ids)); dao.deleteByUserId(Arrays.asList(ids)); } private WorkflowProcessUserService processUserService; @Autowired public void setProcessUserService( WorkflowProcessUserService processUserService) { this.processUserService = processUserService; } private WorkflowProcessDao dao; @Autowired public void setDao(WorkflowProcessDao dao) { this.dao = dao; } }