ConfirmHandleAction.java

package com.mycim.webapp.actions.step;

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.valueobject.consts.SpecifiedActionEnum;
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.OcapTransLogDTO;
import com.mycim.webapp.actions.OcapStepAbstractAction;

import javax.servlet.http.HttpServletRequest;

/**
 * @author songpy
 * @version 1.0.0
 * @date 2021/5/25
 **/
public class ConfirmHandleAction extends OcapStepAbstractAction {

    public ConfirmHandleAction() {
        this.actionType = SpecifiedActionEnum.CONFIRM_OCAP_HANDLE;
    }

    @Override
    public void doAction(DoActionDTO actionDTO) throws Exception {
        OcapDoActionDTO doActionDTO = buildBaseOcapDoActionDTO(actionDTO);
        doActionDTO.setOcapId(actionDTO.getOcapId());
        doActionDTO.setLotId(actionDTO.getLotId());

        checkUser(doActionDTO);

        super.doAction(actionDTO);
    }

    @Override
    protected void setActionUrl(HttpServletRequest request) {
        request.setAttribute(ACTION_URL_KEY, "ocapStepConfirmHandle.do");
    }

    /**
     * check Confirm Handle的user 必须与 Handle Action user 不一致
     *
     * @param doActionDTO
     */
    private void checkUser(OcapDoActionDTO doActionDTO) {
        OcapCardDTO ocap = wipQueryService
                .getOcapInfo(LocalContext.getFacilityRrn(), doActionDTO.getOcapId(), doActionDTO.getLotId());

        if (CollectionUtils.isNotEmpty(ocap.getTransLogs())) {
            OcapTransLogDTO logDTO = ocap.getTransLogs().get(0);
            boolean equals = StringUtils.equalsIgnoreCase(logDTO.getSignerId(), doActionDTO.getUserId());
            Assert.isFalse(equals, Errors.create().content(
                    "The double validation action must be different from the previous user").build());
        }

    }

}