OcapStepAbstractAction.java
package com.mycim.webapp.actions;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.msg.JsonUtils;
import com.mycim.valueobject.consts.ActionIdEnum;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.consts.SpecifiedActionEnum;
import com.mycim.valueobject.ocap.OcapCard;
import com.mycim.valueobject.ocap.dto.DoActionDTO;
import com.mycim.valueobject.ocap.dto.OcapCardDTO;
import com.mycim.valueobject.ocap.dto.OcapDoActionDTO;
import com.mycim.valueobject.ocap.dto.RADCommentDTO;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.forms.RootForm;
import org.apache.commons.lang3.EnumUtils;
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.*;
/**
* @author songpy
* @version 1.0.0
* @date 2021/6/7
**/
public abstract class OcapStepAbstractAction extends OcapAbstractAction {
protected static final String ACTION_URL_KEY = "ocapActionUrl";
protected SpecifiedActionEnum actionType = SpecifiedActionEnum.NORMAL;
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
initCache((RootForm) form, request);
setActionUrl(request);
Map<String, Object> parametersMap = (Map) request.getAttribute(SessionNames.PARAMETERSINFO_KEY);
String ocapId = MapUtils.getString(parametersMap, "ocapId");
String lotId = MapUtils.getString(parametersMap, "lotId");
lotId = StringUtils.isBlankCheckNull(lotId) ? StringUtils.EMPTY : lotId;
long ocapRrn = MapUtils.getLongValue(parametersMap, "ocapRrn");
if (StringUtils.isNotEmpty(ocapId)) {
OcapCardDTO ocapInformationDTO = ocapService
.getOcapInfo(LocalContext.getFacilityRrn(), LocalContext.getUserId(), ocapId, lotId);
if (ocapInformationDTO != null) {
ocapRrn = ocapInformationDTO.getOcapRrn();
ocapId = ocapInformationDTO.getOcapId();
}
}
if (StringUtils.isNotBlank(ocapId)) {
registerOptionTypeForOcap(LocalContext.getFacilityRrn(), ocapId, request);
}
request.setAttribute("lotId", lotId);
request.setAttribute("ocapRrn", ocapRrn);
request.setAttribute("ocapId", ocapId);
request.setAttribute("specifiedAction", actionType.toString());
request.setAttribute("selectItems", JsonUtils.toString(getSelectItems()));
return mapping.getInputForward();
}
/**
* Action 方法
**/
public void doAction(DoActionDTO actionDTO) throws Exception {
OcapDoActionDTO doActionDTO = buildBaseOcapDoActionDTO(actionDTO);
doActionDTO.setOcapId(actionDTO.getOcapId());
doActionDTO.setLotId(actionDTO.getLotId());
Map<String, Object> parameters = (Map) WebUtils.getCacheString2Obj(actionDTO.getCacheParametersInfo());
doActionDTO.setParameters(parameters);
checkActionType(actionDTO.getActionId());
OcapCard ocap = wipQueryService
.getOcapCardByUniqueKey(LocalContext.getFacilityRrn(), actionDTO.getOcapId(), actionDTO.getLotId());
validOcapMainLot(ocap);
ocapService.doReviewAction(LocalContext.getFacilityRrn(), doActionDTO);
}
private void checkActionType(String actionId) {
Assert.isTrue(EnumUtils.isValidEnum(ActionIdEnum.class, actionId),
Errors.create().content("This action: {} is not defined!").args(actionId).build());
}
private void registerOptionTypeForOcap(Long facilityRrn, String ocapId, HttpServletRequest request) {
String lotId = WebUtils.getParameterUpperCase("lotId", request);
lotId = StringUtils.isBlankCheckNull(lotId) ? StringUtils.EMPTY : lotId;
List<String> types = new ArrayList<>();
types.add("holdGroup");
types.add("reasonGroup");
Boolean newRadCommentExist = false;
HashMap<String, Object> reponseData = new HashMap<>();
OcapCard ocap = wipQueryService.getOcapCardByUniqueKey(facilityRrn, ocapId, lotId);
String userGroupIds = getOcapSignerUserGroupIds(ocap);
if (StringUtils.isNotBlank(userGroupIds)) {
newRadCommentExist = buildRadCommonts(newRadCommentExist, reponseData, ocap, userGroupIds);
}
if (Boolean.TRUE.equals(!newRadCommentExist)) {
types.add("radComment");
}
for (String type : types) {
Collection optionValues = getOptionTypeList(facilityRrn, type);
if (optionValues != null) {
List comboxData = buildComboxDatas(optionValues);
reponseData.put(type, comboxData);
}
}
put("COMBOXDATAS", JsonUtils.toString(reponseData), request);
put("newRadCommentExist", newRadCommentExist, request);
}
private Boolean buildRadCommonts(Boolean newRadCommentExist, HashMap<String, Object> reponseData, OcapCard ocap,
String userGroupIds) {
Map<String, List> conditions = new HashMap<>();
List<String> userserGroups = new ArrayList<>(StringUtils.splitAsList(userGroupIds, StringUtils.COMMA_SIGN));
List<String> conditionList = new ArrayList<>();
conditionList.add(ocap.getOcapType());
conditions.put("userGroupId", userserGroups);
conditions.put("commentType", conditionList);
List<RADCommentDTO> radComments = ocapService.queryRADComment(conditions);
if (CollectionUtils.isNotEmpty(radComments)) {
newRadCommentExist = true;
List<String> addValue = new ArrayList<>();
ArrayList<Object> comboxData = new ArrayList<>();
for (RADCommentDTO tmp : radComments) {
HashMap<String, Object> jsonObject = new HashMap<>();
if (!addValue.contains(tmp.getCategory())) {
jsonObject.put("key", tmp.getCategory());
jsonObject.put("value", tmp.getCategory());
comboxData.add(jsonObject);
addValue.add(tmp.getCategory());
}
}
reponseData.put("radCommentsCategory", comboxData);
}
return newRadCommentExist;
}
protected abstract void setActionUrl(HttpServletRequest request);
protected void initCache(RootForm theform, HttpServletRequest request) throws Exception {
Map<String, Object> parametersMap = (Map) request.getAttribute(SessionNames.PARAMETERSINFO_KEY);
request.setAttribute("cacheParametersInfo", WebUtils.getCacheObj2String(parametersMap));
}
protected OcapDoActionDTO buildBaseOcapDoActionDTO(DoActionDTO actionDTO) {
OcapDoActionDTO ocapDoActionDTO = new OcapDoActionDTO();
ocapDoActionDTO.setFacilityRrn(LocalContext.getFacilityRrn());
ocapDoActionDTO.setUserRrn(LocalContext.getUserRrn());
ocapDoActionDTO.setUserId(LocalContext.getUserId());
ocapDoActionDTO.setSpecifiedAction(actionType.toString());
ocapDoActionDTO.setActionId(actionDTO.getActionId());
ocapDoActionDTO.setPathId(actionDTO.getPathId());
ocapDoActionDTO.setNextStepId(actionDTO.getNextStepId());
ocapDoActionDTO.setRemark(actionDTO.getComment());
Assert.isTrue(StringUtils.isNotEmptyTrim(actionDTO.getComment()),
Errors.create().content("Comment Can't be empty").build());
return ocapDoActionDTO;
}
}