1.7.5.1.2. 节点动作代码

package com.seeyon.ctp.workflow.devnode;

import java.util.Map;
import java.util.UUID;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.seeyon.ctp.common.AppContext;
import com.seeyon.ctp.organization.bo.V3xOrgMember;
import com.seeyon.ctp.organization.manager.OrgManager;
import com.seeyon.ctp.organization.manager.OrgManagerDirect;
import com.seeyon.ctp.workflow.supernode.BaseSuperNodeAction;
import com.seeyon.ctp.workflow.supernode.SuperNodeResponse;

/**
 * 跨单位调动人员节点。
 * 
 * @author 朱二阳
 * 
 */
public class MoveMemberNodeAction extends BaseSuperNodeAction {
    private static final Log logger = LogFactory
            .getLog(MoveMemberNodeAction.class);

    /**
     * 节点动作撤销。
     */
    public void cancelAction(String token, String activityId) {

    }

    /**
     * 确认节点动作执行。
     */
    public SuperNodeResponse confirmAction(String token, String activityId,
            Map<String, Object> params) {
        return this.executeAction(token, activityId, params);
    }

    /**
     * 动作执行方法。
     * 
     * @param token
     *            外部调用节点的依据。
     * @param activityId
     *            节点实例的唯一标识。
     * @param params
     *            节点执行的上下文信息,通过CTP_FORM_DATA key可以获取表单数据。
     * @return 执行结果。
     */
    public SuperNodeResponse executeAction(String token, String activityId,
            Map<String, Object> params) {
        SuperNodeResponse response = new SuperNodeResponse();
        OrgManager orgManager = (OrgManager) AppContext.getBean("orgManager");
        OrgManagerDirect orgManagerDirect = (OrgManagerDirect) AppContext
                .getBean("orgManagerDirect");
        Map<String, Object> data = getFormData(params);
        try {
            V3xOrgMember member = orgManager.getMemberById(Long.parseLong(data
                    .get("调出人员").toString()));
            member.setOrgAccountId(Long.parseLong(data.get("调往单位").toString()));
            member.setOrgDepartmentId(Long.parseLong(data.get("调往部门")
                    .toString()));
            member.setOrgPostId(Long.parseLong(data.get("岗位").toString()));
            member.setOrgLevelId(Long.parseLong(data.get("职务级别").toString()));
            orgManagerDirect.updateMember(member);
            response.setDataId(String.valueOf(UUID.randomUUID()
                    .getMostSignificantBits()));
            response.setReturnCode(1);
            response.setReturnMsg("跨单位调动人员节点处理成功");
        } catch (Throwable e) {
            logger.info("跨单位调动人员失败", e);
            response.setReturnCode(0);
            response.setReturnMsg("跨单位调动人员节点处理失败");
        }

        return null;
    }

    private Map getFormData(Map<String, Object> params) {
        return (Map) params.get("CTP_FORM_DATA");
    }

    /**
     * 节点标识。
     */
    public String getNodeId() {
        return "dev_node_move";
    }

    /*
     * 节点名称。
     */
    public String getNodeName() {
        return "跨单位调动人员";
    }

    /**
     * 选择时的显示顺序。
     */
    public int getOrder() {
        return 4;
    }

}