HandleAction.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.valueobject.consts.OcapConts;
import com.mycim.valueobject.consts.OcapTypeEnum;
import com.mycim.valueobject.consts.SpecifiedActionEnum;
import com.mycim.valueobject.ocap.OcapCard;
import com.mycim.valueobject.ocap.dto.HandleDTO;
import com.mycim.valueobject.ocap.dto.OcapDoActionDTO;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.OcapStepAbstractAction;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

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

    public HandleAction() {
        this.actionType = SpecifiedActionEnum.OCAP_HANDLE;
    }

    /**
     * Action方法
     */
    public void saveOCAPHandle(HandleDTO handleDTO) {
        OcapDoActionDTO ocapDoActionDTO = buildBaseOcapDoActionDTO(handleDTO);
        ocapDoActionDTO.setOcapId(handleDTO.getOcapId());
        ocapDoActionDTO.setLotId(handleDTO.getLotId());

        Map parameters = (Map) WebUtils.getCacheString2Obj(handleDTO.getCacheParametersInfo());
        ocapDoActionDTO.setParameters(parameters);

        Assert.isFalse(
                StringUtils.isEmpty(ocapDoActionDTO.getOcapId()) || StringUtils.isEmpty(ocapDoActionDTO.getActionId()),
                Errors.create().content("The parameter is missing. Please login again.").build());

        OcapCard ocap = wipQueryService
                .getOcapCardByUniqueKey(LocalContext.getFacilityRrn(), handleDTO.getOcapId(), handleDTO.getLotId());

        validOcapMainLot(ocap);
        // check
        if (actionType.equals(SpecifiedActionEnum.OCAP_HANDLE)) {
            Assert.isFalse(StringUtils.isEmpty(handleDTO.getLotHandle()) &&
                                   StringUtils.isEmpty(handleDTO.getEquipmentHandle()) &&
                                   StringUtils.isEmpty(handleDTO.getOtherHandle()),
                           Errors.create().content("Please choose OCAP Handle!").build());
            Assert.isFalse(
                    OcapTypeEnum.isInline(ocap.getOcapType()) && StringUtils.isEmpty(handleDTO.getOtherHandle()) &&
                            StringUtils.isEmpty(handleDTO.getLotHandle()),
                    Errors.create().content("Please choose OCAP Handle!").build());
            Assert.isFalse(StringUtils.isEmpty(handleDTO.getOtherHandle()) &&
                                   StringUtils.isEmpty(handleDTO.getEquipmentHandle()) &&
                                   OcapTypeEnum.isOffline(ocap.getOcapType()),
                           Errors.create().content("Please choose Equipment Handle!").build());
            Assert.isFalse(
                    StringUtils.isEmpty(handleDTO.getOtherHandle()) && StringUtils.isEmpty(handleDTO.getReasonGroup()),
                    Errors.create().content("Please choose Reason Group!").build());
            Assert.isFalse(
                    StringUtils.isEmpty(handleDTO.getOtherHandle()) && StringUtils.isEmpty(handleDTO.getReasonCode()),
                    Errors.create().content("Please choose Reason Code!").build());
        }

        buildOcapDoActionDTOCaseDataByOcapHandle(ocapDoActionDTO, handleDTO);
        ocapService.doReviewAction(LocalContext.getFacilityRrn(), ocapDoActionDTO);
    }

    private void buildOcapDoActionDTOCaseDataByOcapHandle(OcapDoActionDTO ocapDoActionDTO, HandleDTO handleDTO) {
        ocapDoActionDTO.setTransDatas(new HashMap<String, String>());
        ocapDoActionDTO.getTransDatas()
                       .put(OcapConts.MapKey.KEY_LOT_HANDLE, StringUtils.trimToUpperCase(handleDTO.getLotHandle()));
        ocapDoActionDTO.getTransDatas().put(OcapConts.MapKey.KEY_EQUIPMENT_HANDLE,
                                            StringUtils.trimToUpperCase(handleDTO.getEquipmentHandle()));
        ocapDoActionDTO.getTransDatas()
                       .put(OcapConts.MapKey.KEY_OTHER_HANDLE, StringUtils.trimToUpperCase(handleDTO.getOtherHandle()));
        ocapDoActionDTO.getTransDatas()
                       .put(OcapConts.MapKey.KEY_REASON_GROUP, StringUtils.trimToUpperCase(handleDTO.getReasonGroup()));
        ocapDoActionDTO.getTransDatas()
                       .put(OcapConts.MapKey.KEY_REASON_CODE, StringUtils.trimToUpperCase(handleDTO.getReasonCode()));
        ocapDoActionDTO.getTransDatas()
                       .put(OcapConts.MapKey.KEY_DEPARTMENT, StringUtils.trimToUpperCase(handleDTO.getDepartment()));
    }

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

}