UnitTimelimitStatus.java

package com.mycim.valueobject.wip;

import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.prp.TimeLimitSetup;

import java.sql.Timestamp;

public class UnitTimelimitStatus extends TimelimitStatus {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    protected Long unitRrn;

    protected String unitId;

    protected Long stepSequence;

    protected Timestamp startTime;

    protected String status;               // NORMAL, SPECIAL(Released after HOLD, never hold again)

    protected Long additionalTimeLimit;

    public UnitTimelimitStatus() {
        this.unitRrn = new Long(0);
    }

    public UnitTimelimitStatus(TimeLimitSetup timeLimitSetup) {
        this.timeLimitRrn = timeLimitSetup.getTimeLimitRrn();
        this.timeLimitId = timeLimitSetup.getTimeLimitId();
        this.timeLimitType = timeLimitSetup.getTimeLimitType();

        this.timeLimit = timeLimitSetup.getTimeLimit();
        this.timeLimitSec = timeLimitSetup.getTimeLimitSec();

        this.startProductRrn = timeLimitSetup.getStartProductRrn();
        this.startProcessRrn = timeLimitSetup.getStartProcessRrn();
        this.startProcessVersion = timeLimitSetup.getStartProcessVersion();
        this.startRouteRrn = timeLimitSetup.getStartRouteRrn();
        this.startOperationRrn = timeLimitSetup.getStartOperationRrn();

        this.endProductRrn = timeLimitSetup.getEndProductRrn();
        this.endProcessRrn = timeLimitSetup.getEndProcessRrn();
        this.endRouteRrn = timeLimitSetup.getEndRouteRrn();
        this.endOperationRrn = timeLimitSetup.getEndOperationRrn();

        this.timeType = timeLimitSetup.getTimeType();
        this.limitType = timeLimitSetup.getLimitType();

        this.startRouteSeq = timeLimitSetup.getStartRouteSeq();
        this.startOperationSeq = timeLimitSetup.getStartOperationSeq();

        this.endRouteSeq = timeLimitSetup.getEndRouteSeq();
        this.endOperationSeq = timeLimitSetup.getEndOperationSeq();
    }


    public Long getUnitRrn() {
        return unitRrn;
    }


    public void setUnitRrn(Long unitRrn) {
        this.unitRrn = unitRrn;
    }

    public String getUnitId() {
        return unitId;
    }

    public void setUnitId(String unitId) {
        this.unitId = unitId;
    }


    @Override
    public Long getStepSequence() {
        return stepSequence;
    }


    @Override
    public void setStepSequence(Long stepSequence) {
        this.stepSequence = stepSequence;
    }


    @Override
    public Timestamp getStartTime() {
        return startTime;
    }


    @Override
    public void setStartTime(Timestamp startTime) {
        this.startTime = startTime;
    }


    @Override
    public String getStatus() {
        return status;
    }


    @Override
    public void setStatus(String status) {
        this.status = status;
    }


    @Override
    public Long getAdditionalTimeLimit() {
        return additionalTimeLimit;
    }


    @Override
    public void setAdditionalTimeLimit(Long additionalTimeLimit) {
        this.additionalTimeLimit = additionalTimeLimit;
    }

    @Override
    public boolean isOverTimeByStatus() {
        return StringUtils.equalsIgnoreCase(this.status, "SPECIAL");
    }

    @Override
    public boolean isWithinTime() {
        return StringUtils.equalsIgnoreCase(this.status, "NORMAL");
    }

    @Override
    public Long getRemainTime() {
        return (System.currentTimeMillis() - this.getStartTime().getTime()) / 1000 - this.getTimeLimitSec();
    }

    public String getUniqueKeyWithStatus() {
        StringBuilder sb = new StringBuilder();
        sb.append(this.startProductRrn).append(this.startProcessRrn).append(this.startRouteRrn)
          .append(this.startOperationRrn);
        sb.append(this.endProductRrn).append(this.endProcessRrn).append(this.endRouteRrn).append(this.endOperationRrn);
        sb.append(this.timeLimitType).append(this.timeType).append(this.startProcessVersion).append(this.status);
        return sb.toString();
    }

}