package com.mossle.internal.delegate.service; import java.util.Date; import java.util.List; import javax.annotation.Resource; import com.mossle.internal.delegate.persistence.domain.DelegateHistory; import com.mossle.internal.delegate.persistence.domain.DelegateInfo; import com.mossle.internal.delegate.persistence.manager.DelegateHistoryManager; import com.mossle.internal.delegate.persistence.manager.DelegateInfoManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @Transactional @Component public class DelegateService { private static Logger logger = LoggerFactory .getLogger(DelegateService.class); private DelegateInfoManager delegateInfoManager; private DelegateHistoryManager delegateHistoryManager; public DelegateInfo getDelegateInfo(String targetAssignee, String targetProcessDefinitionId, String targetTaskDefinitionKey, String tenantId) { String hql = "from DelegateInfo where assignee=? and status=1 and tenantId=? order by id desc"; List<DelegateInfo> list = delegateInfoManager.find(hql, targetAssignee, tenantId); for (DelegateInfo delegateInfo : list) { logger.debug("delegateInfo : {}", delegateInfo); Long id = delegateInfo.getId(); String assignee = delegateInfo.getAssignee(); String attorney = delegateInfo.getAttorney(); String processDefinitionId = delegateInfo.getProcessDefinitionId(); String taskDefinitionKey = delegateInfo.getTaskDefinitionKey(); Date startTime = delegateInfo.getStartTime(); Date endTime = delegateInfo.getEndTime(); Integer status = delegateInfo.getStatus(); if (timeNotBetweenNow(startTime, endTime)) { logger.info("timeNotBetweenNow"); continue; } if ((processDefinitionId != null) && (!processDefinitionId.equals(targetProcessDefinitionId))) { logger.info("processDefinitionId not matches"); continue; } if ((taskDefinitionKey != null) && (!taskDefinitionKey.equals(targetTaskDefinitionKey))) { logger.info("taskDefinitionKey not matches"); continue; } logger.info("delegate to {}", attorney); return delegateInfo; } return null; } public void saveRecord(String assignee, String attorney, String taskId, String tenantId) { DelegateHistory delegateHistory = new DelegateHistory(); delegateHistory.setAssignee(assignee); delegateHistory.setAttorney(attorney); delegateHistory.setDelegateTime(new Date()); delegateHistory.setTaskId(taskId); delegateHistory.setStatus(1); delegateHistory.setTenantId(tenantId); delegateHistoryManager.save(delegateHistory); } public void removeRecord(Long id) { delegateInfoManager.removeById(id); } public void addDelegateInfo(String assignee, String attorney, Date startTime, Date endTime, String processDefinitionId, String taskDefinitionKey, String tenantId) { DelegateInfo delegateInfo = new DelegateInfo(); delegateInfo.setAssignee(assignee); delegateInfo.setAttorney(attorney); delegateInfo.setStartTime(startTime); delegateInfo.setEndTime(endTime); delegateInfo.setProcessDefinitionId(processDefinitionId); delegateInfo.setTaskDefinitionKey(taskDefinitionKey); delegateInfo.setStatus(1); delegateInfo.setTenantId(tenantId); delegateInfoManager.save(delegateInfo); } private boolean timeNotBetweenNow(Date startTime, Date endTime) { Date now = new Date(); if (startTime != null) { return now.before(startTime); } if (endTime != null) { return now.after(endTime); } return false; } @Resource public void setDelegateInfoManager(DelegateInfoManager delegateInfoManager) { this.delegateInfoManager = delegateInfoManager; } @Resource public void setDelegateHistoryManager( DelegateHistoryManager delegateHistoryManager) { this.delegateHistoryManager = delegateHistoryManager; } }