Commit ef3b44a9 by shiwenbo

更新inz.workflow工程

parent 022c6231
......@@ -14,8 +14,9 @@ dependencies {
compile lib.json
compile lib.bcp_type_support_json
compile lib.bcp_participant
compile lib.hibernate_common_annotations
compile "com.beecode:bap2.staff:${aminoVersion}"
compile "com.beecode:bap2.bill:${aminoVersion}"
compile "com.beecode:bap2.bill.workflow:${aminoVersion}"
compile "com.beecode:bap2.userprofile:${bap2Version}"
compile "com.beecode:bap2.workflow:${aminoVersion}"
compile "com.beecode:bap2.system:${aminoVersion}"
......
......@@ -16,11 +16,14 @@ import com.beecode.inz.workflow.internal.scene.ProcessedTask;
import com.beecode.inz.workflow.internal.scene.ToDoTask;
import com.beecode.inz.workflow.internal.scene.UnderwayProcess;
import com.beecode.inz.workflow.internal.scene.workflowdefinition.DiscardScene;
import com.beecode.inz.workflow.listener.CommonWorkflowBillProcessEventListener;
import com.beecode.inz.workflow.listener.TaskEventListenerImpl;
import com.beecode.inz.workflow.participant.CommomParticipantStrategy;
import com.beecode.inz.workflow.participant.DepartmentPicByLevelParticipantStrategy;
import com.beecode.inz.workflow.participant.FollowerMemberPicParticipantStrategy;
import com.beecode.inz.workflow.participant.SubmitDeptPathAppointRoleParticipantStrategy;
import com.beecode.inz.workflow.participant.SubmitOrgPathAppointRoleParticipantStrategy;
import com.beecode.inz.workflow.participant.SubmiterSubsidiaryRoleParticipantStrategy;
import com.beecode.inz.workflow.query.InzApprovalTaskQueryDataProcessor;
import com.beecode.inz.workflow.query.InzBizProcessQueryDataProcessor;
import com.beecode.inz.workflow.query.InzWorkflowDefinitionQueryDataProcessor;
......@@ -113,6 +116,14 @@ public class BeanConfiguration {
public SubmitDeptPathAppointRoleParticipantStrategy createSubmitDeptPathAppointRoleParticipantStrategy(){
return new SubmitDeptPathAppointRoleParticipantStrategy();
}
@Bean("com.beecode.inz.workflow.participant.SubmiterSubsidiaryRoleParticipantStrategy")
public SubmiterSubsidiaryRoleParticipantStrategy createSubmiterSubsidiaryRoleParticipantStrategy(){
return new SubmiterSubsidiaryRoleParticipantStrategy();
}
@Bean("com.beecode.inz.workflow.participant.SubmitOrgPathAppointRoleParticipantStrategy")
public SubmitOrgPathAppointRoleParticipantStrategy createSubmitOrgPathAppointRoleParticipantStrategy(){
return new SubmitOrgPathAppointRoleParticipantStrategy();
}
@Bean("com.beecode.inz.workflow.participant.FollowerMemberPicParticipantStrategy")
public FollowerMemberPicParticipantStrategy createFollowerMemberPic(){
......@@ -124,4 +135,9 @@ public class BeanConfiguration {
return new DiscardScene();
}
@Bean("com.beecode.inz.workflow.listener.CommonWorkflowBillProcessEventListener")
public CommonWorkflowBillProcessEventListener commonWorkflowBillProcessEventListener() {
return new CommonWorkflowBillProcessEventListener();
}
}
package com.beecode.inz.workflow.dao;
import java.util.UUID;
import com.beecode.inz.workflow.entity.ApprovalCopyEntity;
public interface ApprovalCopyDao {
void addApprovalCopy(ApprovalCopyEntity approvalCopyEntity);
ApprovalCopyEntity getApprovalCopyByprocessInstanceId(UUID processInstanceId);
}
package com.beecode.inz.workflow.dao;
import java.util.UUID;
import com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity;
public interface SubmitApprovalSuggestionDao {
void addSubmitApprovalSuggestionEntity(SubmitApprovalSuggestionEntity submitApprovalSuggestionEntity);
SubmitApprovalSuggestionEntity getSubmitApprovalSuggestionByprocessInstanceId(UUID processInstanceId);
}
package com.beecode.inz.workflow.dao;
import java.util.List;
import java.util.UUID;
import com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity;
public interface TranspondApprovalStaffDao {
void addTranspondApprovalStaffEntity(TranspondApprovalStaffEntity transpondApprovalStaffEntity);
List<TranspondApprovalStaffEntity> getTranspondApprovalStaffByprocessInstanceId(UUID processInstanceId);
}
package com.beecode.inz.workflow.dao;
import java.util.List;
import java.util.UUID;
import com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity;
public interface TranspondApprovalSuggestionDao {
void addTranspondApprovalSuggestionEntity(TranspondApprovalSuggestionEntity transpondApprovalSuggestionEntity);
List<TranspondApprovalSuggestionEntity> getTranspondApprovalSuggestionByprocessInstanceId(UUID processInstanceId);
}
package com.beecode.inz.workflow.entity;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name = "kids_approval_copy")
public class ApprovalCopyEntity {
@Id
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@GeneratedValue(generator = "system-uuid")
@Column(name = "id", nullable = false,length = 16)
private UUID id;
@Column(name = "process_instance_id",nullable = false,length = 16)
private UUID processInstanceId;
@Column(name = "staff_json", nullable = false,length = 1024)
private String staffJson;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public UUID getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(UUID processInstanceId) {
this.processInstanceId = processInstanceId;
}
public String getStaffJson() {
return staffJson;
}
public void setStaffJson(String staffJson) {
this.staffJson = staffJson;
}
}
......@@ -11,6 +11,7 @@ public class ApprovedRecord extends ApprovalRecord{
private UserAssignment approvalUser;
private Date finishTime;
private String suggestions;
private String attribute1;
public String getApprovalAction() {
return approvalAction;
......@@ -36,7 +37,10 @@ public class ApprovedRecord extends ApprovalRecord{
public void setFinishTime(Date finishTime) {
this.finishTime = finishTime;
}
public String getAttribute1() {
return attribute1;
}
public void setAttribute1(String attribute1) {
this.attribute1 = attribute1;
}
}
......@@ -6,9 +6,12 @@ import com.beecode.bcp.type.KObject;
public class InzApprovalTask extends CommonTask {
public static final String ATTR_BIZOBJECTNAME = "bizObjectName";
public static final String ATTR_ATTRIBUTE1 = "attribute1";
private String bizObjectName;
private String attribute1;
private InzBizProcess bizProcess;
private boolean canApprove = false;
......@@ -28,6 +31,7 @@ public class InzApprovalTask extends CommonTask {
super(kObject);
this.bizProcess = new InzBizProcess(kObject.get(ATTR_BIZPROCESS));
this.bizObjectName = kObject.getString(ATTR_BIZOBJECTNAME);
this.attribute1 = kObject.getString(ATTR_ATTRIBUTE1);
if (null != kObject.get(PARENT) && !kObject.get(PARENT).isNull()) {
this.parent = new InzApprovalTask(kObject.get(PARENT));
}
......@@ -41,6 +45,10 @@ public class InzApprovalTask extends CommonTask {
return bizObjectName;
}
public String getAttribute1() {
return attribute1;
}
public InzBizProcess getBizProcess() {
return bizProcess;
}
......
......@@ -20,12 +20,15 @@ public class InzBizProcess extends BizProcess{
TriggerAction action = config.getTriggerCondition().findTriggerActionByName(kObject.getString(ATTR_TRIGGERACTION));
this.bizObjectName = this.toKObject().getString(ATTR_BIZOBJECTNAME);
this.bizAffiliationName = this.toKObject().getString(ATTR_BIZAFFILIATIONNAME);
this.triggerActionTitle = action.getTitle();
}
public static final String ATTR_BIZOBJECTNAME = "bizObjectName";
public static final String ATTR_BIZAFFILIATIONNAME = "bizAffiliationName";
public static final String ATTR_TRIGGERACTION = "triggerAction";
private String bizTypeTitle;
private String bizObjectName;
private String bizAffiliationName;
private String triggerActionTitle;
public void setKClass(KClass kClass){
......@@ -43,6 +46,8 @@ public class InzBizProcess extends BizProcess{
public String getTriggerActionTitle() {
return triggerActionTitle;
}
public String getBizAffiliationName() {
return bizAffiliationName;
}
}
package com.beecode.inz.workflow.entity;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name = "kids_submit_approval_suggestion")
public class SubmitApprovalSuggestionEntity {
@Id
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@GeneratedValue(generator = "system-uuid")
@Column(name = "id", nullable = false,length = 16)
private UUID id;
@Column(name = "process_instance_id",nullable = false,length = 16)
private UUID processInstanceId;
@Column(name = "suggestion", nullable = false,length = 500)
private String suggestion;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public UUID getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(UUID processInstanceId) {
this.processInstanceId = processInstanceId;
}
public String getSuggestion() {
return suggestion;
}
public void setSuggestion(String suggestion) {
this.suggestion = suggestion;
}
}
package com.beecode.inz.workflow.entity;
import java.util.Date;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name = "kids_transpond_approval_staff")
public class TranspondApprovalStaffEntity {
public enum operationType{
copy,transpond;
};
@Id
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@GeneratedValue(generator = "system-uuid")
@Column(name = "id", nullable = false,length = 16)
private UUID id;
@Column(name = "process_instance_id",nullable = false,length = 16)
private UUID processInstanceId;
@Column(name = "staff_json", nullable = false,length = 500)
private String staffJson;
@Column(name = "submit_id", nullable = false,length = 16)
private UUID submitId;
@Column(name = "finish_time", nullable = false)
private Date finishTime;
@Column(name = "operation", nullable = false,length = 20)
@Enumerated(EnumType.STRING)
private operationType operation;
@Column(name = "suggestion",length = 500)
private String suggestion;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public UUID getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(UUID processInstanceId) {
this.processInstanceId = processInstanceId;
}
public String getStaffJson() {
return staffJson;
}
public void setStaffJson(String staffJson) {
this.staffJson = staffJson;
}
public UUID getSubmitId() {
return submitId;
}
public void setSubmitId(UUID submitId) {
this.submitId = submitId;
}
public Date getFinishTime() {
return finishTime;
}
public void setFinishTime(Date finishTime) {
this.finishTime = finishTime;
}
public operationType getOperation() {
return operation;
}
public void setOperation(operationType operation) {
this.operation = operation;
}
public String getSuggestion() {
return suggestion;
}
public void setSuggestion(String suggestion) {
this.suggestion = suggestion;
}
}
package com.beecode.inz.workflow.entity;
import java.util.Date;
import java.util.UUID;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity
@Table(name = "kids_transpond_approval_suggestion")
public class TranspondApprovalSuggestionEntity {
public enum operationType{
copy,transpond,receive;
};
@Id
@GenericGenerator(name = "system-uuid", strategy = "uuid2")
@GeneratedValue(generator = "system-uuid")
@Column(name = "id", nullable = false,length = 16)
private UUID id;
@Column(name = "process_instance_id",nullable = false,length = 16)
private UUID processInstanceId;
@Column(name = "suggestion",length = 500)
private String suggestion;
@Column(name = "submit_id", nullable = false,length = 16)
private UUID submitId;
@Column(name = "finish_time", nullable = false)
private Date finishTime;
@Column(name = "operation", nullable = false,length = 20)
@Enumerated(EnumType.STRING)
private operationType operation;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
public UUID getProcessInstanceId() {
return processInstanceId;
}
public void setProcessInstanceId(UUID processInstanceId) {
this.processInstanceId = processInstanceId;
}
public String getSuggestion() {
return suggestion;
}
public void setSuggestion(String suggestion) {
this.suggestion = suggestion;
}
public UUID getSubmitId() {
return submitId;
}
public void setSubmitId(UUID submitId) {
this.submitId = submitId;
}
public Date getFinishTime() {
return finishTime;
}
public void setFinishTime(Date finishTime) {
this.finishTime = finishTime;
}
public operationType getOperation() {
return operation;
}
public void setOperation(operationType operation) {
this.operation = operation;
}
}
package com.beecode.inz.workflow.internal.dao;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateOperations;
import org.springframework.stereotype.Repository;
import com.beecode.inz.workflow.dao.ApprovalCopyDao;
import com.beecode.inz.workflow.entity.ApprovalCopyEntity;
@Repository
public class ApprovalCopyDaoImpl implements ApprovalCopyDao{
@Autowired
private HibernateOperations template;
@Override
public void addApprovalCopy(ApprovalCopyEntity approvalCopyEntity) {
template.save(approvalCopyEntity);
}
@Override
public ApprovalCopyEntity getApprovalCopyByprocessInstanceId(UUID processInstanceId) {
return template.execute(session->{
String hql = " from ApprovalCopyEntity ac where ac.processInstanceId = :processInstanceId";
List<ApprovalCopyEntity> result = session.createQuery(hql,ApprovalCopyEntity.class)
.setParameter("processInstanceId", processInstanceId).getResultList();
if(null == result || result.size() == 0){
return null;
}
return result.get(0);
});
}
}
package com.beecode.inz.workflow.internal.dao;
import java.util.List;
import java.util.UUID;
import org.hibernate.HibernateException;
......@@ -32,8 +33,11 @@ public class CommonDaoImpl implements CommonDao{
public KObject doInHibernate(Session session) throws HibernateException {
Query<KObject> queyr = session.createQuery(" from " +kClass + " where id=:id",KObject.class);
queyr.setParameter("id", id);
KObject obj = queyr.getSingleResult();
return obj;
List<KObject> objs = queyr.getResultList();
if(objs.size()<=0){
return null;
}
return objs.get(0);
}
});
}
......
......@@ -162,6 +162,7 @@ public class InzApprovalTaskDaoImpl implements InzApprovalTaskDao{
}
@Override
public List<InzApprovalTask> getApprovalTasksByPend(UUID actorId) {
return template.execute(new HibernateCallback<List<InzApprovalTask>>() {
......
package com.beecode.inz.workflow.internal.dao;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateOperations;
import org.springframework.stereotype.Repository;
import com.beecode.inz.workflow.dao.SubmitApprovalSuggestionDao;
import com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity;
@Repository
public class SubmitApprovalSuggestionDaoImpl implements SubmitApprovalSuggestionDao{
@Autowired
private HibernateOperations template;
@Override
public void addSubmitApprovalSuggestionEntity(SubmitApprovalSuggestionEntity submitApprovalSuggestionEntity) {
template.save(submitApprovalSuggestionEntity);
}
@Override
public SubmitApprovalSuggestionEntity getSubmitApprovalSuggestionByprocessInstanceId(UUID processInstanceId) {
return template.execute(session->{
String hql = " from SubmitApprovalSuggestionEntity ac where ac.processInstanceId = :processInstanceId";
List<SubmitApprovalSuggestionEntity> result = session.createQuery(hql,SubmitApprovalSuggestionEntity.class)
.setParameter("processInstanceId", processInstanceId).getResultList();
if(null == result || result.size() == 0){
return null;
}
return result.get(0);
});
}
}
package com.beecode.inz.workflow.internal.dao;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateOperations;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.inz.workflow.dao.TranspondApprovalStaffDao;
import com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity;
@Repository
public class TranspondApprovalStaffDaoImpl implements TranspondApprovalStaffDao{
@Autowired
private HibernateOperations template;
@Override
@Transactional
public void addTranspondApprovalStaffEntity(TranspondApprovalStaffEntity transpondApprovalStaffEntity) {
template.save(transpondApprovalStaffEntity);
}
@Override
public List<TranspondApprovalStaffEntity> getTranspondApprovalStaffByprocessInstanceId(UUID processInstanceId) {
return template.execute(session->{
String hql = " from TranspondApprovalStaffEntity ac where ac.processInstanceId = :processInstanceId";
List<TranspondApprovalStaffEntity> result = session.createQuery(hql,TranspondApprovalStaffEntity.class)
.setParameter("processInstanceId", processInstanceId).getResultList();
return result;
});
}
}
package com.beecode.inz.workflow.internal.dao;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.HibernateOperations;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.inz.workflow.dao.TranspondApprovalSuggestionDao;
import com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity;
@Repository
public class TranspondApprovalSuggestionDaoImpl implements TranspondApprovalSuggestionDao{
@Autowired
private HibernateOperations template;
@Override
@Transactional
public void addTranspondApprovalSuggestionEntity(
TranspondApprovalSuggestionEntity transpondApprovalSuggestionEntity) {
template.save(transpondApprovalSuggestionEntity);
}
@Override
public List<TranspondApprovalSuggestionEntity> getTranspondApprovalSuggestionByprocessInstanceId(
UUID processInstanceId) {
return template.execute(session->{
String hql = " from TranspondApprovalSuggestionEntity ac where ac.processInstanceId = :processInstanceId";
List<TranspondApprovalSuggestionEntity> result = session.createQuery(hql,TranspondApprovalSuggestionEntity.class)
.setParameter("processInstanceId", processInstanceId).getResultList();
return result;
});
}
}
package com.beecode.inz.workflow.internal.listener;
import java.time.Instant;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import com.beecode.amino.core.Amino;
import com.beecode.bap.bill.BillConstants.BillStates;
import com.beecode.bap.bill.BillConstants.MasterAttributes;
import com.beecode.bap.bill.WorkflowBillConstants.FlowAttributes;
import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.bap.workflow.listener.BizProcessEvent;
import com.beecode.bap.workflow.listener.BizProcessEventListener;
import com.beecode.bcp.type.KClass;
......@@ -52,10 +58,25 @@ public class BizProcessEventListenerImpl implements BizProcessEventListener{
String bizTypeName = process.getBizTypeName();
WorkflowConfigurationDefinition config = bizTypeWorkflowConfigurationService.getBizTypeWorkflowConfigurationByBizTypeName(bizTypeName);
Assert.notNull(config,"param 'config' must not be null");
process.setKClass(Amino.getApplicationMetadataContext().getBean(config.getBizTypeInfo().getkClassName(), KClass.class));
KClass clz = Amino.getApplicationMetadataContext().getBean(config.getBizTypeInfo().getkClassName(), KClass.class);
process.setKClass(clz);
KObject bizDataObj = commonDao.load(config.getBizTypeInfo().getkClassName(), process.getBizDataId());
if (clz.hasAttribute(InzWorkflowBiztrait.ATTR_APPROVESTATE)) {
bizDataObj.set(InzWorkflowBiztrait.ATTR_APPROVESTATE, process.getWorkflowState());
commonDao.update(bizDataObj);
}
if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_STAE)) {
bizDataObj.set(FlowAttributes.ATTR_FLOW_STAE, process.getWorkflowState());
if (process.getWorkflowState() == BizProcessState.DONE_WITH_AGREE.getValue()) {
bizDataObj.set(MasterAttributes.ATTR_BILL_STATE, BillStates.SUCCESS);
} else if (process.getWorkflowState() == BizProcessState.DONE_WITH_REJECT.getValue()) {
bizDataObj.set(MasterAttributes.ATTR_BILL_STATE, BillStates.REJECTED);
}
commonDao.update(bizDataObj);
}
if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_FINISH_TIME)) {
bizDataObj.set(FlowAttributes.ATTR_FLOW_FINISH_TIME, Instant.now());
}
process.setBizDataObject(bizDataObj);
if(null == config.getProcessConfiguration()){
return;
......
package com.beecode.inz.workflow.internal.scene;
import javax.persistence.criteria.CriteriaBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bap.staff.BapContext;
import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.inz.query.scene.SceneExecuteContext;
import com.beecode.inz.query.scene.SceneExecutor;
......@@ -12,19 +7,19 @@ import com.beecode.inz.workflow.entity.InzBizProcess;
public class FinishedProcess implements SceneExecutor{
@Autowired
private BapContext bapContext;
// @Autowired
// private BapContext bapContext;
@Override
public void execute(SceneExecuteContext context) {
CriteriaBuilder builder = context.getCriteriaBuilder();
// 为查询添加新条件
try {
context.getCriteriaQuery().and(builder.equal(context.getRoot().get(InzBizProcess.ATTR_SUBMITTER).get("id"), bapContext.getCurrentStaff().getUuid("id")));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
// CriteriaBuilder builder = context.getCriteriaBuilder();
// // 为查询添加新条件
// try {
// context.getCriteriaQuery().and(builder.equal(context.getRoot().get(InzBizProcess.ATTR_SUBMITTER).get("id"), bapContext.getCurrentStaff().getUuid("id")));
// } catch (Exception e) {
// e.printStackTrace();
// throw new RuntimeException(e);
// }
context.getCriteriaQuery().and(context.getRoot().get(InzBizProcess.ATTR_WORKFLOWSTATE).in(BizProcessState.DONE_WITH_AGREE.getValue(),BizProcessState.DONE_WITH_REJECT.getValue()));
}
......
......@@ -47,8 +47,10 @@ public class ToDoTask implements SceneExecutor{
Predicate p1 = context.getCriteriaBuilder().equal(context.getRoot().get("id"), subRoot.get("task").get("id"));
UUID staffId = null;
UUID userId = null;
try {
staffId = bapContext.getCurrentStaff().getUuid("id");
userId = bapContext.getCurrentUser().getId();
} catch (AttributeNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
......@@ -62,6 +64,9 @@ public class ToDoTask implements SceneExecutor{
if(null == staffId){
throw new RuntimeException("获取当前登录职员失败");
}
if(null == userId){
throw new RuntimeException("获取当前登录用户失败");
}
Predicate p2 = context.getCriteriaBuilder().equal(subRoot.get(User.ACTOR_ID), staffId);
subQuery.where(context.getCriteriaBuilder().and(p1,p2));
......
......@@ -2,9 +2,6 @@ package com.beecode.inz.workflow.internal.scene;
import javax.persistence.criteria.CriteriaBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bap.staff.BapContext;
import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.inz.query.scene.SceneExecuteContext;
import com.beecode.inz.query.scene.SceneExecutor;
......@@ -12,19 +9,19 @@ import com.beecode.inz.workflow.entity.InzBizProcess;
public class UnderwayProcess implements SceneExecutor{
@Autowired
private BapContext bapContext;
// @Autowired
// private BapContext bapContext;
@Override
public void execute(SceneExecuteContext context) {
CriteriaBuilder builder = context.getCriteriaBuilder();
// 为查询添加新条件
try {
context.getCriteriaQuery().and(builder.equal(context.getRoot().get(InzBizProcess.ATTR_SUBMITTER).get("id"), bapContext.getCurrentStaff().getUuid("id")));
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
// // 为查询添加新条件
// try {
// context.getCriteriaQuery().and(builder.equal(context.getRoot().get(InzBizProcess.ATTR_SUBMITTER).get("id"), bapContext.getCurrentStaff().getUuid("id")));
// } catch (Exception e) {
// e.printStackTrace();
// throw new RuntimeException(e);
// }
context.getCriteriaQuery().and(builder.equal(context.getRoot().get(InzBizProcess.ATTR_WORKFLOWSTATE), BizProcessState.IN_PROCESS.getValue()));
}
......
package com.beecode.inz.workflow.internal.service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.json.JSONArray;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.bap.staff.BapContext;
import com.beecode.bap.staff.service.StaffService;
import com.beecode.bcp.task.oa.dao.OaMessageDao;
import com.beecode.bcp.task.oa.entity.OaMessageEntity;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.workflow.dao.ApprovalCopyDao;
import com.beecode.inz.workflow.dao.TranspondApprovalSuggestionDao;
import com.beecode.inz.workflow.entity.ApprovalCopyEntity;
import com.beecode.inz.workflow.entity.InzBizProcess;
import com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity;
import com.beecode.inz.workflow.service.ApprovalCopyService;
import com.beecode.inz.workflow.service.InzBizProcessService;
@Service
public class ApprovalCopyServiceImpl implements ApprovalCopyService{
@Autowired
private StaffService staffService;
@Autowired
private OaMessageDao oaMessageDao;
@Autowired
private BapContext bapContext;
@Autowired
private InzBizProcessService inzBizProcessService;
@Autowired
private ApprovalCopyDao approvalCopyDao;
@Autowired
private TranspondApprovalSuggestionDao transpondApprovalSuggestionDao;
@Override
@Transactional
public void approvalCopy(UUID bizProcessId, String actors) {
InzBizProcess inzBizProcess = inzBizProcessService.getBizProcessById(bizProcessId);
ApprovalCopyEntity approvalCopyEntity = new ApprovalCopyEntity();
approvalCopyEntity.setProcessInstanceId(inzBizProcess.getProcessInstance().getId());
approvalCopyEntity.setStaffJson(actors);
approvalCopyDao.addApprovalCopy(approvalCopyEntity);
}
@Override
@Transactional
public void completedApprovalCopy(UUID processInstanceId,String suggestion) {
UUID actorId = null;
try {
actorId = bapContext.getCurrentStaff().getUuid("id");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
TranspondApprovalSuggestionEntity transpondApprovalSuggestionEntity = new TranspondApprovalSuggestionEntity();
transpondApprovalSuggestionEntity.setFinishTime(new Date());
transpondApprovalSuggestionEntity.setOperation(TranspondApprovalSuggestionEntity.operationType.receive);
transpondApprovalSuggestionEntity.setSubmitId(actorId);
if(suggestion != null ){
transpondApprovalSuggestionEntity.setSuggestion(suggestion);
}
transpondApprovalSuggestionEntity.setProcessInstanceId(processInstanceId);
transpondApprovalSuggestionDao.addTranspondApprovalSuggestionEntity(transpondApprovalSuggestionEntity);
KObject staff = staffService.getById(actorId);
String flowId = processInstanceId.toString();
String userId = staff.get("user").getString("username");
OaMessageEntity oaMessageEntity = oaMessageDao.getOaMessageByFlowMessAndByFlowIdAndUserId(1, flowId, userId);
if(oaMessageEntity != null){
OaMessageEntity oaMessageEntity1 = new OaMessageEntity();
BeanUtils.copyProperties(oaMessageEntity, oaMessageEntity1);
oaMessageEntity1.setPtpUrl(oaMessageEntity.getPtpUrl()+"&show=false");
oaMessageEntity1.setMessageId(null);
oaMessageEntity1.setFlowMess(2);
oaMessageEntity1.setStatus(0);
oaMessageEntity1.setOperateTime(new Date());
// oaMessageEntity.setFlowMess(2);
// oaMessageEntity.setOperateTime(new Date());
// oaMessageDao.updateOaMessage(oaMessageEntity);
oaMessageDao.addOaMessage(oaMessageEntity1);
}
}
@Override
public ApprovalCopyEntity getApprovalCopyByprocessInstanceId(UUID processInstanceId) {
return approvalCopyDao.getApprovalCopyByprocessInstanceId(processInstanceId);
}
@Override
@Transactional
public void addApprovalCopy(ApprovalCopyEntity approvalCopyEntity) {
approvalCopyDao.addApprovalCopy(approvalCopyEntity);
}
@Override
public List<KObject> getApprovalCopyStaffByprocessInstanceId(UUID processInstanceId) {
List<KObject> kObjects = new ArrayList<>();
ApprovalCopyEntity approvalCopyEntity = approvalCopyDao.getApprovalCopyByprocessInstanceId(processInstanceId);
if(approvalCopyEntity != null ){
JSONArray jsonArray = new JSONArray(approvalCopyEntity.getStaffJson());
for(int i = 0; i<jsonArray.length();i++){
UUID actorId = UUID.fromString(jsonArray.getString(i));
KObject staff = staffService.getById(actorId);
kObjects.add(staff);
}
}
return kObjects;
}
}
package com.beecode.inz.workflow.internal.service;
import java.util.Date;
import java.util.UUID;
import org.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.bap.staff.service.StaffService;
import com.beecode.bap.workflow.dao.CommonTaskDao;
import com.beecode.bcp.task.core.Task;
import com.beecode.bcp.task.define.TaskDefinition;
import com.beecode.bcp.task.oa.dao.OaMessageDao;
import com.beecode.bcp.task.oa.entity.OaMessageEntity;
import com.beecode.bcp.task.service.TaskDefinitionService;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.workflow.dao.ApprovalCopyDao;
import com.beecode.inz.workflow.dao.TranspondApprovalStaffDao;
import com.beecode.inz.workflow.entity.ApprovalCopyEntity;
import com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity;
import com.beecode.inz.workflow.service.ApprovalSendCopyService;
import com.beecode.inz.workflow.util.InzApprovalTaskConstants;
@Service
public class ApprovalSendCopyServiceImpl implements ApprovalSendCopyService{
@Autowired
private TaskDefinitionService taskDefinitionService;
@Autowired
private CommonTaskDao bizTaskDao;
@Autowired
private ApprovalCopyDao approvalCopyDao;
@Autowired
private StaffService staffService;
@Autowired
private OaMessageDao oaMessageDao;
@Autowired
private TranspondApprovalStaffDao transpondApprovalStaffDao;
@Override
@Transactional
public void sendApprovalCopy(UUID taskId,int result) {
TaskDefinition taskDefinition = taskDefinitionService.getByName(InzApprovalTaskConstants.TASK_DEFINITION_NAME);
KClass taskClass = taskDefinition.getKClass();
KObject taskObject = bizTaskDao.getTask(taskClass, taskId);
int processInstanceState = taskObject.get("processInstance").getInt("processState");
if(result == 1 && processInstanceState == 2){
ApprovalCopyEntity approvalCopyEntity = approvalCopyDao.getApprovalCopyByprocessInstanceId(taskObject.get("processInstance").getUuid("id"));
if( approvalCopyEntity != null ){
JSONArray jsonArray = new JSONArray(approvalCopyEntity.getStaffJson());
for(int i = 0; i<jsonArray.length();i++){
UUID actorId = UUID.fromString(jsonArray.getString(i));
KObject staff = staffService.getById(actorId);
String bizObjectName = taskObject.getString("bizObjectName");
String[] names = bizObjectName.split("-");
OaMessageEntity oaMessageEntity = new OaMessageEntity();
oaMessageEntity.setSender("宝贝王系统");
oaMessageEntity.setSenderTime(new Date());
if(names.length>0){
oaMessageEntity.setFlowType(names[0]);
}else{
oaMessageEntity.setFlowType(taskObject.getString(Task.BIZ_TYPE_NAME));
}
oaMessageEntity.setFlowId(taskObject.get("processInstance").getUuid("id").toString());
oaMessageEntity.setTitle(bizObjectName.replaceAll("-", " "));
oaMessageEntity.setNodeName(taskObject.get("workItem").getString("workItemName"));
String url = "/app/ApprovalCopy?bizTypeName="+taskObject.getString(Task.BIZ_TYPE_NAME)+"&bizDataId="+taskObject.getUuid("bizDataId").toString()+"&show=true&type=copy";
oaMessageEntity.setPtpUrl(url);
oaMessageEntity.setUserId(staff.get("user").getString("username"));
oaMessageEntity.setCreator(taskObject.get("bizProcess").get("submitter").get("user").getString("username"));
oaMessageEntity.setCreateTime(taskObject.get("processInstance").getDate("startTime"));
oaMessageEntity.setOperateTime(new Date());
oaMessageEntity.setFlowMess(1);
oaMessageEntity.setViewType(0);
oaMessageEntity.setStatus(0);
oaMessageEntity.setErrorCount(0);
oaMessageEntity.setMessageCreateTime(new Date());
oaMessageEntity.setAllowMobile(0);
oaMessageEntity.setSenderCode("fb77aaf5-ad40-4307-9ca6-2e1cbd29ffee");
oaMessageEntity.setTemp1(taskObject.get("processInstance").getUuid("id").toString());
oaMessageDao.addOaMessage(oaMessageEntity);
}
TranspondApprovalStaffEntity transpondApprovalStaffEntity = new TranspondApprovalStaffEntity();
transpondApprovalStaffEntity.setFinishTime(new Date());
transpondApprovalStaffEntity.setOperation(TranspondApprovalStaffEntity.operationType.copy);
transpondApprovalStaffEntity.setSubmitId(taskObject.get("bizProcess").get("submitter").getUuid("id"));
transpondApprovalStaffEntity.setProcessInstanceId(taskObject.get("processInstance").getUuid("id"));
transpondApprovalStaffEntity.setStaffJson(approvalCopyEntity.getStaffJson());
transpondApprovalStaffDao.addTranspondApprovalStaffEntity(transpondApprovalStaffEntity);
}
}
}
}
package com.beecode.inz.workflow.internal.service;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.bap.staff.BapContext;
import com.beecode.bap.staff.service.StaffService;
import com.beecode.bcp.task.core.Task;
import com.beecode.bcp.task.oa.dao.OaMessageDao;
import com.beecode.bcp.task.oa.entity.OaMessageEntity;
import com.beecode.bcp.task.service.TaskService;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.workflow.dao.TranspondApprovalStaffDao;
import com.beecode.inz.workflow.dao.TranspondApprovalSuggestionDao;
import com.beecode.inz.workflow.entity.InzBizProcess;
import com.beecode.inz.workflow.entity.TranspondApprovalStaffEntity;
import com.beecode.inz.workflow.entity.TranspondApprovalSuggestionEntity;
import com.beecode.inz.workflow.service.ApprovalTranspondService;
import com.beecode.inz.workflow.service.InzBizProcessService;
import com.beecode.inz.workflow.service.InzWorkflowService;
@Service
public class ApprovalTranspondServiceImpl implements ApprovalTranspondService{
@Autowired
private TaskService taskService;
@Autowired
private StaffService staffService;
@Autowired
private OaMessageDao oaMessageDao;
@Autowired
private BapContext bapContext;
@Autowired
private InzBizProcessService inzBizProcessService;
@Autowired
private InzWorkflowService inzWorkflowService;
@Autowired
private TranspondApprovalSuggestionDao transpondApprovalSuggestionDao;
@Autowired
private TranspondApprovalStaffDao transpondApprovalStaffDao;
@Override
@Transactional
public void approvalTranspond(UUID bizProcessId, List<UUID> actorIds,String type,String url_,String suggestion) {
UUID loginActorId = null;
try {
loginActorId = bapContext.getCurrentStaff().getUuid("id");
} catch (Exception e1) {
e1.printStackTrace();
}
InzBizProcess inzBizProcess = inzBizProcessService.getBizProcessById(bizProcessId);
if("transpondOneself".equals(type) || "transpondReject".equals(type)){
actorIds.add(inzBizProcess.getSubmitter().getUuid("id"));
}else{
TranspondApprovalStaffEntity transpondApprovalStaffEntity = new TranspondApprovalStaffEntity();
transpondApprovalStaffEntity.setFinishTime(new Date());
transpondApprovalStaffEntity.setOperation(TranspondApprovalStaffEntity.operationType.transpond);
transpondApprovalStaffEntity.setSubmitId(loginActorId);
transpondApprovalStaffEntity.setProcessInstanceId(inzBizProcess.getProcessInstance().getId());
transpondApprovalStaffEntity.setStaffJson(actorIds.toString());
transpondApprovalStaffEntity.setSuggestion(suggestion);
transpondApprovalStaffDao.addTranspondApprovalStaffEntity(transpondApprovalStaffEntity);
}
for(UUID actorId : actorIds){
List<KObject> tasks = taskService.listTaskByProcessInstanceId(inzBizProcess.getProcessInstance().getId());
if(tasks.size() > 0){
KObject taskObject = tasks.get(0);
String bizObjectName = taskObject.getString("bizObjectName");
String[] names = bizObjectName.split("-");
KObject staff = staffService.getById(actorId);
OaMessageEntity oaMessageEntity = new OaMessageEntity();
oaMessageEntity.setSender("宝贝王系统");
oaMessageEntity.setSenderTime(new Date());
if(names.length>0){
oaMessageEntity.setFlowType(names[0]);
}else{
oaMessageEntity.setFlowType(taskObject.getString(Task.BIZ_TYPE_NAME));
}
oaMessageEntity.setFlowId(taskObject.get("processInstance").getUuid("id").toString());
oaMessageEntity.setTitle(bizObjectName.replaceAll("-", " "));
oaMessageEntity.setNodeName(taskObject.get("workItem").getString("workItemName"));
String url = null;
if("transpondReject".equals(type)){
url = url_;
}else{
url = "/app/ApprovalCopy?bizTypeName="+taskObject.getString(Task.BIZ_TYPE_NAME)+"&bizDataId="+taskObject.getUuid("bizDataId").toString()+"&show=true&type=transpond";
}
oaMessageEntity.setPtpUrl(url);
oaMessageEntity.setUserId(staff.get("user").getString("username"));
oaMessageEntity.setCreator(taskObject.get("bizProcess").get("submitter").get("user").getString("username"));
oaMessageEntity.setCreateTime(taskObject.get("processInstance").getDate("startTime"));
oaMessageEntity.setOperateTime(new Date());
oaMessageEntity.setFlowMess(1);
oaMessageEntity.setViewType(0);
oaMessageEntity.setStatus(0);
oaMessageEntity.setErrorCount(0);
oaMessageEntity.setMessageCreateTime(new Date());
oaMessageEntity.setAllowMobile(0);
oaMessageEntity.setSenderCode("fb77aaf5-ad40-4307-9ca6-2e1cbd29ffee");
oaMessageEntity.setTemp1(taskObject.get("processInstance").getUuid("id").toString());
oaMessageDao.addOaMessage(oaMessageEntity);
}
}
}
@Override
@Transactional
public void completedApprovalTranspond(UUID processInstanceId,String suggestion) {
UUID actorId = null;
try {
actorId = bapContext.getCurrentStaff().getUuid("id");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
TranspondApprovalSuggestionEntity transpondApprovalSuggestionEntity = new TranspondApprovalSuggestionEntity();
if(suggestion != null ){
transpondApprovalSuggestionEntity.setSuggestion(suggestion);
}
transpondApprovalSuggestionEntity.setFinishTime(new Date());
transpondApprovalSuggestionEntity.setOperation(TranspondApprovalSuggestionEntity.operationType.receive);
transpondApprovalSuggestionEntity.setSubmitId(actorId);
transpondApprovalSuggestionEntity.setProcessInstanceId(processInstanceId);
transpondApprovalSuggestionDao.addTranspondApprovalSuggestionEntity(transpondApprovalSuggestionEntity);
KObject staff = staffService.getById(actorId);
String flowId = processInstanceId.toString();
String userId = staff.get("user").getString("username");
OaMessageEntity oaMessageEntity = oaMessageDao.getOaMessageByFlowMessAndByFlowIdAndUserId(1, flowId, userId);
if(oaMessageEntity != null){
OaMessageEntity oaMessageEntity1 = new OaMessageEntity();
BeanUtils.copyProperties(oaMessageEntity, oaMessageEntity1);
oaMessageEntity1.setPtpUrl(oaMessageEntity.getPtpUrl()+"&show=false");
oaMessageEntity1.setMessageId(null);
oaMessageEntity1.setFlowMess(2);
oaMessageEntity1.setStatus(0);
oaMessageEntity1.setOperateTime(new Date());
// oaMessageEntity.setFlowMess(2);
// oaMessageEntity.setOperateTime(new Date());
// oaMessageDao.updateOaMessage(oaMessageEntity);
oaMessageDao.addOaMessage(oaMessageEntity1);
}
}
@Override
public void startAutoCompleteApproval(UUID bizProcessId) {
InzBizProcess inzBizProcess = inzBizProcessService.getBizProcessById(bizProcessId);
inzWorkflowService.startAutoCompleteWorkflow(inzBizProcess.getProcessInstance());
}
@Override
@Transactional
public void approvalTranspond(UUID bizProcessId,UUID loginActorId,List<UUID> actorIds, String suggestion) {
InzBizProcess inzBizProcess = inzBizProcessService.getBizProcessById(bizProcessId);
TranspondApprovalStaffEntity transpondApprovalStaffEntity = new TranspondApprovalStaffEntity();
transpondApprovalStaffEntity.setFinishTime(new Date());
transpondApprovalStaffEntity.setOperation(TranspondApprovalStaffEntity.operationType.transpond);
transpondApprovalStaffEntity.setSubmitId(loginActorId);
transpondApprovalStaffEntity.setProcessInstanceId(inzBizProcess.getProcessInstance().getId());
transpondApprovalStaffEntity.setStaffJson(actorIds.toString());
transpondApprovalStaffEntity.setSuggestion(suggestion);
transpondApprovalStaffDao.addTranspondApprovalStaffEntity(transpondApprovalStaffEntity);
for(UUID actorId : actorIds){
List<KObject> tasks = taskService.listTaskByProcessInstanceId(inzBizProcess.getProcessInstance().getId());
if(tasks.size() > 0){
KObject taskObject = tasks.get(0);
String bizObjectName = taskObject.getString("bizObjectName");
String[] names = bizObjectName.split("-");
KObject staff = staffService.getById(actorId);
OaMessageEntity oaMessageEntity = new OaMessageEntity();
oaMessageEntity.setSender("宝贝王系统");
oaMessageEntity.setSenderTime(new Date());
if(names.length>0){
oaMessageEntity.setFlowType(names[0]);
}else{
oaMessageEntity.setFlowType(taskObject.getString(Task.BIZ_TYPE_NAME));
}
oaMessageEntity.setFlowId(taskObject.get("processInstance").getUuid("id").toString());
oaMessageEntity.setTitle(bizObjectName.replaceAll("-", " "));
oaMessageEntity.setNodeName(taskObject.get("workItem").getString("workItemName"));
String url = null;
url = "/app/ApprovalCopy?bizTypeName="+taskObject.getString(Task.BIZ_TYPE_NAME)+"&bizDataId="+taskObject.getUuid("bizDataId").toString()+"&show=true&type=transpond";
oaMessageEntity.setPtpUrl(url);
oaMessageEntity.setUserId(staff.get("user").getString("username"));
oaMessageEntity.setCreator(taskObject.get("bizProcess").get("submitter").get("user").getString("username"));
oaMessageEntity.setCreateTime(taskObject.get("processInstance").getDate("startTime"));
oaMessageEntity.setOperateTime(new Date());
oaMessageEntity.setFlowMess(1);
oaMessageEntity.setViewType(0);
oaMessageEntity.setStatus(0);
oaMessageEntity.setErrorCount(0);
oaMessageEntity.setMessageCreateTime(new Date());
oaMessageEntity.setAllowMobile(0);
oaMessageEntity.setSenderCode("fb77aaf5-ad40-4307-9ca6-2e1cbd29ffee");
oaMessageEntity.setTemp1(taskObject.get("processInstance").getUuid("id").toString());
oaMessageDao.addOaMessage(oaMessageEntity);
}
}
}
}
......@@ -5,8 +5,6 @@ import java.util.Date;
import java.util.List;
import java.util.UUID;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
......@@ -73,35 +71,23 @@ public class FlowChartInfoServiceImpl implements FlowChartInfoService{
submitActor.setActorId(inzBizProcess.getSubmitter().getUuid("id"));
nodes.add(generateStartNode(triggerAction, submitActor, startTime));
String origionDefinition = workflow.getOriginalDefinition();
JSONObject origionDefinitionJson = new JSONObject(origionDefinition);
JSONArray nodeArray = origionDefinitionJson.getJSONArray("tasks");
List<InzApprovalTask> allTask = new ArrayList<>();
allTask.addAll( inzApprovalTaskService.listApprovedTask(inzBizProcess.getProcessInstance().getId()));
allTask.addAll( inzApprovalTaskService.listToDoTask(inzBizProcess.getProcessInstance().getId()));
allTask = inzApprovalTaskService.generateParenChildRelation(allTask);
for(int i = 0 ; i < nodeArray.length() ; i++){
String nodeId = nodeArray.getJSONObject(i).getString("id");
String name = nodeArray.getJSONObject(i).getString("name");
String type = nodeArray.getJSONObject(i).getString("type");
List<InzApprovalTask> tempTasks = new ArrayList<>();
for(InzApprovalTask task : allTask){
if(nodeId.equals(task.getWorkItem().getNodeId())){
tempTasks.add(task);
}
}
if(tempTasks.size() == 0){
continue;
}
boolean last = false;
if(i == nodeArray.length() -1 ){
last = true;
}
nodes.add(generateNodeInfo(nodeId,name,type, last,tempTasks));
for(int i = 0 , length = allTask.size() ; i < length ;i++) {
String nodeId = allTask.get(i).getWorkItem().getNodeId();
String name = allTask.get(i).getWorkItem().getWorkItemName();
// ExtensionNode extensionNode = allTask.get(i).getWorkItem().getTaskNode().getExtensionNode();
String type = "userTask";
// if(extensionNode instanceof UserTaskNode) {
// type = ((UserTaskNode)extensionNode).getTaskType();
// }
List<InzApprovalTask> tempTasks = new ArrayList<InzApprovalTask>();
tempTasks.add(allTask.get(i));
nodes.add(generateNodeInfo(nodeId,name,type, false,tempTasks));
}
return chartInfo;
}
......
......@@ -7,24 +7,33 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.beecode.bap.staff.BapContext;
import com.beecode.bap.workflow.dao.CommonTaskDao;
import com.beecode.bap.workflow.service.BizProcessService;
import com.beecode.bap.workflow.service.BizTaskService;
import com.beecode.bcp.task.assignment.Actor;
import com.beecode.bcp.task.core.Task;
import com.beecode.bcp.task.core.TaskState;
import com.beecode.bcp.task.define.TaskDefinition;
import com.beecode.bcp.task.service.TaskDefinitionService;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.workflow.core.ProcessInstance;
import com.beecode.bcp.workflow.core.WorkItem;
import com.beecode.bcp.workflow.exception.ParticipantNotFoundException;
import com.beecode.bcp.workflow.exception.WorkflowRuntimeException;
import com.beecode.bcp.workflow.task.core.WorkflowTask;
import com.beecode.inz.workflow.dao.CommonDao;
import com.beecode.inz.workflow.dao.InzApprovalTaskDao;
import com.beecode.inz.workflow.entity.InzApprovalTask;
import com.beecode.inz.workflow.exception.WorkflowExceptionCode;
import com.beecode.inz.workflow.service.ApprovalSendCopyService;
import com.beecode.inz.workflow.service.InzApprovalTaskService;
import com.beecode.inz.workflow.util.InzApprovalTaskConstants;
@Service
......@@ -42,11 +51,19 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
private InzApprovalTaskDao inzApprovalTaskDao;
@Autowired
private BizProcessService bizProcessService;
@Autowired
private CommonDao commonDao;
@Autowired
private TaskDefinitionService taskDefinitionService;
@Autowired
private ApprovalSendCopyService approvalSendCopyService;
@Autowired
private CommonTaskDao bizTaskDao;
public List<InzApprovalTask> generateParenChildRelation(List<InzApprovalTask> tasks){
Map<UUID,InzApprovalTask> parentMap = new HashMap<>();
......@@ -58,20 +75,18 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
if(null == parent){
parent = (InzApprovalTask) task.geParent();
parentMap.put(parent.getId(), parent);
List<Task> children = new ArrayList<Task>();
parent.setChildren(children);
}else if(null == parent.getChildren()){
List<Task> children = new ArrayList<Task>();
parent.setChildren(children);
}
parent.getChildren().add(task);
parent.addChildren(task);
}
};
List<InzApprovalTask> result = new ArrayList<>(parentMap.values());
List<InzApprovalTask> result = new ArrayList<InzApprovalTask>(parentMap.values());
result.sort(new Comparator<Task>() {
@Override
public int compare(Task task1, Task task2) {
return task1.getStartTime().compareTo(task2.getStartTime());
}
});
for(InzApprovalTask task : result){
if(null == task.getChildren() || task.getChildren().isEmpty()){
continue;
......@@ -100,6 +115,12 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
@Override
public void completeTask(UUID taskId, int result, String suggestions) {
completeTask(taskId, result, suggestions, null,null);
}
@Override
public void completeTask(UUID taskId, int result, String suggestions,Map<String,String> argus,String attribute1) {
// TaskDefinition taskDefinition = Amino.getApplicationMetadataContext().getBean(InzApprovalTaskConstants.TASK_DEFINITION_NAME, TaskDefinition.class);
TaskDefinition taskDefinition = taskDefinitionService.getByName(InzApprovalTaskConstants.TASK_DEFINITION_NAME);
UUID actorId = null;
try {
......@@ -109,7 +130,25 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
e1.printStackTrace();
}
try {
bizTaskService.completeTask(taskDefinition, taskId,actorId , result, suggestions);
KClass taskClass = taskDefinition.getKClass();
KObject object = bizTaskDao.getTask(taskClass, taskId);
ProcessInstance processInstance = new ProcessInstance(object.get(WorkflowTask.PROCESSINSTANCE));
String nodeId = object.get(WorkflowTask.WORKITEM).getString(WorkItem.ATTR_NODEID);
String nodeParam = null;
if(nodeId.contains("-")){
nodeParam = "n_"+String.valueOf(nodeId).replaceAll("-", "n")+"_staffs";
}else{
nodeParam = "n_"+nodeId+"_staffs";
}
Object nodeInfo = processInstance.getParameterValue(nodeParam);
if(nodeInfo != null && !nodeInfo.toString().equals("")){
argus.put(nodeParam, nodeInfo.toString());
}
if(null != attribute1){
argus.put("attribute1", attribute1);
}
bizTaskService.completeTask(taskDefinition, taskId,actorId , result, suggestions,argus);
approvalSendCopyService.sendApprovalCopy(taskId,result);
} catch (ParticipantNotFoundException e) {
logger.error("ParticipantNotFoundException", e);
throw new WorkflowRuntimeException(WorkflowExceptionCode.PARTICIPANT_NOTFOUND_EXCEPTION);
......@@ -131,12 +170,24 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
@Override
public List<InzApprovalTask> listToDoTask(UUID processInstanceId) {
try {
final UUID staffId = bapContext.getCurrentStaff().getUuid("id");
// final UUID staffId = bapContext.getCurrentStaff().getUuid("id");
KObject key = bapContext.getCurrentStaff();
UUID keyId = null;
if(null != key){
keyId = key.getUuid("id");
}else{
try{
keyId = bapContext.getCurrentUser().getId();
}catch(Exception e){
logger.info("获取待办任务列表时,没有当前登录用户,暂时给随机值");
keyId = UUID.randomUUID();
}
}
List<InzApprovalTask> tasks = inzApprovalTaskDao.listToDoTask(processInstanceId);
if(null == tasks || tasks.size() == 0){
return new ArrayList<>();
}
generateCanApprove(tasks, staffId);
generateCanApprove(tasks, keyId);
return tasks;
} catch (Exception e) {
e.printStackTrace();
......@@ -182,17 +233,28 @@ public class InzApprovalTaskServiceImpl implements InzApprovalTaskService{
}
@Override
public List<InzApprovalTask> getApprovalTasksByPend() {
UUID actorId = null;
try {
actorId = bapContext.getCurrentStaff().getUuid("id");
List<InzApprovalTask> tasks = inzApprovalTaskDao.getApprovalTasksByPend(actorId);
generateCanApprove(tasks, actorId);
return tasks;
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
public JSONObject getLastTaskByBizDataId(UUID bizDataId) {
List<KObject> kObjects = bizProcessService.listBizProcessKObject(bizDataId);
if(null == kObjects || kObjects.size() == 0){
return null;
}
kObjects.sort((a, b) -> b.getDate("submitTime").after(a.getDate("submitTime"))?1:-1);
KObject lastOne = kObjects.get(0);
KObject processInstance = lastOne.get("processInstance");
List<InzApprovalTask> tasks = listApprovedTask(processInstance.getUuid("id"));
InzApprovalTask key = tasks.size()>0?tasks.get(tasks.size()-1):null;
JSONObject result = new JSONObject();
int resultState = lastOne.getInt("workflowState");
result.put("workflowState", resultState);
if(key == null){
result.put("taskResult","1");
result.put("suggestion","同意");
}else{
result.put("taskResult",key.getResult());
result.put("suggestion",key.getSuggestion());
}
return result;
}
}
......@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.beecode.bap.workflow.core.BizProcess;
import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.bap.workflow.service.BizProcessService;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.workflow.entity.InzBizProcess;
......@@ -46,5 +47,16 @@ public class InzBizProcessServiceImpl implements InzBizProcessService {
return kObjects.stream().map(InzBizProcess::new).collect(Collectors.toList());
}
@Override
public List<InzBizProcess> listBizProcessByBizDataIdAndStateAndNoProcessInstanceId(UUID bizDataId, BizProcessState bizProcessState,
UUID processInstanceId) {
List<KObject> kObjects = bizProcessService.listBizProcessByBizDataIdAndStateAndNoProcessInstanceId(bizDataId, bizProcessState, processInstanceId);
if(null == kObjects || kObjects.size() == 0){
return new ArrayList<>();
}
return kObjects.stream().map(InzBizProcess::new).collect(Collectors.toList());
}
}
......@@ -68,9 +68,9 @@ public class InzWorkflowDefinitionServiceImpl implements InzWorkflowDefinitionSe
String bizTypeName = definitionContent.getJSONObject(InzWorkflowDefinition.WORKFLOW_CONFIG).getJSONObject("triggerCondition").getString("bizTypeName");
kObject.set(InzWorkflowDefinition.ATTR_BIZTYPE_NAME, bizTypeName);
String workflowDefinitionName = (kObject.getString(InzWorkflowDefinition.ATTR_BIZTYPE_NAME) + "_workflow_definition"+"_"+UUID.randomUUID().toString()).toUpperCase();
JSONObject bpmnJson = WorkflowGenerator.getWorkflow(workflowDefinitionName, definitionContent.getJSONArray("tasks"));
//String workflowDefinitionName = (kObject.getString(InzWorkflowDefinition.ATTR_BIZTYPE_NAME) + "_workflow_definition"+"_"+UUID.randomUUID().toString()).toUpperCase();
//JSONObject bpmnJson = WorkflowGenerator.getWorkflow(workflowDefinitionName, definitionContent.getJSONArray("tasks"));
JSONObject bpmnJson = WorkflowGenerator.getWorkflow(kObject);
WorkflowObj workflowObj = null;
try {
workflowObj = objectMapper.readValue(bpmnJson.toString(), WorkflowObj.class);
......@@ -135,9 +135,10 @@ public class InzWorkflowDefinitionServiceImpl implements InzWorkflowDefinitionSe
KObject kObject = definition.toKObject();
kObject.set(InzWorkflowDefinition.ATTR_DEFINITION_STATE, InzWorkflowDefinitionStateEnum.ENABLED.getValue());
JSONObject definitionContent = new JSONObject(kObject.getString(InzWorkflowDefinition.ATTR_DEFINITION_CONTENT));
String workflowDefinitionName = kObject.getString(InzWorkflowDefinition.ATTR_NAME);
JSONObject bpmnJson = WorkflowGenerator.getWorkflow(workflowDefinitionName, definitionContent.getJSONArray("tasks"));
// JSONObject definitionContent = new JSONObject(kObject.getString(InzWorkflowDefinition.ATTR_DEFINITION_CONTENT));
//String workflowDefinitionName = kObject.getString(InzWorkflowDefinition.ATTR_NAME);
// JSONObject bpmnJson = WorkflowGenerator.getWorkflow(workflowDefinitionName, definitionContent.getJSONArray("tasks"));
JSONObject bpmnJson = WorkflowGenerator.getWorkflow(kObject);
WorkflowObj workflowObj = null;
try {
workflowObj = objectMapper.readValue(bpmnJson.toString(), WorkflowObj.class);
......@@ -151,12 +152,12 @@ public class InzWorkflowDefinitionServiceImpl implements InzWorkflowDefinitionSe
extendData.put("workflowDefinitionId", kObject.getUuid("id").toString());
workflowDefinitionService.updateWorkflowDefinition(workflowObj,kObject);
if(!deploymentService.isDeployed(definition)){//未发布,需要执行发布
//if(!deploymentService.isDeployed(definition)){//未发布,需要执行发布
Workflow workflow = deploymentService.deploy(definition);
if(null != workflow){
extendData.put("workflowId", workflow.getId());
}
}
//}
KObject log = logKClass.newInstance();
log.set("module",LOG_MODULE);
log.set("businessObjectId",kObject.getUuid("id").toString());
......
package com.beecode.inz.workflow.internal.service;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.inz.workflow.dao.SubmitApprovalSuggestionDao;
import com.beecode.inz.workflow.entity.InzBizProcess;
import com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity;
import com.beecode.inz.workflow.service.InzBizProcessService;
import com.beecode.inz.workflow.service.SubmitApprovalSuggestionService;
@Service
public class SubmitApprovalSuggestionServiceImpl implements SubmitApprovalSuggestionService{
@Autowired
private SubmitApprovalSuggestionDao submitApprovalSuggestionDao;
@Autowired
private InzBizProcessService inzBizProcessService;
@Override
@Transactional
public void addSubmitApprovalSuggestion(UUID bizProcessId,String suggestion) {
InzBizProcess inzBizProcess = inzBizProcessService.getBizProcessById(bizProcessId);
SubmitApprovalSuggestionEntity submitApprovalSuggestionEntity = new SubmitApprovalSuggestionEntity();
submitApprovalSuggestionEntity.setSuggestion(suggestion);
submitApprovalSuggestionEntity.setProcessInstanceId(inzBizProcess.getProcessInstance().getId());
submitApprovalSuggestionDao.addSubmitApprovalSuggestionEntity(submitApprovalSuggestionEntity);
}
@Override
public SubmitApprovalSuggestionEntity getSubmitApprovalSuggestionByprocessInstanceId(UUID processInstanceId) {
return submitApprovalSuggestionDao.getSubmitApprovalSuggestionByprocessInstanceId(processInstanceId);
}
}
/**
*
*/
package com.beecode.inz.workflow.listener;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.amino.core.Amino;
import com.beecode.bap.bill.Bill;
import com.beecode.bap.bill.BillService;
import com.beecode.bap.bill.WorkflowBillConstants;
import com.beecode.bap.bill.define.BillDefine;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.workflow.service.WorkflowBillService;
/**
* @author huangkaibin
*
*/
public class CommonWorkflowBillProcessEventListener implements InzBizProcessEventListener {
@Autowired
private BillService billService;
@Override
public void afterProcessCompleted(InzBizProcessEvent event) {
String billDefineName = event.getInzBizProcess().getBizTypeName();
BillDefine billDefine = Amino.getApplicationMetadataContext().getBean(billDefineName, BillDefine.class);
if (event.isAgreed()) {
KObject billObj = event.getInzBizProcess().getBizDataObject();
Bill bill = billService.restoreBill(billDefine, billObj);
billService.executeAction(bill,
WorkflowBillConstants.BIZ_WORKFLOW + "." + WorkflowBillService.METHOD_APPROVE);
} else if (event.isRejected()) {
KObject billObj = event.getInzBizProcess().getBizDataObject();
Bill bill = billService.restoreBill(billDefine, billObj);
billService.executeAction(bill,
WorkflowBillConstants.BIZ_WORKFLOW + "." + WorkflowBillService.METHOD_REJECT);
}
}
public BillService getBillService() {
return billService;
}
public void setBillService(BillService billService) {
this.billService = billService;
}
}
package com.beecode.inz.workflow.listener;
import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.inz.workflow.entity.InzBizProcess;
public final class InzBizProcessEvent {
......@@ -10,4 +11,10 @@ public final class InzBizProcessEvent {
public InzBizProcess getInzBizProcess() {
return inzBizProcess;
}
public boolean isAgreed() {
return inzBizProcess.getWorkflowState() == BizProcessState.DONE_WITH_AGREE.getValue();
}
public boolean isRejected() {
return inzBizProcess.getWorkflowState() == BizProcessState.DONE_WITH_REJECT.getValue();
}
}
package com.beecode.inz.workflow.listener;
public interface InzBizProcessEventListener {
void beforeProcessStarted(InzBizProcessEvent event);
default void beforeProcessStarted(InzBizProcessEvent event) {
}
void afterProcessStarted(InzBizProcessEvent event);
default void afterProcessStarted(InzBizProcessEvent event) {
void beforeProcessCompleted(InzBizProcessEvent event);
}
void afterProcessCompleted(InzBizProcessEvent event);
default void beforeProcessCompleted(InzBizProcessEvent event) {
}
default void afterProcessCompleted(InzBizProcessEvent event) {
}
}
package com.beecode.inz.workflow.listener;
import org.springframework.context.ApplicationEvent;
public class RTWorkFlowEvent extends ApplicationEvent{
private String type;
/**
*
*/
private static final long serialVersionUID = 1L;
public RTWorkFlowEvent(Object source) {
super(source);
}
public RTWorkFlowEvent(Object source,String type) {
super(source);
this.type = type;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
......@@ -4,6 +4,7 @@ import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.amino.core.Amino;
import com.beecode.bap.workflow.core.BizProcess;
import com.beecode.bap.workflow.core.CommonTask;
import com.beecode.bcp.task.event.TaskEvent;
......@@ -16,6 +17,7 @@ public class TaskEventListenerImpl implements TaskEventListener{
@Autowired
private InzBizProcessService inzBizProcessService;
@Override
public void beforeTaskStartedEvent(TaskEvent event) {
// TODO Auto-generated method stub
......@@ -58,8 +60,7 @@ public class TaskEventListenerImpl implements TaskEventListener{
@Override
public void afterTaskStartedEvent(TaskEvent event) {
// TODO Auto-generated method stub
Amino.getApplicationContext().publishEvent(new RTWorkFlowEvent(event,"after_started"));
}
@Override
......@@ -70,7 +71,7 @@ public class TaskEventListenerImpl implements TaskEventListener{
@Override
public void afterTaskCompletedEvent(TaskEvent event) {
Amino.getApplicationContext().publishEvent(new RTWorkFlowEvent(event,"after_completed"));
}
@Override
......
......@@ -16,6 +16,7 @@ import com.beecode.bcp.participant.core.ParticipantStrategy;
import com.beecode.bcp.participant.core.User;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.bcp.workflow.core.ProcessInstance;
import com.fasterxml.jackson.databind.JsonNode;
public class CommomParticipantStrategy implements ParticipantStrategy{
......@@ -35,6 +36,36 @@ public class CommomParticipantStrategy implements ParticipantStrategy{
final List<Participant> participants = new ArrayList<>();
KObject task = (KObject)params.get("task");
ProcessInstance processInstance = (ProcessInstance)params.get("processinstance");
if(task != null && processInstance != null){
String nodeId = task.get("workItem").getString("nodeId");
String nodeParam = null;
if(nodeId.contains("-")){
nodeParam = "p_"+String.valueOf(nodeId).replaceAll("-", "p")+"_staffs";
}else{
nodeParam = "p_"+nodeId+"_staffs";
}
String staffsContent = (String)processInstance.getParameterValue(nodeParam);
if(null != staffsContent && !"".equals(staffsContent)) {
JsonNode staffsJson = JSONObjectUtils.toJson(staffsContent);
staffsJson.forEach((staffJson)->{
KObject staff = staffService.getById(UUID.fromString(staffJson.asText()));
if(null == staff||staff.isNull()) {
return;
}
if(staff.get(Staff.USER).getBoolean(Staff.ENABLED)){
participants.add(new User(staff.getUuid("id")));
}
});
return participants;
}
}
if(null != params.get(PARAM_STAFFS)){
JsonNode staffsJson = JSONObjectUtils.toJson(params.get(PARAM_STAFFS).toString());
staffsJson.forEach((staffJson)->{
......
package com.beecode.inz.workflow.participant;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bap.org.service.BapOrgDetailService;
import com.beecode.bap.staff.Staff;
import com.beecode.bap.staff.service.StaffService;
import com.beecode.bcp.authz.service.RoleService;
import com.beecode.bcp.core.Department;
import com.beecode.bcp.participant.core.Participant;
import com.beecode.bcp.participant.core.ParticipantStrategy;
import com.beecode.bcp.participant.core.User;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.fasterxml.jackson.databind.JsonNode;
/**
* 提交人所在单位及其上级单位(按照路径匹配)中
* 符合指定角色的职员,即为该参与者策略的策略者。
* 解释:
* 和提交人有直接或者间接上下级(向上)关系的
* @author jiaokai
*/
public class SubmitOrgPathAppointRoleParticipantStrategy implements ParticipantStrategy {
private static String PARAM_ROLES = "roles";
private static final String SUBMITTER_ID = "submitterId";
@Autowired
private RoleService roleService;
@Autowired
private StaffService staffService;
@Autowired
private BapOrgDetailService orgService;
@Override
public List<Participant> getParticipant(Map<String, Object> params) {
final List<Participant> participants = new ArrayList<>();
List<KObject> staffsAll = new ArrayList<>();
if(null != params.get(PARAM_ROLES)){
JsonNode rolesJson = JSONObjectUtils.toJson(params.get(PARAM_ROLES));
rolesJson.forEach((role)->{
UUID roleId = UUID.fromString(role.asText());
staffsAll.addAll( this.findStaffByRoleId(roleId));
});
}
UUID submitterId = UUID.fromString(params.get(SUBMITTER_ID).toString());
KObject submitterKObj = staffService.getById(submitterId);
UUID submitOrgId = submitterKObj.get(Staff.DEPARTMENT).getUuid(Department.PROP_ORG_ID);
Map<String, KObject> submitOrgDetail = orgService.getByOrgId(submitOrgId);
String submitOrgParents = submitOrgDetail.get("parents").getString();
for(KObject staff : staffsAll){
UUID staffOrgId = staff.get(Staff.DEPARTMENT).getUuid(Department.PROP_ORG_ID);
String keyIdStr = staffOrgId.toString().replaceAll("-", "").toUpperCase();
if(submitOrgParents.indexOf(keyIdStr)>=0){
participants.add(new User(staff.getUuid("id")));
}
}
return participants;
}
public List<KObject> findStaffByRoleId(UUID id) {
List<KObject> staffs = new ArrayList<>();
List<com.beecode.bcp.User> users = roleService.getUsers(id);
if (users != null && users.size() > 0) {
staffs = users.stream().map(com.beecode.bcp.User::getId).map(staffService::getByUserId).collect(Collectors.toList());
}
return staffs;
}
}
package com.beecode.inz.workflow.participant;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.stream.Collectors;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import com.beecode.bap.core.dao.OrganizationDao;
import com.beecode.bap.staff.Staff;
import com.beecode.bap.staff.service.StaffService;
import com.beecode.bap.workflow.constants.BizProcessConstant;
import com.beecode.bcp.authz.service.RoleService;
import com.beecode.bcp.core.Organization;
import com.beecode.bcp.participant.core.Participant;
import com.beecode.bcp.participant.core.ParticipantStrategy;
import com.beecode.bcp.participant.core.User;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.bcp.workflow.core.ProcessInstance;
import com.beecode.inz.workflow.dao.CommonDao;
import com.fasterxml.jackson.databind.JsonNode;
/**
* 提交人所在子公司及总部
* 符合指定角色的职员,即为该参与者策略的策略者。
* 解释:
*
* @author jk
*/
public class SubmiterSubsidiaryRoleParticipantStrategy implements ParticipantStrategy {
private static String PARAM_ROLES = "roles";
@Autowired
private RoleService roleService;
@Autowired
private StaffService staffService;
@Autowired
private CommonDao commonDao;
@Autowired
private OrganizationDao orgDao;
@Override
public List<Participant> getParticipant(Map<String, Object> params) {
final List<Participant> participants = new ArrayList<>();
List<KObject> staffs = new ArrayList<>();
if(null != params.get(PARAM_ROLES)){
JsonNode rolesJson = JSONObjectUtils.toJson(params.get(PARAM_ROLES));
rolesJson.forEach((role)->{
UUID roleId = UUID.fromString(role.asText());
staffs.addAll( this.findStaffByRoleId(roleId));
});
}
ProcessInstance pi = (ProcessInstance) params.get("processinstance");
// if(null == pi){
// for(KObject staff : staffs){
// participants.add(new User(staff.getUuid("id")));
// }
// return participants;
// }
String bizParamsStr = pi.getParameters();
JSONObject bizParams = new JSONObject(bizParamsStr);
UUID dataId = UUID.fromString(bizParams.getString(BizProcessConstant.BIZ_DATA_ID));
KObject assetPackage = null;
String bizTypeName = bizParams.getString(BizProcessConstant.BIZ_TYPE_NAME);
if(bizTypeName.equals("Enroll")){
KObject enroll = commonDao.load("rongtong.zhaoshang.datamodel.Enroll", dataId);
assetPackage = enroll.get("assetPackage");
}else if(bizTypeName.equals("Deposit")){
KObject deposit = commonDao.load("rongtong.zhaoshang.datamodel.DepositRecord", dataId);
assetPackage = deposit.get("enroll").get("assetPackage");
}
KObject subsidiary = assetPackage.get("subsidiary");
Organization org = orgDao.getOrgByCode(subsidiary.getString("name"));
UUID orgId = org.getId();
for(KObject staff : staffs){
if(orgId.equals(staff.get(Staff.DEPARTMENT).getUuid("orgId"))){
participants.add(new User(staff.getUuid("id")));
}
}
return participants;
}
public List<KObject> findStaffByRoleId(UUID id) {
List<KObject> staffs = new ArrayList<>();
List<com.beecode.bcp.User> users = roleService.getUsers(id);
if (users != null && users.size() > 0) {
staffs = users.stream().map(com.beecode.bcp.User::getId).map(staffService::getByUserId).collect(Collectors.toList());
}
return staffs;
}
}
package com.beecode.inz.workflow.pojo;
import java.util.List;
public class ApprovalNodesObj {
public enum NodeType{
normal,addSign,changeStaff;
}
private int approvalResult;
private String id;
private String name;
private String currentStore;
private NodeType type;
private List<com.beecode.inz.workflow.entity.UserAssignment> approvalUsers;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<com.beecode.inz.workflow.entity.UserAssignment> getApprovalUsers() {
return approvalUsers;
}
public void setApprovalUsers(List<com.beecode.inz.workflow.entity.UserAssignment> approvalUsers) {
this.approvalUsers = approvalUsers;
}
public int getApprovalResult() {
return approvalResult;
}
public void setApprovalResult(int approvalResult) {
this.approvalResult = approvalResult;
}
public String getCurrentStore() {
return currentStore;
}
public void setCurrentStore(String currentStore) {
this.currentStore = currentStore;
}
public NodeType getType() {
return type;
}
public void setType(NodeType type) {
this.type = type;
}
}
......@@ -10,6 +10,7 @@ import com.beecode.inz.workflow.entity.InzApprovalTask;
import com.beecode.inz.workflow.entity.UserAssignment;
public class InzApprovalTaskObj {
private String name;
private UUID taskId;
private Date approvalTime;
private Date startTime;
......@@ -25,6 +26,7 @@ public class InzApprovalTaskObj {
private List<InzApprovalTaskObj> children;
public InzApprovalTaskObj(InzApprovalTask task){
this.name = task.getName();
this.taskId = task.getId();
this.approvalTime = task.getFinishTime();
this.taskState = task.getTaskState().getValue();
......@@ -43,6 +45,8 @@ public class InzApprovalTaskObj {
action = "已通过";
}else if(task.getResult() == 99){
action = "已驳回";
}else if(task.getResult() == 50){
action = "已退回";
}
this.taskState = task.getTaskState().getValue();
this.bizObjectName = task.getBizObjectName();
......@@ -62,6 +66,14 @@ public class InzApprovalTaskObj {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean isCanApprove() {
return canApprove;
}
......
package com.beecode.inz.workflow.pojo;
import java.util.Date;
import java.util.List;
import com.beecode.inz.workflow.entity.UserAssignment;
public class WorkflowRecordsObj {
private String name;
private String operation;
private String suggestion;
private Date finishTime;
private UserAssignment approvalUser;
private List<UserAssignment> receiverUser;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public String getSuggestion() {
return suggestion;
}
public void setSuggestion(String suggestion) {
this.suggestion = suggestion;
}
public Date getFinishTime() {
return finishTime;
}
public void setFinishTime(Date finishTime) {
this.finishTime = finishTime;
}
public UserAssignment getApprovalUser() {
return approvalUser;
}
public void setApprovalUser(UserAssignment approvalUser) {
this.approvalUser = approvalUser;
}
public List<UserAssignment> getReceiverUser() {
return receiverUser;
}
public void setReceiverUser(List<UserAssignment> receiverUser) {
this.receiverUser = receiverUser;
}
}
package com.beecode.inz.workflow.query;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -8,7 +9,9 @@ import com.beecode.inz.query.entity.RowData;
import com.beecode.inz.query.processor.DataProcessor;
import com.beecode.inz.query.processor.DataProcessorContext;
import com.beecode.inz.workflow.config.WorkflowConfigurationDefinition;
import com.beecode.inz.workflow.entity.InzBizProcess;
import com.beecode.inz.workflow.service.BizTypeWorkflowConfigurationService;
import com.beecode.inz.workflow.service.InzBizProcessService;
public class InzApprovalTaskQueryDataProcessor implements DataProcessor{
......@@ -16,9 +19,13 @@ public class InzApprovalTaskQueryDataProcessor implements DataProcessor{
private BizTypeWorkflowConfigurationService bizTypeWorkflowConfigurationService;
private static final String BIZ_TYPE_NAME = "bizTypeName";
private static final String BIZ_PROCESS_ID = "bizProcess.id";
private static final String BIZT_YPETITLE_V = "bizTypeTitle_v";
private static final String ASSET_PACKAGE_TITLE = "assetPackageTitle";
@Autowired
private InzBizProcessService inzBizProcessService;
@Override
public void process(DataProcessorContext context) {
......@@ -34,6 +41,12 @@ public class InzApprovalTaskQueryDataProcessor implements DataProcessor{
}
String bizTypeTitle_v = config.getBizTypeInfo().getTitle();
row.put(BIZT_YPETITLE_V, bizTypeTitle_v);
if(null == row.get(BIZ_PROCESS_ID)){
continue;
}
UUID bizProcessId = UUID.fromString(row.get(BIZ_PROCESS_ID).toString());
InzBizProcess process = inzBizProcessService.getBizProcessById(bizProcessId);
row.put(ASSET_PACKAGE_TITLE, process.getBizAffiliationName());
}
}
......
......@@ -33,7 +33,14 @@ public class InzWorkflowDefinitionQueryDataProcessor implements DataProcessor{
return;
}
for(RowData row : rowDatas){
String bizTypeName = row.get(BIZ_TYPE_NAME).toString();
Object bizTypeNameObj = row.get(BIZ_TYPE_NAME);
String bizTypeName = "";
if(bizTypeNameObj == null){
bizTypeName = "未填写";
continue;
}else{
bizTypeName = bizTypeNameObj.toString();
}
WorkflowConfigurationDefinition config = bizTypeWorkflowConfigurationService.getBizTypeWorkflowConfigurationByBizTypeName(bizTypeName);
if(null == config){
continue;
......
package com.beecode.inz.workflow.service;
import java.util.List;
import java.util.UUID;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.workflow.entity.ApprovalCopyEntity;
public interface ApprovalCopyService {
void approvalCopy(UUID bizProcessId,String actors);
void completedApprovalCopy(UUID processInstanceId,String suggestion);
void addApprovalCopy(ApprovalCopyEntity approvalCopyEntity);
ApprovalCopyEntity getApprovalCopyByprocessInstanceId(UUID processInstanceId);
List<KObject> getApprovalCopyStaffByprocessInstanceId(UUID processInstanceId);
}
package com.beecode.inz.workflow.service;
import java.util.List;
import java.util.UUID;
import com.beecode.inz.workflow.entity.InzBizProcess;
import com.beecode.inz.workflow.pojo.ApprovalNodesObj;
public interface ApprovalNodeService {
List<ApprovalNodesObj> listApprovalNodeByInzBizProcess(InzBizProcess inzBizProcess,String storeJson,Boolean isEquipment);
List<ApprovalNodesObj> listDefinitionApprovalNodeByBizTypeName(String bizTypeName,String storeJson,UUID bizDataId,String define,String disposeType,Boolean isEquipment);
}
......@@ -4,7 +4,9 @@ import java.util.List;
import com.beecode.inz.workflow.entity.ApprovalRecord;
import com.beecode.inz.workflow.entity.InzBizProcess;
import com.beecode.inz.workflow.pojo.WorkflowRecordsObj;
public interface ApprovalRecordService {
List<ApprovalRecord> listApprovalRecordByProcessInstance(InzBizProcess inzBizProcess);
List<WorkflowRecordsObj> listWorkflowRecordByProcessInstance(InzBizProcess inzBizProcess);
}
package com.beecode.inz.workflow.service;
import java.util.UUID;
public interface ApprovalSendCopyService {
void sendApprovalCopy(UUID taskId,int result);
}
package com.beecode.inz.workflow.service;
import java.util.List;
import java.util.UUID;
public interface ApprovalTranspondService {
void approvalTranspond(UUID bizProcessId,List<UUID> actorIds,String type,String url,String suggestion);
void approvalTranspond(UUID bizProcessId,UUID loginActorId,List<UUID> actorIds,String suggestion);
void startAutoCompleteApproval(UUID bizProcessId);
void completedApprovalTranspond(UUID processInstanceId,String suggestion);
}
package com.beecode.inz.workflow.service;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.json.JSONObject;
import com.beecode.bcp.workflow.exception.WorkflowRuntimeException;
import com.beecode.inz.workflow.entity.InzApprovalTask;
public interface InzApprovalTaskService {
void completeTask(UUID taskId,int result,String suggestions) throws WorkflowRuntimeException;
void completeTask(UUID taskId,int result,String suggestions,Map<String,String> argus,String attribute1) throws WorkflowRuntimeException;
/**
* 根据流程查询已审批的任务列表
* 按照审批完成时间升序
......@@ -29,8 +33,5 @@ public interface InzApprovalTaskService {
List<InzApprovalTask> generateParenChildRelation(List<InzApprovalTask> tasks);
/**
* 查询自己待审批的任务列表
*/
List<InzApprovalTask> getApprovalTasksByPend();
JSONObject getLastTaskByBizDataId(UUID bizDataId);
}
......@@ -3,10 +3,12 @@ package com.beecode.inz.workflow.service;
import java.util.List;
import java.util.UUID;
import com.beecode.bap.workflow.core.BizProcessState;
import com.beecode.inz.workflow.entity.InzBizProcess;
public interface InzBizProcessService {
InzBizProcess getBizProcessByWorkflowProcessInstanceId(UUID processInstanceId);
List<InzBizProcess> listBizProcessByBizDataId(UUID bizData);
List<InzBizProcess> listBizProcessByBizDataIdAndStateAndNoProcessInstanceId(UUID bizDataId,BizProcessState state,UUID processInstanceId);
InzBizProcess getBizProcessById(UUID id) ;
}
package com.beecode.inz.workflow.service;
import java.util.UUID;
import java.util.Map;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.workflow.core.ProcessInstance;
import com.beecode.bcp.workflow.exception.WorkflowRuntimeException;
public interface InzWorkflowService {
......@@ -19,6 +23,17 @@ public interface InzWorkflowService {
* @param actionName 动作标识
* @param bizTypeName 业务类型标识
* @param bizObjectName 对象名称
* @param bizData 业务数据
* @param params 启动参数
* @throws WorkflowRuntimeException 工作流异常
*/
void startWorkflow(String actionName,String bizTypeName,String bizObjectName,KObject bizData, Map<String,Object> params) throws WorkflowRuntimeException;
/**
*
* @param actionName 动作标识
* @param bizTypeName 业务类型标识
* @param bizObjectName 对象名称
* @param bizProcessName 业务流程实例名称,是一段描述性的文本,用来表示当前的审批业务场景
* @param bizData 业务数据
* @throws WorkflowRuntimeException
......@@ -28,8 +43,38 @@ public interface InzWorkflowService {
*
* @param actionName 动作标识
* @param bizTypeName 业务类型标识
* @param bizObjectName 对象名称
* @param bizProcessName 业务流程实例名称,是一段描述性的文本,用来表示当前的审批业务场景
* @param bizData 业务数据
* @param params 启动参数
* @throws WorkflowRuntimeException
*/
void startWorkflow(String actionName,String bizTypeName,String bizObjectName,String bizProcessName,KObject bizData, Map<String,Object> params) throws WorkflowRuntimeException;
void startWorkflow(String actionName,String bizTypeName,String bizObjectName,String bizProcessName,KObject bizData, Map<String,Object> params,String bizAffiliationName) throws WorkflowRuntimeException;
/**
*
* @param actionName 动作标识
* @param bizTypeName 业务类型标识
* @param bizData 业务数据
* @return
*/
boolean canStartWotkflow(String actionName,String bizTypeName,KObject bizData);
void startAutoCompleteWorkflow(ProcessInstance processInstance);
/**
* 根据指定modelname和id,找到对应的对象,检查无误开始一个工作流
* @param actionName
* @param bizTypeName
* @param bizObjectName
* @param modelName kclass name
* @param modelId kobject id
* @return 200:正常开始;
* 503:检查失败,无法开始工作流;
* @throws WorkflowRuntimeException
*/
int startWorkflow(String actionName, String bizTypeName, String bizObjectName, String modelName, UUID modelId)
throws WorkflowRuntimeException;
int startWorkflow(String actionName, String bizTypeName, String bizObjectName, String modelName, UUID modelId,String bizAffiliationName)
throws WorkflowRuntimeException;
}
package com.beecode.inz.workflow.service;
import java.util.UUID;
import com.beecode.inz.workflow.entity.SubmitApprovalSuggestionEntity;
public interface SubmitApprovalSuggestionService {
void addSubmitApprovalSuggestion(UUID bizProcessId,String suggestion);
SubmitApprovalSuggestionEntity getSubmitApprovalSuggestionByprocessInstanceId(UUID processInstanceId);
}
/**
*
*/
package com.beecode.inz.workflow.service;
import java.util.Map;
import org.springframework.lang.Nullable;
import com.beecode.bap.bill.Bill;
import com.beecode.bap.bill.WorkflowBillConstants;
import com.beecode.bap.bill.annotations.Autoparam;
import com.beecode.bcp.biz.BizServiceInterface;
import com.beecode.bcp.biz.Parameter;
/**
* @author huangkaibin
*
*/
@BizServiceInterface(WorkflowBillConstants.BIZ_WORKFLOW)
public interface WorkflowBillService {
String METHOD_SUBMIT = "submit";
String METHOD_APPROVE = "approve";
String METHOD_REJECT = "reject";
/**
* 提交单据到工作流
* @param bill 单据
* @param params 启动工作流的参数,可以传<code>null</code>
* @return 默认情况下提交给工作流后返回<code>null</code>,如果没有配置工作流,就调用{@link #approve(Bill)}方法并返回结果。o
*/
Object submit(@Autoparam Bill bill, @Nullable @Parameter(optional = true) Map<String, Object> params);
/**
* 工作流审批同意后执行的动作
* @param bill 单据
* @return 由业务决定具体返回内容
*/
Object approve(@Autoparam Bill bill);
/**
* 工作流审批拒绝后执行的动作
* @param bill 单据
* @return 由业务决定具体返回内容
*/
Object reject(@Autoparam Bill bill);
}
/**
*
*/
package com.beecode.inz.workflow.service.support;
import java.time.Instant;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import com.beecode.bap.bill.Bill;
import com.beecode.bap.bill.BillConstants.BillStates;
import com.beecode.bap.bill.BillConstants.MasterAttributes;
import com.beecode.bap.bill.WorkflowBillConstants;
import com.beecode.bap.bill.WorkflowBillConstants.FlowAttributes;
import com.beecode.bap.bill.WorkflowBillConstants.FlowStates;
import com.beecode.bap.bill.data.BillData;
import com.beecode.bap.bill.support.BillDataExt;
import com.beecode.bap.workflow.service.BizProcessService;
import com.beecode.bcp.biz.BizServiceImplement;
import com.beecode.bcp.type.KClass;
import com.beecode.bcp.type.KObject;
import com.beecode.inz.workflow.service.InzWorkflowService;
import com.beecode.inz.workflow.service.WorkflowBillService;
/**
* @author huangkaibin
*
*/
@BizServiceImplement(WorkflowBillConstants.WORKFLOW_BILL_MASTER_BASE)
public abstract class AbstractWorkflowBillService implements WorkflowBillService {
protected final Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
protected InzWorkflowService workflowService;
@Autowired
protected BizProcessService bizProcessService;
@Transactional
@Override
public Object submit(Bill bill, Map<String, Object> params) {
return submitToWorkflow(bill, METHOD_SUBMIT, null, params);
}
protected Object submitToWorkflow(Bill bill, String action, String bizObjectName, Map<String, Object> params) {
String bizTypeName = bill.getDefine().getName();
bizObjectName = bizObjectName == null ? bill.getCode() : bizObjectName;
BillData billData = bill.getData();
billData.set(MasterAttributes.ATTR_BILL_STATE, BillStates.HANDLING);
KObject bizData = ((BillDataExt) billData).toKObject();
if (workflowService.canStartWotkflow(action, bizTypeName, bizData)) {
workflowService.startWorkflow(action, bizTypeName, bizObjectName, bizData, params);
return null;
} else {
KClass clz = bill.getDefine().getDataType();
if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_STAE)) {
billData.set(FlowAttributes.ATTR_FLOW_STAE, FlowStates.APPROVED);
}
Instant time = Instant.now();
if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_SUBMIT_TIME)) {
billData.set(FlowAttributes.ATTR_FLOW_SUBMIT_TIME, time);
}
if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_FINISH_TIME)) {
billData.set(FlowAttributes.ATTR_FLOW_FINISH_TIME, time);
}
return approve(bill);
}
}
// @Transactional
@Override
public Object reject(Bill bill) {
// BillData billData = bill.getData();
// billData.set(MasterAttributes.ATTR_BILL_STATE, BillStates.SAVED);
// KClass clz = bill.getDefine().getDataType();
// if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_STAE)) {
// billData.set(FlowAttributes.ATTR_FLOW_STAE, FlowStates.REJECTED);
// }
// Instant time = Instant.now();
// if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_SUBMIT_TIME)) {
// billData.set(FlowAttributes.ATTR_FLOW_SUBMIT_TIME, time);
// }
// if (clz.hasAttribute(FlowAttributes.ATTR_FLOW_FINISH_TIME)) {
// billData.set(FlowAttributes.ATTR_FLOW_FINISH_TIME, time);
// }
return null;
}
public InzWorkflowService getWorkflowService() {
return workflowService;
}
public void setWorkflowService(InzWorkflowService workflowService) {
this.workflowService = workflowService;
}
}
package com.beecode.inz.workflow.web;
import java.util.Collections;
import java.util.List;
import java.util.UUID;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.bcp.type.KObject;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.bcp.workflow.exception.WorkflowRuntimeException;
import com.beecode.inz.workflow.service.ApprovalCopyService;
@RestController
public class ApprovalCopyController {
@Autowired
private ApprovalCopyService approvalCopyService;
@RequestMapping(value = "/workflow/approvalCopy", method = RequestMethod.POST)
public Object approvalCheck(@RequestBody String body) {
JSONObject returnObj = new JSONObject();
returnObj.put("status", 200);
JSONObject bodyJson = new JSONObject(body);
UUID bizProcessId = UUID.fromString(bodyJson.getString("bizProcessId"));
JSONArray actors = bodyJson.getJSONArray("actors");
try {
approvalCopyService.approvalCopy(bizProcessId, actors.toString());
}catch (WorkflowRuntimeException e) {
returnObj.put("status", 500);
returnObj.put("code", e.getMessage());
}
return JSONObjectUtils.toJson(returnObj.toString());
}
@RequestMapping(value = "/workflow/completedApprovalCopy", method = RequestMethod.POST)
public Object completedApprovalCheck(@RequestBody String body) {
JSONObject returnObj = new JSONObject();
returnObj.put("status", 200);
JSONObject bodyJson = new JSONObject(body);
UUID processInstanceId = UUID.fromString(bodyJson.getString("processInstanceId"));
String suggestion = null;
if(bodyJson.has("suggestion")){
if(!"".equals(bodyJson.getString("suggestion"))){
suggestion = bodyJson.getString("suggestion");
}
}
try {
approvalCopyService.completedApprovalCopy(processInstanceId,suggestion);
}catch (WorkflowRuntimeException e) {
returnObj.put("status", 500);
returnObj.put("code", e.getMessage());
}
return JSONObjectUtils.toJson(returnObj.toString());
}
@RequestMapping(value = "/workflow/approvalCopyStaff", method = RequestMethod.GET)
public List<KObject> getApprovalCopyStaff(@RequestParam(name="workflowProcessInstanceId",required=true ) UUID workflowProcessInstanceId) {
return approvalCopyService.getApprovalCopyStaffByprocessInstanceId(workflowProcessInstanceId);
}
}
package com.beecode.inz.workflow.web;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.inz.workflow.entity.InzBizProcess;
import com.beecode.inz.workflow.pojo.ApprovalNodesObj;
import com.beecode.inz.workflow.service.ApprovalNodeService;
import com.beecode.inz.workflow.service.InzBizProcessService;
@RestController
public class ApprovalNodeController {
@Autowired
private ApprovalNodeService approvalNodeService;
@Autowired
private InzBizProcessService inzBizProcessService;
@RequestMapping(value = "/workflow/approvalNodes", method = RequestMethod.GET)
public List<ApprovalNodesObj> getFlowNodeInfo(@RequestParam(name="workflowProcessInstanceId",required=true ) UUID workflowProcessInstanceId
,@RequestParam(name="storeJson",required=false ) String storeJson
,@RequestParam(name="isEquipment",required=false ) Boolean isEquipment) {
InzBizProcess inzBizProcess = inzBizProcessService.getBizProcessByWorkflowProcessInstanceId(workflowProcessInstanceId);
return approvalNodeService.listApprovalNodeByInzBizProcess(inzBizProcess,storeJson,isEquipment);
}
@RequestMapping(value = "/workflow/workflowDefinitionApprovalNodes", method = RequestMethod.GET)
public List<ApprovalNodesObj> getFlowDefinitionNodeInfo(@RequestParam(name="bizTypeName",required=true ) String bizTypeName
,@RequestParam(name="storeJson",required=false ) String storeJson
,@RequestParam(name="bizDataId",required=false ) UUID bizDataId
,@RequestParam(name="define",required=false ) String define
,@RequestParam(name="disposeType",required=false ) String disposeType
,@RequestParam(name="isEquipment",required=false ) Boolean isEquipment) {
return approvalNodeService.listDefinitionApprovalNodeByBizTypeName(bizTypeName,storeJson,bizDataId,define,disposeType,isEquipment);
}
}
package com.beecode.inz.workflow.web;
import java.util.List;
import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -10,6 +11,7 @@ import org.springframework.web.bind.annotation.RestController;
import com.beecode.inz.workflow.entity.InzBizProcess;
import com.beecode.inz.workflow.pojo.ApprovalRecordsObj;
import com.beecode.inz.workflow.pojo.WorkflowRecordsObj;
import com.beecode.inz.workflow.service.ApprovalRecordService;
import com.beecode.inz.workflow.service.InzBizProcessService;
......@@ -30,4 +32,10 @@ public class ApprovalRecordController {
obj.setApprovalRecords(approvalRecordService.listApprovalRecordByProcessInstance(inzBizProcess));
return obj;
}
@RequestMapping(value = "/workflow/records", method = RequestMethod.GET)
public List<WorkflowRecordsObj> getFlowRecords(@RequestParam(name="workflowProcessInstanceId",required=true ) String workflowProcessInstanceId) {
InzBizProcess inzBizProcess = inzBizProcessService.getBizProcessByWorkflowProcessInstanceId(UUID.fromString(workflowProcessInstanceId));
return approvalRecordService.listWorkflowRecordByProcessInstance(inzBizProcess);
}
}
package com.beecode.inz.workflow.web;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.bcp.workflow.exception.WorkflowRuntimeException;
import com.beecode.inz.workflow.service.ApprovalTranspondService;
import com.beecode.inz.workflow.service.SubmitApprovalSuggestionService;
@RestController
public class ApprovalTranspondController {
@Autowired
private ApprovalTranspondService approvalTranspondService;
@Autowired
private SubmitApprovalSuggestionService submitApprovalSuggestionService;
@RequestMapping(value = "/workflow/approvalTranspond", method = RequestMethod.POST)
public Object approvalTranspond(@RequestBody String body) {
JSONObject returnObj = new JSONObject();
returnObj.put("status", 200);
JSONObject bodyJson = new JSONObject(body);
/**
* 转发别人 transpondOther
* 给自己的 transpondOneself
* 驳回给自己的 transpondReject
*/
String type = bodyJson.getString("type");
String suggestion = null;
String url = null;
if(bodyJson.has("suggestion")){
suggestion = bodyJson.getString("suggestion");
}
if(bodyJson.has("url")){
url = bodyJson.getString("url");
}
UUID bizProcessId = UUID.fromString(bodyJson.getString("bizProcessId"));
List<UUID> actorIds = new ArrayList<>();
if(bodyJson.has("actors")){
JSONArray jsonArray = bodyJson.getJSONArray("actors");
for(int i =0; i<jsonArray.length();i++){
actorIds.add(UUID.fromString(jsonArray.getString(i)));
}
}
try {
approvalTranspondService.approvalTranspond(bizProcessId, actorIds,type,url,suggestion);
if(suggestion != null && !suggestion.equals("") && ("transpondOneself".equals(type) || "transpondReject".equals(type))){
submitApprovalSuggestionService.addSubmitApprovalSuggestion(bizProcessId, suggestion);
}
approvalTranspondService.startAutoCompleteApproval(bizProcessId);
}catch (WorkflowRuntimeException e) {
returnObj.put("status", 500);
returnObj.put("code", e.getMessage());
}
return JSONObjectUtils.toJson(returnObj.toString());
}
@RequestMapping(value = "/workflow/completedApprovalTranspond", method = RequestMethod.POST)
public Object completedApprovalTranspond(@RequestBody String body) {
JSONObject returnObj = new JSONObject();
returnObj.put("status", 200);
JSONObject bodyJson = new JSONObject(body);
UUID processInstanceId = UUID.fromString(bodyJson.getString("processInstanceId"));
String suggestion = null;
if(bodyJson.has("suggestion")){
if(!"".equals(bodyJson.getString("suggestion"))){
suggestion = bodyJson.getString("suggestion");
}
}
try {
approvalTranspondService.completedApprovalTranspond(processInstanceId,suggestion);
}catch (WorkflowRuntimeException e) {
returnObj.put("status", 500);
returnObj.put("code", e.getMessage());
}
return JSONObjectUtils.toJson(returnObj.toString());
}
}
package com.beecode.inz.workflow.web;
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
import org.json.JSONObject;
......@@ -14,7 +15,6 @@ import org.springframework.web.bind.annotation.RestController;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.bcp.workflow.exception.WorkflowRuntimeException;
import com.beecode.inz.workflow.entity.InzApprovalTask;
import com.beecode.inz.workflow.pojo.InzApprovalTaskObj;
import com.beecode.inz.workflow.service.InzApprovalTaskService;
......@@ -36,9 +36,21 @@ public class InzApprovalTaskController {
int result = bodyJson.getInt("approvalAction");
String suggestions = bodyJson.optString("suggestions");
String attribute1 = bodyJson.optString("attribute1");
JSONObject extendAttribute = bodyJson.optJSONObject("extendAttribute");
Map<String,String> argus = new HashMap<>();
if(extendAttribute!=null){
Iterator<?> it = extendAttribute.keys();
while(it.hasNext()){
String key = (String) it.next();
//得到value的值
String value = extendAttribute.optString(key);
//System.out.println(value);
argus.put(key, value);
}
}
try {
inzApprovalTaskService.completeTask(taskId, result, suggestions);
inzApprovalTaskService.completeTask(taskId, result, suggestions,argus,attribute1);
}catch (WorkflowRuntimeException e) {
returnObj.put("status", 500);
returnObj.put("code", e.getMessage());
......@@ -52,15 +64,16 @@ public class InzApprovalTaskController {
return new InzApprovalTaskObj(inzApprovalTaskService.getInzApprovalTaskById(taskId));
}
@RequestMapping(value = "/workflow/pendApprovalTasks", method = RequestMethod.GET)
public List<Object> getApprovalTasks() {
List<Object> objects = new ArrayList<>();
List<InzApprovalTask> inzApprovalTasks = inzApprovalTaskService.getApprovalTasksByPend();
for(InzApprovalTask inzApprovalTask : inzApprovalTasks){
if(inzApprovalTask.getBizProcess().getProcessInstance() != null ){
objects.add(new InzApprovalTaskObj(inzApprovalTask));
}
@RequestMapping(value = "/workflow/taks/bizid/{bizDataId}", method = RequestMethod.GET)
public Object getLastTaskByBizDataId(@PathVariable("bizDataId") UUID bizDataId) {
JSONObject result = inzApprovalTaskService.getLastTaskByBizDataId(bizDataId);
if(null == result){
result = new JSONObject();
result.put("code",500);
result.put("reason","找不到对应的工作流实例");
}else{
result.put("code",200);
}
return objects;
return result.toString();
}
}
package com.beecode.inz.workflow.web;
import java.util.Map;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.inz.basis.team.pojo.ResponseObj;
import com.beecode.inz.workflow.service.InzWorkflowService;
/**
* 远程调用启用一些工作流的逻辑,开放接口
*
* @author pengwufeng
*
*/
@RequestMapping(value = "/workflow/api")
@RestController
public class InzWorkflowController {
private static final Logger logger = LoggerFactory.getLogger(InzWorkflowController.class);
@Autowired
private InzWorkflowService inzWorkflowService;
/**
* 开始一个工作流
*
* @param body
* @return
*/
@PostMapping(value = "start")
public ResponseObj<?> startWorkflow(@RequestBody String body) {
String actionName = null;
String bizTypeName = null;
String bizObjectName = null;
String modelName = null;
String bizAffiliationName = null;
UUID modelId = null;
// 读取参数
try {
Map<String, Object> parms = JSONObjectUtils.toMap(body);
actionName = parms.get("actionName").toString();
bizTypeName = parms.get("bizTypeName").toString();
bizObjectName = parms.get("bizObjectName").toString();
modelName = parms.get("modelName").toString();
bizAffiliationName = parms.get("bizAffiliationName").toString();
modelId = UUID.fromString(parms.get("modelId").toString());
} catch (Exception e) {
logger.warn("", e);
return ResponseObj.error("Invalid required parms");
}
try {
int resultCode = inzWorkflowService.startWorkflow(actionName, bizTypeName, bizObjectName, modelName,
modelId, bizAffiliationName);
return ResponseObj.response(resultCode, "", null);
} catch (Exception e) {
logger.warn("", e);
return ResponseObj.error(e.getMessage());
}
}
}
package com.beecode.inz.workflow.web;
import java.util.UUID;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.beecode.bcp.type.json.JSONObjectUtils;
import com.beecode.bcp.workflow.exception.WorkflowRuntimeException;
import com.beecode.inz.workflow.service.SubmitApprovalSuggestionService;
@RestController
public class SubmitApprovalSuggestionController {
@Autowired
private SubmitApprovalSuggestionService submitApprovalSuggestionService;
@RequestMapping(value = "/workflow/submitApprovalSuggestion", method = RequestMethod.POST)
public Object approvalCheck(@RequestBody String body) {
JSONObject returnObj = new JSONObject();
returnObj.put("status", 200);
JSONObject bodyJson = new JSONObject(body);
UUID bizProcessId = UUID.fromString(bodyJson.getString("bizProcessId"));
String suggestion = bodyJson.getString("suggestion");
try {
submitApprovalSuggestionService.addSubmitApprovalSuggestion(bizProcessId, suggestion);
}catch (WorkflowRuntimeException e) {
returnObj.put("status", 500);
returnObj.put("code", e.getMessage());
}
return JSONObjectUtils.toJson(returnObj.toString());
}
@RequestMapping(value = "/workflow/submitApprovalSuggestion", method = RequestMethod.GET)
public Object completedApprovalCheck(@RequestParam(name="processInstanceId",required=true ) UUID processInstanceId) {
return submitApprovalSuggestionService.getSubmitApprovalSuggestionByprocessInstanceId(processInstanceId);
}
}
......@@ -16,6 +16,9 @@
<annotation id='4f3e9d09-9873-4d12-b78b-01d34040cb48' attributeId='1282df11-5502-4190-84ac-6f1f241d9e77' name='length' value='100'>
</annotation>
</attribute>
<attribute id='0f80efb9-f2cf-4d7d-a28b-41c27f75c17e' name='attribute1' columnName='attribute1' title='附加参数1' type='string' default='' precision='' isArray='false'>
<annotation id='9140425a-bd07-48e8-9824-6fa00f8a3e3d' attributeId='e9455f71-c3fc-4ce3-a9cd-15905b5a7983' name='length' value='500'></annotation>
</attribute>
<hibernate>/inz.workflow/src/main/resources/config/InzApprovalTask.hbm.xml</hibernate>
</dataModel>
</content>
......
......@@ -16,6 +16,10 @@
<annotation id='224222d9-9a70-4309-92e0-6105a4438483' attributeId='e211805a-b1d8-4866-859e-c8c9b9a6ffad' name='length' value='200'>
</annotation>
</attribute>
<attribute id='be60e8a1-93c4-4b9b-9299-37f58a4c55fc' name='bizAffiliationName' columnName='biz_affiliation_name' title='对象业务归属名称' type='string' default='' precision='' isArray='false'>
<annotation id='b6f67d50-2295-423b-94c8-8a2c5e03f5f0' attributeId='ed7cc63e-e770-4021-8bed-564c46986eed' name='length' value='200'>
</annotation>
</attribute>
<attribute id='b4cb7081-1c81-4944-ab8c-5a85db1d5539' name='triggerAction' columnName='trigger_action' title='触发动作' type='string' default='' precision='' isArray='false'>
<annotation id='e7df47eb-54a7-4b8b-b51e-b0dda7213977' attributeId='035d7759-12a1-424a-915b-9dfa86a6607b' name='length' value='200'>
</annotation>
......
......@@ -28,6 +28,10 @@
<annotation id='74c4afb5-b971-4d3d-a0e6-135bd6d5c77c' attributeId='74f7fc99-f01a-45fa-8b79-2287654d5ed6' name='length' value='100'>
</annotation>
</attribute>
<attribute id='3183fcf5-e975-4e88-a079-7d9a7bb6a990' name='diagram' columnName='diagram' title='画布' type='string' default='' precision='' isArray='false'>
<annotation id='74c4afb5-b971-4d3d-a0e6-135bd6d5c770' attributeId='74f7fc99-f01a-45fa-8b79-2287654d5ed0' name='length' value='20000'>
</annotation>
</attribute>
<attribute id='6ad04f35-321f-4a02-b7fe-6d9220bbc5ce' name='discard' title='是否废弃' type='boolean' default='false' precision='' isArray='false'>
<annotation id='08d17bd3-abe9-4652-b5be-bbbd5d09b73e' attributeId='00be979e-7d60-405c-9fd5-d03048609ea7' name='length' value='undefined'>
</annotation>
......
......@@ -28,6 +28,20 @@
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>bcp.type.constraint.StringLength</m:type>
<m:value>500</m:value>
</m:annotation>
</m:annotations>
<m:id>0f80efb9-f2cf-4d7d-a28b-41c27f75c17e</m:id>
<m:name>attribute1</m:name>
<m:title>附加参数1</m:title>
<m:type>string</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
</m:attributes>
</m:class>
</content>
......
......@@ -35,6 +35,20 @@
<m:value>200</m:value>
</m:annotation>
</m:annotations>
<m:id>be60e8a1-93c4-4b9b-9299-37f58a4c55fc</m:id>
<m:name>bizAffiliationName</m:name>
<m:title>对象业务归属名称</m:title>
<m:type>string</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>bcp.type.constraint.StringLength</m:type>
<m:value>200</m:value>
</m:annotation>
</m:annotations>
<m:id>b4cb7081-1c81-4944-ab8c-5a85db1d5539</m:id>
<m:name>triggerAction</m:name>
<m:title>触发动作</m:title>
......
......@@ -61,6 +61,20 @@
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations>
<m:annotation>
<m:type>bcp.type.constraint.StringLength</m:type>
<m:value>20000</m:value>
</m:annotation>
</m:annotations>
<m:id>3183fcf5-e975-4e88-a079-7d9a7bb6a990</m:id>
<m:name>diagram</m:name>
<m:title>画布</m:title>
<m:type>string</m:type>
<m:description></m:description>
<m:default></m:default>
</m:attribute>
<m:attribute>
<m:annotations/>
<m:id>6ad04f35-321f-4a02-b7fe-6d9220bbc5ce</m:id>
<m:name>discard</m:name>
......
<?xml version="1.0" encoding="UTF-8"?>
<metadata xmlns="http://www.beecode.cn/schema/amino-metadata" xmlns:m="http://www.beecode.cn/schema/bcp-participant">
<specification>1.0</specification>
<id>592a327c-fc41-44dd-a239-678b2d217982</id>
<name>com.beecode.inz.workflow.participant.SubmiterSubsidiaryRoleParticipant</name>
<title>提交对象共同子公司的角色</title>
<define>bcp.participant</define>
<define-version>1.0</define-version>
<content>
<m:participation-strategy>
<m:input>
<m:name>submitterId</m:name>
<m:title>提交人Id</m:title>
<m:description></m:description>
<m:type>string</m:type>
</m:input>
<m:input>
<m:name>roles</m:name>
<m:title>角色</m:title>
<m:description>json数组</m:description>
<m:type>string</m:type>
</m:input>
<m:implementation runtime="java">com.beecode.inz.workflow.participant.SubmiterSubsidiaryRoleParticipantStrategy</m:implementation>
</m:participation-strategy>
</content>
</metadata>
......@@ -8,5 +8,8 @@
<property name="bizObjectName" type="nstring" not-null="false">
<column name="bizObjectName" length="100"></column>
</property>
<property name="attribute1" type="nstring" not-null="false">
<column name="attribute1" length="500"></column>
</property>
</union-subclass>
</hibernate-mapping>
\ No newline at end of file
......@@ -8,6 +8,9 @@
<property name="bizObjectName" type="nstring" not-null="false">
<column name="bizObjectName" length="200"></column>
</property>
<property name="bizAffiliationName" type="nstring" not-null="false">
<column name="bizAffiliationName" length="200"></column>
</property>
<property name="triggerAction" type="nstring" not-null="false">
<column name="triggerAction" length="200"></column>
</property>
......
......@@ -20,5 +20,8 @@
<property name="description" type="nstring" not-null="false">
<column name="description" length="100"></column>
</property>
<property name="diagram" type="text" not-null="false">
<column name="diagram"></column>
</property>
</subclass>
</hibernate-mapping>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment