OcapAbstractAction.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.context.spring.SpringContext;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.msg.JsonUtils;
import com.mycim.server.edcchart.service.EdcChartService;
import com.mycim.server.ocap.service.OcapService;
import com.mycim.valueobject.consts.ActionIdEnum;
import com.mycim.valueobject.consts.SpecifiedActionEnum;
import com.mycim.valueobject.consts.StepOwnerTypeEnum;
import com.mycim.valueobject.ocap.OcapCard;
import com.mycim.valueobject.security.UserGroup;
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.List;
import java.util.Map;
import java.util.StringJoiner;

/**
 * OCAP
 *
 * @author songpy
 * @version 1.0.0
 * @date 2021/1/11
 **/
public class OcapAbstractAction extends WipSetupAction {
    protected OcapService ocapService = SpringContext.getBean(OcapService.class);

    protected EdcChartService edcChartService = SpringContext.getBean(EdcChartService.class);

    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) throws Exception {
        initSelectItem(request);
        return mapping.getInputForward();
    }

    protected void initSelectItem(HttpServletRequest request) {
        request.setAttribute("selectItems", JsonUtils.toString(getSelectItems()));
    }

    protected Map<String, List<Map<String, String>>> getSelectItems() {
        Map<String, List<Map<String, String>>> result = new HashMap<>();

        result.put("stepOwnerType", StepOwnerTypeEnum.toMapList());
        result.put("specifiedAction", SpecifiedActionEnum.toMapList());
        result.put("actionId", ActionIdEnum.toMapList());
        return result;
    }

    protected void validOcapMainLot(OcapCard ocap) {
        Assert.isFalse(StringUtils.isNotBlank(ocap.getOcapBatchId()) &&
                               !StringUtils.equalsIgnoreCase(ocap.getLotId(), ocap.getOcapMainLotId()),
                       Errors.create().content("Current ocap is in batch, please use {} to operate!")
                             .args(ocap.getOcapMainLotId()).build());
    }

    protected String getOcapSignerUserGroupIds(OcapCard ocap) {
        String userGroupIds = ocapService.getNextSignerId(ocap);

        Assert.isFalse(StringUtils.isEmpty(userGroupIds),
                       Errors.create().content("Current OCAP SignerId is Empty!").build());

        if (!securityService.isAdminRole(LocalContext.getFacilityRrn(), LocalContext.getUserRrn())) {
            StringJoiner userGroupIdJoiner = new StringJoiner(StringUtils.COMMA_SIGN);
            List<UserGroup> userGroups = securityService.getUserGroupByUserRrn(LocalContext.getUserRrn());
            for (UserGroup userGroup : userGroups) {
                if (StringUtils.contains(userGroupIds, userGroup.getInstanceId())) {
                    userGroupIdJoiner.add(userGroup.getInstanceId());
                }
            }
            userGroupIds = userGroupIdJoiner.toString();
        }
        return userGroupIds;
    }

}