AutoMonitorLotPortalAction.java

package com.mycim.webapp.actions;

import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.utils.CheckRegexUtils;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.automonitor.dto.LotAutoMonitorQueryDTO;
import com.mycim.valueobject.automonitor.entity.LotAutoMonitorInfo;
import com.mycim.valueobject.automonitor.util.AutoMonitorOperationConstants;
import com.mycim.valueobject.automonitor.util.MonitorJobStatusConts;
import com.mycim.valueobject.sys.ReferenceFileDetail;
import com.mycim.valueobject.wip.LotStatus;
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.*;

/**
 * @author kang.zhang
 */
public class AutoMonitorLotPortalAction extends AutoMonitorAction {

    @Override
    public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
                              HttpServletResponse response) {
        String[] types = new String[]{"EQUIPMENTLOCATION"};
        registerOptionType(LocalContext.getFacilityRrn(), Arrays.asList(types), request);
        int tabMaxCount = Integer.MAX_VALUE;
        String tabMaxCountStr;
        tabMaxCountStr = sysService.referenceDetailExchangeNull("$PORTAL_TAB_MAX_COUNT", "LOTPORTAL", "DATA_1_VALUE");
        if (StringUtils.isNotBlank(tabMaxCountStr) && NumberUtils.isNumber(tabMaxCountStr)) {
            tabMaxCount = NumberUtils.toInt(tabMaxCountStr, Integer.MAX_VALUE);
        }
        request.setAttribute("totalTabCount", tabMaxCount);
        return mapping.findForward("lotPortal");
    }

    public List initLotStatus(Map map) {
        List list = new ArrayList();
        long refRrn = getInstanceRrn("$$AUTO_MONITOR_LOT_STATUS", LocalContext.getFacilityRrn(),
                                     ObjectList.REFERENCE_FILE_KEY);
        List<ReferenceFileDetail> refFiles = sysService.getReferenceFileDetails(refRrn);
        if (CollectionUtils.isNotEmpty(refFiles)) {
            for (ReferenceFileDetail rd : refFiles) {
                map.put("value", rd.getData1Value());
                map.put("key", rd.getKey1Value());
                list.add(map);
            }
        }
        return list;
    }

    public Map query(Map<String, Object> params) {
        Long pageSize = MapUtils.getLong(params, "limit");
        Long pageNo = MapUtils.getLong(params, "page");
        Page page = new Page(pageNo, pageSize);
        LotAutoMonitorQueryDTO queryDTO = getConditionMapByMap(params);

        page = lotAutoMonitorInqService.getLotMonitorLotPage(page, queryDTO);

        Map<String, Object> map = MapUtils.newHashMap();
        map.put("data", page.getResults());
        map.put("totalCount", page.getTotalItems());
        return map;
    }

    private LotAutoMonitorQueryDTO getConditionMapByMap(Map<String, Object> params) {
        LotAutoMonitorQueryDTO queryDto = new LotAutoMonitorQueryDTO();
        queryDto.setLotId(CheckRegexUtils.formatSearchString(MapUtils.getString(params, "lotid")));
        queryDto.setMainEqptLocation(CheckRegexUtils.formatSearchString(MapUtils.getString(params, "eqptLocationCondition")));
        queryDto.setMainEqptId(CheckRegexUtils.formatSearchString(MapUtils.getString(params, "eqptIdCondition")));
        queryDto.setCarrierId(CheckRegexUtils.formatSearchString(MapUtils.getString(params, "carrierIdCondition")));
        queryDto.setItemType(CheckRegexUtils.formatSearchString(MapUtils.getString(params, "itemtype")));
        queryDto.setStartDate(CheckRegexUtils.formatSearchString(MapUtils.getString(params, "startDateCondition")));
        queryDto.setEndDate(CheckRegexUtils.formatSearchString(MapUtils.getString(params, "endDateCondition")));
        queryDto.setProductId(CheckRegexUtils.formatSearchString(MapUtils.getString(params, "productIdCondition")));

        List<String> queryStatus = new ArrayList<>();

        Object lotStatus1 = MapUtils.getObject(params, "lotStatus1");
        if(lotStatus1 instanceof List) {
            List<String> lotStatusList = (List<String>) lotStatus1;
            for (String status : lotStatusList) {
                if (StringUtils.equals(LotStatus.ACTIVE, status)) {
                    for (String activeStatus : LotStatus.getActiveStatus()) {
                        if (!lotStatusList.contains(activeStatus)) {
                            queryStatus.add(activeStatus);
                        }
                    }
                }
            }
            queryStatus.addAll(lotStatusList);
        } else if(lotStatus1 instanceof String) {
            queryStatus.add((String)lotStatus1);
        }
        queryDto.setLotStatus(queryStatus);

        List<String> queryJobStatus = new ArrayList<>();
        Object jobStatusObj = MapUtils.getObject(params, "autoMonitorJobStatus");
        if(jobStatusObj instanceof List) {
            List<String> jobStatusList = (List<String>) jobStatusObj;
            for (String status : jobStatusList) {
                if (StringUtils.equals(MonitorJobStatusConts.CLOSE_KEY, status)) {
                    queryJobStatus.addAll(Arrays.asList(MonitorJobStatusConts.getCloseJobStatus()));
                }

                if (!queryJobStatus.contains(status)) {
                    queryJobStatus.add(status);
                }
            }
            queryJobStatus.addAll(jobStatusList);
        } else if(jobStatusObj instanceof String) {
            queryJobStatus.add((String)jobStatusObj);
        }
        queryDto.setAutoMonitorJobStatus(queryJobStatus);

        return queryDto;
    }

}