Package com.mossle.form.operation

Source Code of com.mossle.form.operation.SaveDraftOperation

package com.mossle.form.operation;

import java.util.Map;

import com.mossle.bpm.cmd.CompleteTaskWithCommentCmd;

import com.mossle.core.spring.ApplicationContextHelper;

import com.mossle.form.keyvalue.KeyValue;
import com.mossle.form.keyvalue.Prop;
import com.mossle.form.keyvalue.Record;
import com.mossle.form.keyvalue.RecordBuilder;

import com.mossle.security.util.SpringSecurityUtils;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.impl.interceptor.Command;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.task.Task;

import org.springframework.util.Assert;

/**
* 保存草稿.
*/
public class SaveDraftOperation extends AbstractOperation<String> {
    public static final String OPERATION_BUSINESS_KEY = "businessKey";
    public static final String OPERATION_TASK_ID = "taskId";
    public static final String OPERATION_BPM_PROCESS_ID = "bpmProcessId";
    public static final int STATUS_DRAFT_PROCESS = 0;
    public static final int STATUS_DRAFT_TASK = 1;
    public static final int STATUS_RUNNING = 2;

    public String execute(CommandContext commandContext) {
        String taskId = getParameter(OPERATION_TASK_ID);
        String businessKey = getParameter(OPERATION_BUSINESS_KEY);
        String bpmProcessId = getParameter(OPERATION_BPM_PROCESS_ID);
        String userId = SpringSecurityUtils.getCurrentUserId();
        KeyValue keyValue = getKeyValue();

        if (this.notEmpty(taskId)) {
            // 如果是任务草稿,直接通过processInstanceId获得record,更新数据
            // TODO: 分支肯定有问题
            Task task = getProcessEngine().getTaskService().createTaskQuery()
                    .taskId(taskId).singleResult();

            if (task == null) {
                throw new IllegalStateException("任务不存在");
            }

            String processInstanceId = task.getProcessInstanceId();
            Record record = keyValue.findByRef(processInstanceId);

            if (record != null) {
                record = new RecordBuilder().build(record, STATUS_DRAFT_TASK,
                        getParameters());
                keyValue.save(record);
                businessKey = record.getCode();
            }
        } else if (this.notEmpty(businessKey)) {
            // 如果是流程草稿,直接通过businessKey获得record,更新数据
            Record record = keyValue.findByCode(businessKey);

            record = new RecordBuilder().build(record, STATUS_DRAFT_PROCESS,
                    getParameters());
            keyValue.save(record);
        } else {
            // 如果是第一次保存草稿,肯定是流程草稿,先初始化record,再保存数据
            Record record = new RecordBuilder().build(bpmProcessId,
                    STATUS_DRAFT_PROCESS, getParameters(), userId);
            keyValue.save(record);
            businessKey = record.getCode();
        }

        return businessKey;
    }

    public boolean notEmpty(String str) {
        return (str != null) && (!"".equals(str));
    }

    public KeyValue getKeyValue() {
        return ApplicationContextHelper.getBean(KeyValue.class);
    }
}
TOP

Related Classes of com.mossle.form.operation.SaveDraftOperation

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.