RemeasureAction.java

package com.mycim.webapp.actions.step;

import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.msg.JsonUtils;
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.OcapDoActionDTO;
import com.mycim.valueobject.ocap.dto.RemeasurementDTO;
import com.mycim.valueobject.ocap.dto.UnitIdDTO;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author songpy
 * @version 1.0.0
 * @date 2021/5/25
 **/
public class RemeasureAction extends AbstractSpcStepAction {
    public RemeasureAction() {
        this.actionType = SpecifiedActionEnum.REMEASURE;
    }

    /**
     * Action方法
     */
    public void doRemeasurement(RemeasurementDTO remeasurementDTO) {
        OcapDoActionDTO ocapDoActionDTO = buildBaseOcapDoActionDTO(remeasurementDTO);
        ocapDoActionDTO.setOcapRrn(remeasurementDTO.getOcapRrn());
        buildRemeasurementDatas(ocapDoActionDTO, remeasurementDTO);

        //check
        OcapCard ocap = wipQueryService.getOcapCardByPrimaryKey(ocapDoActionDTO.getOcapRrn());
        Assert.isFalse(OcapTypeEnum.isOffline(ocap.getOcapType()),
                       Errors.create().content("OFFLINE OCAP cannot perform the specified operation: remeasurement")
                             .build());
        validOcapMainLot(ocap);
        ocapService.doRemeasurement(ocapDoActionDTO);
    }

    @Override
    void specialHandling(HttpServletRequest request) {
        request.setAttribute("offlineFlag", this.actionType.toString());
    }

    protected void buildRemeasurementDatas(OcapDoActionDTO ocapDoActionDTO, RemeasurementDTO remeasurementDTO) {
        ocapDoActionDTO.setTransDatas(new HashMap<String, String>());
        Set<String> unitsSet = new HashSet<>();
        List<UnitIdDTO> unitIds = ocapService.getRemeasurementDatas(ocapDoActionDTO.getOcapRrn());
        if (CollectionUtils.isNotEmpty(unitIds)) {
            ocapDoActionDTO.getTransDatas().put(OcapConts.MapKey.KEY_REMEASURE_UNIT_IDS, JsonUtils.toString(unitIds));
        }
    }

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

}