DispatchAction.java
package com.mycim.webapp.actions.step;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.consts.VersionStatus;
import com.mycim.valueobject.ocap.OcapCard;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.OcapStepAbstractAction;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @author songpy
* @version 1.0.0
* @date 2021/5/25
**/
public class DispatchAction extends OcapStepAbstractAction {
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String ocapId = WebUtils.getParameterUpperCase("ocapId", request);
long ocapRrn = WebUtils.getParameterLong("ocapRrn", request);
String lotId = WebUtils.getParameterUpperCase("lotId", request);
lotId = StringUtils.isBlankCheckNull(lotId) ? StringUtils.EMPTY : lotId;
Map parameters = new HashMap();
parameters.put("lotId", lotId);
parameters.put("ocapRrn", ocapRrn);
parameters.put("ocapId", ocapId);
request.setAttribute(SessionNames.PARAMETERSINFO_KEY, parameters);
Long executionRrn = 0L;
Long wflRrn = 0L;
OcapCard ocapCard = wipQueryService.getOcapCardByUniqueKey(LocalContext.getFacilityRrn(), ocapId, lotId);
if (Objects.nonNull(ocapCard) && StringUtils.isEqual(ocapCard.getStatus(), VersionStatus.CLOSED_KEY)) {
return super.init(mapping, form, request, response);
}
wflRrn = ocapCard.getWorkflowRrn();
executionRrn = ocapCard.getExecutionRrn();
boolean existFlag = wipWorkflowQueryService.isExistExecutionRrn(executionRrn);
if (executionRrn <= 0 || !existFlag) {
ocapService.startWorkflowCase(ocapCard);
ocapCard = wipQueryService.getOcapCardByUniqueKey(LocalContext.getFacilityRrn(), ocapId, lotId);
executionRrn = ocapCard.getExecutionRrn();
}
buildWorkFlowParameters(wflRrn, executionRrn, parameters);
request.getRequestDispatcher(mapping.findForward("workflow").getPath() + "?action=init")
.forward(request, response);
return null;
}
@Override
protected void setActionUrl(HttpServletRequest request) {
request.setAttribute(ACTION_URL_KEY, "ocapDispatch.do");
}
private void buildWorkFlowParameters(Long wflRrn, Long executionRrn, Map parameters) {
parameters.put(SessionNames.WFL_RRN, wflRrn);
parameters.put(SessionNames.OCAP_FLAG, "1");
parameters.put(SessionNames.RUNSTEP_FLAG, "1");
String multiRootInstanceRrn = "0";
parameters.put(SessionNames.ROOT_WFL_EXEC_RRN, multiRootInstanceRrn);
long parentInstanceRrn = 0;
parameters.put(SessionNames.PARENT_WFL_EXEC_RRN, parentInstanceRrn + "");
parameters.put(SessionNames.RUNPARENTSTEP_FLAG, "0");
parameters.put(SessionNames.WFL_EXEC_RRN, executionRrn + "");
}
}